Процеси та їх приоритети. Створення та завершення процесів.
Роботу виконав студент 46 групи Паршенков Віталій
Процеси
- Процесом (задачею) зазвичай називають екземпляр програми що виконується.
Хоча на перший погляд здається що програма і процес поняття практично однакові, вони фундаментально відрізняються одне від одного. Програма є статичним набором команд, а процес це набір ресурсів і даних, що використовуються при виконанні програми.
Будь-який процес може знаходитися у трьох станах:
- виконання
- очікування
- готовності
- Під виконанням процесу розуміють активний стан процесу під час якого він споживає процесорний час, а також користується іншими ресурсами системи.
- Очікування – пасивний стан процесу при якому процес очікує вивільнення потрібного йому ресурсу або свого кванту часу у процесорі.
Процес у Windows характеризується наступними компонентами:
- - Структура даних, що містить всю інформацію про процес, зокрема список відкритих дескрипторів різних системних ресурсів, унікальний ідентифікатор процесу, різну статистичну інформацію і т.д.;
- - Адресний простір - діапазон адрес віртуальної пам'яті, яким може користуватися процес;
- - Виконувана програма і дані, проектовані на віртуальний адресний простір процесу.
Пріоритети
У Windows існує 32 рівні пріоритету, від 0 до 31. Вони поділяються на два блоки від 31 – 16 – пріоритети реального часу; від 15 - 1 динамічні рівні; 0 - системний пріоритет, зарезервований для потоку обнулення сторінок (zero-page thread).
При створенні процесу, йому призначається один з шести класів пріоритетів:
- Real time class (значення 24);
- High class (значення 13);
- Above normal class (значення 10),
- Normal class (значення 8),
- Below normal class (значення 6),
- Idle class (значення 4).
- У Windows NT/2000/XP пріоритет процесу можна подивитися в Task Manager.Above normal і Below normal з'явилися починаючи з Win2000.
- Пріоритет кожного потоку (базовий пріоритет потоку) складається з пріоритету його процесу і відносного пріоритету самого потоку.
Є сім відносних пріоритетів потоків:
- Normal: такий же як і у процесу;
- Normal: +1 до пріоритету процесу;
- Below normal: -1;
- Highest: +2;
- Lowest: -2;
- Time critical: встановлює базовий пріоритет потоку для Real time класу в 31, для решти класів в 15.
- Idle: встановлює базовий пріоритет потоку для Real time класу в 16, для решти класів в 1.
Пам'ять
Кожному процесу в Win32 доступний лінійний 4-гігабайтний (232 = 4 294 967 296) віртуальний адресний простір. Звичайно верхня половина цього простору резервується за операційною системою, а друга половина доступна процесу.
- Віртуальний адресний простір процесу доступний всім потокам цього процесу. Іншими словами, всі потоки одного процесу виконуються в єдиному адресному просторі.
- З другого боку, механізм віртуальної пам'яті дозволяє ізолювати процеси один від одного. Потоки одного процесу не можуть посилатися на адресний простір іншого процесу.
Віртуальна пам'ять може зовсім не відповідати структурі фізичної пам'яті. Диспетчер пам'яті транслює віртуальні адреси на фізичні, по яких реально зберігаються дані. Оскільки далеко не будь-який комп'ютер в змозі виділити по 4 Гбайт фізичної пам'яті на кожен процес, використовується механізм підкачки (swapping). Коли оперативної пам'яті не вистачає, операційна система переміщає частину вмісту пам'яті на диск, у файл (swap file або page file), звільняючи, таким чином, фізичну пам'ять для інших процесів. Коли потік звертається до сторінки віртуальної пам'яті, записаної на диск, диспетчер віртуальної пам'яті завантажує цю інформацію з диска назад у пам'ять.
Створення процесів
Створення Win32 процесу здійснюється викликом однієї з функцій: CreateProcess, CreateProcessAsUser (для Win NT/2000) і CreateProcessWithLogonW (починаючи з Win2000) і відбувається у декілька етапів:
- Відкривається файл образу (EXE), який виконуватиметься в процесі. Якщо виконуваний файл не є Win32 додатком, то шукається образ підтримки (support image) для запуску цієї програми. Наприклад, якщо виконується файл з розширенням .bat, запускається cmd.exe і т.п.
- Створюється об'єкт Win32 «процес».
- Створюється первинний потік (стек, контекст і об'єкт «потік»).
- Підсистема Win32 повідомляється про створення нового процесу і потоку.
- Починається виконання первинного потоку.
- У контексті нового процесу і потоку ініціалізується адресний простір (наприклад, завантажуються необхідні DLL) і починається виконання програми.
Завершення процесів
Процес завершується якщо:
- Вхідна функція первинного потоку повернула управління.
- Один з потоків процесу викликав функцію ExitProcess.
- Потік іншого процесу викликав функцію TerminateProcess.
Коли процес завершується, усі User- і GDI-об'єкти, створені процесом, знищуються, об'єкти ядра закриваються (якщо їх не використовує інший процес), адресний простір процесу знищується.