Структури, використовувані для задання процесів

 

Дві що належать ядру структури даних описують процес: запис в таблиці процесів і простір процесу.

Таблиця процесів.

Таблиця процесів містить поля, які мають бути завжди доступні ядру, а простір процесу - поля, необхідність в яких виникає тільки у процесу, що виконується. Тому ядро виділяє місце для простору процесу тільки при створенні процесу : в нім немає необхідності, якщо запису в таблиці процесів не відповідає конкретний процес.

Запис в таблиці процесів складається з наступних полів:

· Полі стану, який ідентифікує стан процесу.

· Поля, використовувані ядром при розміщенні процесу і його простору в основній або зовнішній пам'яті. Ядро використовує інформацію цих полів для перемикання контексту на процес, коли процес переходить із стану "готовий до виконання, знаходячись в пам'яті" в стан "виконання в режимі ядра" або із стану "резервування" в стан "виконання в режимі завдання". Запис в таблиці процесів містить також поле, що описує розмір процесу і дозволяє ядру планувати виділення простору для процесу.

· Ідентифікатори процесу (PID), що вказують взаємозв'язок між процесами. Значення полів PID задаються під час переходу процесу в стан "створений" під час виконання функції fork.

· Дескриптор події (встановлюється тоді, коли процес призупинений).

· Параметри планування, що дозволяють ядру встановлювати порядок переходу процесів із стану "виконання в режимі ядра" в стан "виконання в режимі завдання".

· Полі сигналів, в якому перераховуються сигнали, послані процесу, але ще не оброблені.

· Різні таймери, що описують час виконання процесу і використання ресурсів ядра і дозволяють здійснювати стеження за виконанням і обчислювати пріоритет планування процесу.

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

· Імена поточного каталогу і поточного кореня, що описують файлову систему, в якій виконується процес.

· Таблиця призначених для користувача дескрипторів файлу, яка описує файли, відкриті процесом.

· Поля меж, накладаючі обмеження на розмірні характеристики процесу і на розмір файлу, в який процес може вести запис.

· Полі прав доступу, що зберігає двійкову маску установок прав доступу до файлів, які створюються процесом

Простір процесу.

Кожен процес має свій власний простір, проте ядро звертається до простору процесу, що виконується, так, як якби в системі воно було єдиним.

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

Контекст процесу.

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

Говорять, що при запуску процесу система виконується в контексті процесу. Коли ядро системи вирішує запустити інший процес, воно виконує перемикання контексту з тим, щоб система виконувалася в контексті іншого процесу. Виконуючи перемикання контексту, ядро зберігає інформацію, достатню для того, щоб пізніше перемкнутися знову на перший процес і відновити його виконання. Аналогічним чином, при переході з режиму завдання в режим ядра, ядро системи зберігає інформацію, достатню для того, щоб пізніше повернутися в режим завдання і продовжити виконання з перерваного місця. Проте, перехід з режиму завдання в режим ядра є зміною режиму, але не перемиканням контексту.

Структура контексту.

Контекст процесу об'єднує в собі призначений для користувача контекст, регістровий контекст і системний контекст.

Призначений для користувача контекст складається з команд і даних процесу, стека завдання і вмісту спільно використовуваного простору пам'яті у віртуальних адресах процесу. Призначений для користувача контекст процесу розпадається на окремі області, які є безперервними ділянками віртуального адресного простору і трактуються як самостійні об'єкти використання і захисту.

Регістровий контекст складається з наступних компонент:

Лічильника команд, що вказує адресу наступної команди, яку виконуватиме центральний процесор; ця адреса є віртуальною адресою усередині простору ядра або простору завдання.

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

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

Регістрів загального призначення, в яких міститься інформація, згенерована процесом під час його виконання.

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

Динамічну частину системного контексту можна представити у вигляді стека, елементами якого є контекстні рівні, які поміщаються в стек ядром або виштовхуються із стека при настанні різних подій. Системний контекст включає наступні компоненти:

