Потоки у Windows

Потік у Windows — реалізація потоків в родині операційних систем Windows, структури всередині процесу, які містять виконуваний код та отримують процесорний час для його виконання з метою одночасного чи псевдо-одночасного виконання кількох задач[1]. Новостворений процес має один потік виконання, і під час роботи може породжувати інші потоки (і зупиняти їх)[2]. Алгоритми, які реалізується у кількох потоках, називають багатопотоковими.

Переваги багатопотоковості

Багатопотоковість програми створює підґрунтя для реалізації реальної багатозадачності — виконання кількох завдань одночасно (якщо обчислювальна система є багатопроцесорною), або «псевдоодночасно» («майже одночасно») на однопроцесорних системах. Наявність кількох потоків дозволяє:

  • Оптимізувати організацію поведінки програми. Часто поведінка програми може бути організована у кілька незалежних паралельних алгоритмів, тоді їх можна винести в окремі потоку. При цьому їм можна задавати різний пріоритет виконання.
  • Обходити критичні до часу операції. Якщо програма має лише один потік, то вона повинна зупинити все виконання при очікуванні повільних операцій, таких як запис у файл чи відображення засобами мультимедіа. При цьому процесор перебуває у простої, поки ця операція не завершиться. Якщо застосунок складається з кількох потоків, він може продовжувати виконання в окремих потоках, коли один потік очікуватиме на завершення повільної операції.
  • Реалізувати багатопроцесорну обробку. Якщо система, у якій працює програма, є мультипроцесорною, то можна сповна скористатись наявними обчислювальними ресурсами і підвищити її ефективність шляхом використанням кількох потоків. При цьому різні потоки можуть виконуватись одночасно на різних процесорах.

Таким чином, доцільне використання потоків може значно поліпшити продуктивність і зручність використання програм.

На одному процесорі багатопотоковість відбувається шляхом тимчасової активізації різних потоків. Таке перемикання відбувається досить часто, щоб користувач сприймав виконання потоків як одночасне. У багатопроцесорних і багатоядерних системах потоки можуть реально виконуватись одночасно. При цьому кожен процесор або ядро обробляє окремий потік (або кілька потоків).

Загальна характеристика потоків

Хоча в кожного потоку є свій контекст виконання. Кожний потік усередині одного процесу використовує його віртуальний адресний простір (а також інші ресурси, які належать процесу). Це означає, що всі потоки в процесі можуть записувати й зчитувати вміст пам'яті інших потоків цього процесу. Але потоки не можуть посилатися на адресний простір іншого процесу. Виняток може бути в ситуації, коли процес надає частину свого адресного простору як розділ загальної пам'яті через об'єкт «проектований файл» (file mapping object), або коли один із процесів має право на відкриття іншого процесу й використовує функції доступу до пам'яті між процесами.

За замовчуванням у потоків немає власного маркера доступу, але він може отримати його і це дозволить йому підміняти контекст захисту іншого процесу.

Потік містить такі важливі елементи:

  • завантажений для виконання код;
  • вміст набору регістрів процесора, що відображають стан процесора;
  • два стеки, один із яких використовується потоком при виконанні в режимі ядра, а інший — у користувацькому режимі;
  • закриту область пам'яті, яку називають локальною пам'яттю потоку (thread-local storage, TLS); вона використовується підсистемами, бібліотеками виконуваних систем (run-time libraries) і DLL;
  • унікальний ідентифікатор потоку;
  • іноді потоки мають свій контекст захисту, який використовується багатопотоковими серверними програмами, що підміняють контекст захисту клієнтів.

Контекст потоку

Вміст змінних регістрів, стеку й локальних областей пам'яті називають контекстом потоку. Оскільки ця інформація відмінна для кожної апаратної платформи, на якій може працювати Windows, відповідна структура даних також є платформо-залежною. Функція GetThreadContext надає доступ до цієї апаратно-залежної інформації (яку називають блоком CONTEXT).

Рівні пріоритету потоків

Рівні пріоритету потоків

Windows має 32 рівня пріоритету — від 0 до 31. Вони групуються як:[3]

  • шістнадцять рівнів реального часу (16-31);
  • п'ятнадцять динамічних рівнів ( 1-15);
  • один системний рівень (0), зарезервований для потоку обнуління сторінок пам'яті (zero page thread).

