- •З лабораторних робіт з предмету:
- •Лабораторна робота № 1
- •Контрольні запитання
- •Лабораторна робота № 2 Дослідження особливостей організації ресурсів інтерфейсу користувача для Windows-додатків
- •Лабораторна робота № 3. Вікна діалогу у Windows-додатках
- •Контрольні запитання та завдання
- •Лабораторна робота № 4. Дослідження особливостей використання арі-функцій для роботи із процесами та потоками у Windows
- •Контрольні запитання та завдання
- •Пріоритети
- •Лабораторна робота № 5 Дослідження особливостей планування потоків у операційній системі Windows Контрольні запитання та завдання
- •Динамічне підвищення пріоритету
Контрольні запитання та завдання
1. Що собою являють процеси та потоки?
З лекційного курсу теорії операційних систем відомо, що процес є динамічним об’єктом, що описує виконання програми. Процесу виділяються системні ресурси: закритий адресний простір, семафори, комунікаційні порти, файли і т.д. Процес характеризується поточним станом (виконання, очікування, готовність і т.д.).
Для опису такого складного динамічного об’єкта ОС підтримує набір структур, головну з яких прийнято називати блоком управління процесом (PCB, Process control block). До складу PCB зазвичай включають:
- стан, в якому знаходиться процес;
- програмний лічильник процесу або, іншими словами, адреса команди, яка повинна бути виконана для нього наступною;
- вміст регістрів процесора;
- дані, необхідні для планування використання процесора і управління пам’яттю (пріоритет процесу, розмір і розташування адресного простору і т. д.);
- облікові дані (ідентифікаційний номер процесу, з яким користувач ініціював його роботу, загальний час використання процесора даним процесом і т. д.);
- інформацію про пристрої введення-виведення, пов’язані з процесом (наприклад, які пристрої закріплені за процесом; таблиця відкритих файлів).
Класичний процес містить у своєму адресному просторі одну програму. Проте в багатьох ситуаціях доцільно підтримувати в єдиному адресному просторі процесу кілька виконавчих програм (потоків команд або просто потоків), що працюють із загальними даними і ресурсами. В цьому випадку процес можна розглядати як контейнер ресурсів, а всі проблеми, пов’язані з динамікою виконання, розв’язуються на рівні потоків. Зазвичай кожен процес починається з одного потоку, а інші (при необхідності) створюються в ході виконання. Тепер уже не процес, а потік характеризується станом, потік є одиницею планування, процесор перемикається між потоками, і необхідно зберігати контекст потоку (що значно простіше, ніж збереження контексту процесу).
Рис. 3.1. Процес із кількома потоками
Подібно до процесів, потоки (нитки, threads) у системі описуються структурою даних, яку зазвичай називають блоком управління потоком (thread control block, TCB).
2. Що собою являє блок управління процесом та що входить до його складу?
Блок управління процесом (PCB) реалізований у вигляді набору зв’язаних структур, головна з яких називається блоком процесу EPROCESS. Відповідно, кожен потік також представлений набором структур із блоком потоку ETHREAD. Ці набори даних, за винятком блоків змінних оточення процесу і потоку (PEB і TEB), існують у системному адресному просторі. Спрощена схема структур даних процесу показана на рис. 3.2.
Рис. 3.2. Керуючі структури даних процесу
Вміст блоку EPROCESS детально описаний у відповідній літературі. Блок KPROCESS (на рис. справа), блок змінних оточення процесу (PEB) і структура даних, підтримувана підсистемою Win32 (блок процесу Win32), містять додаткові відомості про об’єкт "процес".
Ідентифікатор процесу кратний чотирьом і використовується в ролі байтового індексу в таблицях ядра на одному рівні з іншими об’єктами.
3. Що собою являє блок управління потоком та що входить до його складу?
Створення потоку ініціюється Win32-функцією CreateThread, яка знаходиться в бібліотеці Kernel32.dll. При цьому створюється об’єкт ядра "потік", що зберігає статистичну інформацію про створюваний потік. У адресному просторі процесу виділяється пам’ять під стек потоку користувача. Потім ініціюється апаратний контекст потоку (нижче є опис відповідної структури CONTEXT).
Услід за цим створюється блок управління потоком разом із супутніми структурами, формується стек ядра потоку, і про створення потоку повідомляється підсистема Win32. Нарешті, потоку, який викликається, повертається описувач створюваного потоку і передається управління, а новому потокові може бути виділено процесорний час.
4. Що собою являють волокна (легковагові потоки) і яке їх призначення?
Перемикання між потоками займає досить багато часу, тому для полегшеного псевдопаралелізму в системі підтримуються волокна (fibers). Наявність волокон дозволяє реалізувати власний механізм планування, не використовуючи вбудований механізм планування потоків на основі пріоритетів. ОС не знає про зміну волокон, для управління волокнами немає і справжніх системних викликів, проте є виклики Win32 API ConvertThreadToFiber, CreateFiber, SwitchToFiber і т.д. Докладніше функції, пов’язані з волокнами, описані у відповідній документації.
У системі є також завдання (job object), які забезпечують управління одним або кількома процесами як групою.
5. Опишіть стани потоків в ОС Windows.
Кожен новий процес містить принаймні один потік, решта потоків створюються динамічно. Потоки складають основу планування і можуть: виконуватися на одному з процесорів, чекати події або знаходитися в якомусь іншому стані.
Зазвичай у стані "Готовності" є черги готових до виконання (running) потоків. У даному випадку цей стан розпадається на три складових. Це, власне, стан "Готовності (Ready)"; стан "Готовий.
Відкладений (Deferred Ready)", що означає, що потік вибраний для виконання на конкретному процесорі, але поки не запланований до виконання; і, нарешті, стан "Простоює (Standby)", в якому може знаходитися тільки один вибраний до виконання потік для кожного процесора в системі.
Рис. 3.3. Стани потоків в ОС Windows
У стані "Очікування (Waiting)" потік блокований і чекає якої-небудь події, наприклад завершення операції введення-виведення. При настанні цієї події потік переходить у стан "Готовності". Цей шлях може проходити через проміжний "Перехідний (Transition)" стан в тому випадку, якщо стек ядра потоку вивантажений із пам’яті.
Код ядра виконується в контексті поточного потоку. Це означає, що при перериванні, системному виклику і т д., тобто коли процесор переходить у режим ядра і управління передається ОС, перемикання на інший потік (наприклад, системний) не відбувається. Контекст потоку при цьому зберігається, оскільки операційна система все ж таки може ухвалити рішення про зміну характеру діяльності і перемиканні на інший потік. Внаслідок цього в деякій літературі по операційним системам стан "Виконання" розділяють на "Виконання в режимі користувача" і "Виконання в режимі ядра".