Запис в таблиці процесів, що описує стан процесу і містить різну інформацію, що управляє, до якої ядро завжди може звернутися.

Частина адресного простору завдання, виділена процесу, де зберігається інформація про процес, що управляє, доступна тільки в контексті процесу. Загальні параметри, що управляють, такі як пріоритет процесу, зберігаються в таблиці процесів, оскільки звернення до них повинне робитися за межами контексту процесу.

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

Стек ядра, в якому зберігаються записи процедур ядра, якщо процес виконується в режимі ядра. Попри те, що усі процеси користуються одними і тими ж програмами ядра, кожен з них має свою власну копію стека ядра для зберігання індивідуальних звернень до функцій ядра.

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

Ядро поміщає контекстний рівень в стек при виникненні переривання, при зверненні до системної функції або при перемиканні контексту процесу. Контекстний рівень виштовхується із стека після завершення обробки переривання, при поверненні процесу в режим завдання після виконання системної функції, або при перемиканні контексту. Таким чином, перемикання контексту спричиняє за собою як приміщення контекстного рівня в стек, так і витягання рівня із стека: ядро поміщає в стек контекстний рівень старого процесу, а витягає із стека контекстний рівень нового процесу. Інформація, необхідна для відновлення поточного контекстного рівня, зберігається в записі таблиці процесів.

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

Перемикання контекстів

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

1. Прийняти рішення відносно необхідності перемикання контексту і його допустимості в даний момент.

2. Зберегти контекст "колишнього" процесу.

3. Вибрати процес, найбільш відповідний для виконання, використовуючи алгоритм диспетчеризації процесів

4. Відновити його контекст.

Області процесу.

Область - це безперервна зона віртуального адресного простору процесу, що розглядається в якості окремого об'єкту для спільного використання і захисту. Таким чином, команди, дані і стек зазвичай утворюють автономні області, що належать процесу. Декілька процесів можуть використовувати одну і ту ж область. Наприклад, якщо декілька процесів виконують одну і ту ж програму, цілком природно, що вони використовують одну і ту ж область команд. Так само, декілька процесів можуть об'єднатися і використовувати загальну область пам'яті, що розділяється.

Кожен процес має приватну таблицю областей процесу. Записи цієї таблиці можуть розташовуватися, залежно від конкретної реалізації, в таблиці процесів, в адресному просторі процесу або в окремій області пам'яті; для простоти припустимо, що вони є частиною таблиці процесів. Кожен запис приватної таблиці областей містить покажчик на відповідний запис загальної таблиці областей і першу віртуальну адресу процесу в цій області. Запис приватної таблиці областей також містить поле прав доступу, в якому вказується тип доступу, дозволений процесу : тільки читання, тільки запис або тільки виконання.

Час життя процесу можна теоретично розбити на декілька станів, що описують процес. Повний набір станів процесу міститься в наступному переліку:

1. Процес виконується в режимі завдання.

2. Процес виконується в режимі ядра.

3. Процес не виконується, але готовий до запуску під управлінням ядра.

4. Процес призупинений і знаходиться в оперативній пам'яті.

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

6. Процес призупинений і програма підкочування вивантажила його в зовнішню пам'ять, щоб в оперативній пам'яті звільнити місце для інших процесів.

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

8. Процес знову створений і знаходиться в перехідному стані; процес існує, але не готовий до виконання, хоча і не призупинений. Цей стан є початковим станом усіх процесів, окрім нульового.

9. Процес викликає системну функцію exit і припиняє існування. Проте, після нього залишився запис, що містить код виходу, і деяка хронометрична статистика, що збирається батьківським процесом. Цей стан є останнім станом процесу.

 

Контрольні запитання

1. Як задається процес?

2. Що таке таблиця процесів?

3. Як визначається простір процесу?

4. Що таке контекст процесу?

5. Якові структуру має контекст процесу?

6. Як відбквається перемикання контекстів процесу?

7. Що таке область процесу?

8. Година життя процесу

Література

Їв. ресурс: http://www.sint.km.ua/site/Literature/Moshkov 3/BACH/chap06.html