У межах кожного класу пріоритету можуть бути наступні рівні пріоритету потоків[1]:

  • THREAD_PRIORITY_IDLE,
  • THREAD_PRIORITY_LOWEST,
  • THREAD_PRIORITY_BELOW_NORMAL,
  • THREAD_PRIORITY_NORMAL,
  • THREAD_PRIORITY_ABOVE_NORMAL,
  • THREAD_PRIORITY_HIGHEST,
  • THREAD_PRIORITY_TIME_CRITICAL.

За замовчуванням потоки створюються із значенням пріоритету THREAD_PRIORITY_NORMAL. Значення рівнів пріоритету потоків THREAD_PRIORITY_ABOVE_NORMAL та THREAD_PRIORITY_HIGHEST найчастіше використовуються у потоках, що призначені для взаємозв'язку з користувачами. Фонові потоки, які не потребують значних процесорних ресурсів, можуть мати пріоритет THREAD_PRIORITY_BELOW_NORMAL або THREAD_PRIORITY_LOWEST.

Рівні пріоритету потоку призначаються з урахуванням двох різних точок зору — Windows API і ядра Windows[4]. Windows API спочатку впорядковує процеси за класами пріоритету, призначеними при їхньому створенні (Realtime (реального часу), High (високий), Above Normal (вище звичайного), Normal (звичайний), Below Normal (нижче звичайного) і Idle (простоюючий)), а потім — за відносним пріоритетом індивідуальних потоків у межах цих процесів (Time-critical (критичний за часом), Highest (найвищий), Above Normal (вище звичайного), Normal (звичайний), Below Normal (нижче звичайного), Lowest (найменший) і Idle (простоюючий)).

Базовий пріоритет кожного потоку у Windows API встановлюється, виходячи із класу пріоритету її процесу й відносного пріоритету самого потоку.

Стани потоків

Стани потоків у Windows та можливі переходи між станами

Стани потоків:[1]

  • Initialized (ініціалізований)
  • Ready (готовий)
  • Standby (простоює)
  • Running (виконується)
  • Waiting (очікує)
  • Transition (перехідний стан)
  • Terminated (завершений)

Планування потоків у Windows

Детальніше: Планування потоків

Системний алгоритм керування послідовністю виконання потоків та розподілу процесорного часу між ними називають плануванням потоків. У Windows реалізовано підсистему витискуючого планування потоків на основі рівнів пріоритету, у якій завжди виконується готовий до виконання потік з найбільшим пріоритетом[4]. Але вибір потоку для виконання може бути обмежений набором процесорів, на яких вона може працювати. Це явище називають прив'язкою до процесорів (processor affinity). За замовчуванням потік виконується на будь-якому доступному процесорі, але можна змінити прив'язку до процесорів через функції планування.

Створення потоку

Життєвий цикл потоку починається при його створенні програмою. Запит на створення потоку надходить виконавчій системі Windows, диспетчер процесів виділяє пам'ять для об'єкта «потік» і викликає ядро для ініціалізації блоку потоку. Нижче перераховані основні етапи створення потоку функцією API CreateThread (вона міститься в Kernel32.dll)[5]:

  1. Створення стеку користувацького режиму в адресному просторі процесу.
  2. Ініціалізація апаратного контексту потоку, специфічного для конкретної архітектури процесора.
  3. Для створення об'єкта «потік» виконавчої системи викликається NtCreateThread. CreateThread повідомляє підсистему Windows про створення нового потоку і та виконує підготовчі операції.
  4. Викликаючому коду повертаються дескриптор і ідентифікатор потоку, згенерований на попередньому етапі.
  5. Виконання потоку відновлюється і йому може бути виділено процесорний час (якщо він не був створений із прапорцем CREATE_SUSPENDED).

Функція CreateThread оголошена так (визначення за допомогою мови Delphi)[1]:

function CreateThread(
 lpThreadAttributes: Pointer; // Атрибути безпеки потоку
 dwStackSize: DWORD;          // Розмір стеку для потоку
 lpStartAddress: TFNThreadStartRoutine; // Функція потоку
 lpParameter: Pointer;        // Аргумент для нового потоку
 dwCreationFlags: DWORD;      // Прапорці створення
 var lpThreadId: DWORD        // Ідентифікатор потоку
): THandle;                    // Дескриптор потоку

Ключовим параметром цієї функції є вказівник lpStartAddress, який вказує на функцію потоку. Саме у ній міститься виконуваний код потоку. Як правило, це адреса функції, яка приймає єдиний 32-бітний вказівник у ролі аргументу та повертає 32-бітний вихідний код.

Конкуренція (конфлікт) потоків

Детальніше: Конкуренція потоків

У зв'язку з тим, що Windows використовує витискуючу багатозадачність, при якій виконання будь-якої потоку може бути перерване в будь-який момент часу, доступ кількох потоків до однієї ділянки пам'яті процесу може спричинити суттєві проблеми. Справа у тому, що багато операцій при виконанні програми повинні бути атомарними, тобто неподільними: коли потік виконує таку дію, інші потоку бачать її або ще непочатою, або вже завершеною. Якщо потоку не синхронізовані, то всі операції аж до рівня процесорних інструкцій є неатомарні. Ситуація, при якій різні потоки, виконуючи доступ до спільного для них ресурсу, порушують логіку алгоритму програми, називають конкуренцією (конфліктом) потоків.

Для запобігання помилкам, які можуть виникати при узгодженні роботи кількох потоків у Windows, використовують засоби синхронізації: критичні секції, м'ютекси, семафори та події. Об'єкти синхронізації забезпечують доступ до системних ресурсів, які можуть перебувати під керуванням одного чи кількох процесів. Об'єкт синхронізації може перебувати у двох станах: сигнальному та несигнальному. Коли об'єкт перебуває у стані зайнятості, або несигнальному стані, очікуюча потік не може працювати. Сигнальний стан об'єкта синхронізації дозволяє продовжити роботу потоку.

Волокна

Система Windows забезпечує також функціонування механізму волокон (fibers). Волокна дозволяють програмам створювати власні «потоку виконання», не використовуючи системний механізм планування потоків на основі пріоритетів. Волокна часто називають «полегшеними» потоками. Вони невидимі ядру, оскільки реалізуються у користувацькому режимі. Для створення волокна потрібно викликати функцію ConvertThreadToFiber, що перетворить потік у волокно. Отримане волокно може створювати додаткові волокна (у кожного волокна може бути свій набір волокон). Виконання волокна (на відміну від потоку) не починається доти, поки воно не буде ініційоване вручну. Волокно працює до завершення або до перемикання на інше волокно.

Джерела

  1. а б в г Коноваленко І. В., Федорів П. С. Системне програмування у Windows з прикладами на Delphi, Т:ТНТУ.- 2012 [Архівовано 8 грудня 2012 у Wayback Machine.].
  2. MSDN. Processes and Threads [Архівовано 30 серпня 2017 у Wayback Machine.](англ.)
  3. Руссинович М. и Соломон Д. (2008). Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP и Windows 2000. Мастер-класс. Москва: Издательзство «Русская Редакция». с. 346. ISBN 978-5-459-01730-4.
  4. а б Руссинович М. Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP и Windows 2000. Мастер-класс / М.Руссинович, Д.Соломон ; пер. с англ. — 4-е изд. — М: Издательско-торговый дом «Русская редакция» ; СПб: Питер, 2005.
  5. Рихтер Дж. Windows для профессионалов: создание эффективных Win32 приложений с учетом специфики 64-разрядной версии Windows/ Дж. Рихтер ; пер. с англ. — 4-е изд. — СПб. : Питер; М.: Издательско-торговый дом «Русская редакция», 2001.

Read other articles:

Infantry regiment in the Canadian Army Primary Reserve based in Ottawa Governor General's Foot GuardsBadge of the regimentActive1872–presentCountryCanadaBranchCanadian ArmyTypeFoot guardsRoleLight infantrySizeBattalionPart of33 Canadian Brigade GroupGarrison/HQCartier Square Drill Hall, Ottawa, OntarioNickname(s)The GuardsGGFGsThe Sharpshooters (historic)Motto(s) Civitas et princeps cura nostra (Latin for 'Our country and ruler are our concern')[1] Up the Guards! (unofficia...

 

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Certaines informations figurant dans cet article ou cette section devraient être mieux reliées aux sources mentionnées dans les sections « Bibliographie », « Sources » ou « Liens externes » (novembre 2022). Vous pouvez améliorer la vérifiabilité en associant ces informations à des références à l'aide d'appels de notes. Église du Rédempteur avec son pont de barques v...

 

John Leslie Breck, por James Carroll Beckwith. John Leslie Breck (1860 - 1899) fue un artista estadounidense que murió a los 39 años. Durante su corta vida pintó numerosos trabajos notables, y se le atribuye la introducción del Impresionismo en los Estados Unidos con una exhibición en Boston en 1890. Falleció en 1899, informándose su muerte como envenenamiento con gas, y está enterrado en el Forest Hills Cemetery en Boston. Sus trabajos se conservan en varios museos estadounidenses y ...

Herbert Backe SS-Gruppenführer Herbert Backe Geboren 1 mei 1896Batoemi, Georgië, Keizerrijk Rusland Overleden 6 april 1947Neurenberg, Amerikaanse bezettingszone in Duitsland Land  nazi-Duitsland Politieke partij NSDAP Partner Ursela Kahl Religie Protestants; verklaarde zich later Gottgläubig[1] Staatssecretaris in het Rijksministerie voor Voeding en Landbouw Aangetreden 27 oktober 1933[2][3] Einde termijn 31 december 1934[2][3] President Ad...

 

Мосьє Мишафр. Monsieur La Souris Жанр кримінальна драмаРежисер Жорж ЛакомбПродюсер Роже РішбеСценарист Марсель АшарНа основі Мосьє Миша Жоржа СіменонаУ головних ролях Ремю Еме Кларіон Рене БержеронОператор Віктор АрменіКомпозитор Жорж ОрікХудожник Жак КрауссКінокомпанія Film...

 

العلَّامة  مصطفى مسلم معلومات شخصية الميلاد سنة 1940  عين العرب  الوفاة 17 أبريل 2021 (80–81 سنة)  عينتاب  سبب الوفاة كوفيد-19  مواطنة سوريا  إخوة وأخوات صالح مسلم محمد  الحياة العملية المدرسة الأم كلية الشريعة، جامعة دمشق (الشهادة:بكالوريوس) (–1965)كلية أصول ال...

Artikel ini perlu diwikifikasi agar memenuhi standar kualitas Wikipedia. Anda dapat memberikan bantuan berupa penambahan pranala dalam, atau dengan merapikan tata letak dari artikel ini. Untuk keterangan lebih lanjut, klik [tampil] di bagian kanan. Mengganti markah HTML dengan markah wiki bila dimungkinkan. Tambahkan pranala wiki. Bila dirasa perlu, buatlah pautan ke artikel wiki lainnya dengan cara menambahkan [[ dan ]] pada kata yang bersangkutan (lihat WP:LINK untuk keterangan lebih lanjut...

 

موظف كتابيالتسمية للأنثى موظفة كتابية فرع من عمال الياقات البيضاءgeneral office clerks (en) [1] النوع function (en) تخصص المجال عمل مكتب تعديل - تعديل مصدري - تعديل ويكي بيانات الموظف الكتابي (بالإنجليزية: Clerk)‏ هو عامل من ذوي الياقات البيضاء يقوم بمهام مكتبية عامة، أو عامل يؤدي مهام مماث...

 

Дівоча Гора(заповідне урочище) 50°30′19″ пн. ш. 26°19′48″ сх. д. / 50.50528° пн. ш. 26.33000° сх. д. / 50.50528; 26.33000Координати: 50°30′19″ пн. ш. 26°19′48″ сх. д. / 50.50528° пн. ш. 26.33000° сх. д. / 50.50528; 26.33000Країна  УкраїнаРозташування Рі...

1987 Witi Ihimaera novel This article is about the novel. For the film, see Whale Rider. The Whale Rider First edition coverAuthorWiti IhimaeraAudio read byJay Laga'aia[1]IllustratorBruce PotterCountryNew ZealandLanguageEnglishGenreNovel, children's fictionSet inWhangara, 1980sPublisherHeinemannPublication date1987Media typePrint: hardbackPages122ISBN9780868636849OCLC1031551009Dewey Decimal823.92LC ClassPR9639.I5 W48Preceded byThe Matriarch Followed&...

 

Laba-laba lautRentang fosil: Late Cambrian–Recent PreЄ Є O S D C P T J K Pg N Klasifikasi ilmiah Kerajaan: Animalia Filum: Arthropoda Subfilum: Chelicerata Kelas: PycnogonidaLatreille, 1810 Ordo: PantopodaGerstaecker, 1863 Familia Ammotheidae Austrodecidae Callipallenidae Colossendeidae Endeididae Nymphonidae Pallenopsidae Phoxichilidiidae Pycnogonidae Rhynchothoracidae Laba-laba laut, juga disebut Pantopoda atau piknogonida, ('pycno-' dikemas erat, 'gonid' gonidia) adalah artropoda laut ...

 

Selat Sepuluh Derajat adalah selat yang memisahkan Kepulauan Andaman dari Kepulauan Nikobar di Teluk Benggala. Dua kepulauan ini membentuk wilayah persatuan Kepulauan Andaman dan Nikobar di India. Selat ini memiliki luas sebesar 150 km persegi. Pranala luar http://www.traveljournals.net/explore/india/map/m2932784/ten_degree_channel.html Diarsipkan 2008-12-04 di Wayback Machine. Artikel bertopik geografi atau tempat India ini adalah sebuah rintisan. Anda dapat membantu Wikipedia dengan mengemb...

Fictional superhero in Marvel Comics In this Chinese name, the family name is Lin (林). Comics character Lin LieLin Lie as Iron Fist on the cover of Iron Fist vol. 6 #1 (February 2022)Art by Jim CheungPublication informationPublisherMarvel ComicsFirst appearanceAs Sword Master:Warriors of Three Sovereigns #1 (May 2018)As Iron Fist:Iron Fist vol. 6 #1 (February 2022)Created byShuizhuGunjiIn-story informationFull nameLin LieSpeciesHumanTeam affiliationsAgents of AtlasPartnerships Aero Shang-Ch...

 

『恋・愛・都・市 恋がしたい』(れんあいとし こいがしたい、中: 好想好想谈恋爱)は、中華人民共和国にて製作・放送されたテレビドラマである。日本では、BSフジにて放送された。 中国版「セックス・アンド・ザ・シティ」とも言われ、原題は「好想好想談恋愛」である。 あらすじ この作品記事はあらすじの作成が望まれています。ご協力ください。(使い方) ...

 

2010 Philippine television series Endless LoveTitle cardGenreRomantic dramaBased onAutumn in My Heart (2000)by Oh Soo YunWritten by Denoy Navarro-Punio Renato Custodio Des Garbes Severino Onay Sales Directed by Mac Alejandre Andoy Ranay Starring Dingdong Dantes Marian Rivera Theme music composer Rannie Ilag (lyrics) Cecil Borja (music) Opening themeIkaw Lang by Rachelle Ann GoCountry of originPhilippinesOriginal languageTagalogNo. of episodes80ProductionExecutive producerJoseph BuncalanCamera...

2006 studio album by JuliEin neuer TagStudio album by JuliReleased13 October 2006RecordedNovember 2005–July 2006,Mohrmann Studio (Bochum)GenrePoppop rockLabelUniversalProducerO.L.A.F. OpalJuli chronology Es ist Juli(2004) Ein neuer Tag(2006) Ein neuer Tag – live(2007) Ein neuer Tag (A New Day) is the second studio album by German band Juli, released on 13 October 2006 via Universal Records. Both a regular and deluxe edition of the album have been released; the latter includes a DV...

 

1933 film The Weaker SexDirected byRobert SiodmakWritten byÉdouard Bourdet (play and screenplay) Henry KosterProduced byAndré HaguetStarringMireille Balin Victor Boucher Pierre BrasseurCinematographyArmand ThirardMusic byHenri VerdunProductioncompaniesLes Films André Haguet Nero FilmDistributed byCésar FilmsRelease date17 October 1933Running time95 minutesCountryFranceLanguageFrench The Weaker Sex (French: Le Sexe faible) is a 1933 French comedy film directed by Robert Siodmak and starrin...

 

Subspecies of deer This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Bactrian deer – news · newspapers · books · scholar · JSTOR (May 2008) (Learn how and when to remove this template message) Bactrian deer Male (Stag) Scientific classification Domain: Eukaryota Kingdom: Animalia Phylum: Chordata Class: Mammal...

Coordinator and communicator between organizations Naval liaison officers from Malaysia and Thailand coordinate efforts A liaison officer is a person who liaises between two or more organizations to communicate and coordinate their activities on a matter of mutual concern. Generally, liaison officers are used for achieving the best utilization of resources, or employment of services of one organization by another. Liaison officers often provide technical or subject matter expertise of their p...

 

1951 British filmThe Quiet WomanDirected byJohn GillingWritten byRuth Adam John GillingProduced byRobert S. BakerMonty BermanStarringDerek Bond Jane Hylton Dora BryanCinematographyMonty BermanEdited byJack SladeMusic byJohn LanchberyProductioncompanyTempean FilmsDistributed byEros FilmsRelease dateMarch 1951Running time71 minutesCountryUnited KingdomLanguageEnglish The Quiet Woman is a 1951 British crime film directed by John Gilling and based on a story by Ruth Adam, about a criminal's wife ...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!