Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

spz / lect / lekc5_1_1_process

.pdf
Скачиваний:
18
Добавлен:
23.02.2016
Размер:
223.86 Кб
Скачать

Системне програмне забезпечення. І.Яковлєва

11

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

-ідентифікатор процесу (так званий PID – process identeficator);

-тип (або клас) процесу, який визначає для супервізора деякі правила надання ресурсів;

-пріоритет поцесу;

-змінну стану (стан виконання, стан очікування …)

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

-інформацію про ресурси, якими процес володіє та/або має право користуватися (вказівники на відкриті файли, інформація про незакінчені операції вводу/виведенню та т.д.);

-місце або його адресу для організації спілкування з іншими процесами;

-параметри часу запуску (тобто момент часу, коли процес повинен активуватися та періодичність цієї процедури);

-в випадку відсутності системи керування файлами – адресу задачі на диску, куди вона вивантажується , якщо її витісняє інша.

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

В деяких ОС кількість дескрипторів визначається заздалегідь, в інших – виділяється пам’ять під дескриптори по необхідності.

Наприклад, в ОS/2 максимальна кількість дескрипторів задач задається в файлі config.sys, а у Windows NT воно в явному вигляді не задається.

Рядок в файлі config.sys

THREADS=1024

Системне програмне забезпечення. І.Яковлєва

12

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

Для апаратної підтримки операційних систем з дескрипторами задач в процесорах можуть бути реалізовані відповідні механізми. Так в мікропроцесорах Intel 80х86 . починаючи з 80286 є спеціальний регістр TR (task register), який вказує на знаходження TSS (task state segment) сегмент стану задачі.

Як ми згадали раніше, рушійною силою, яка міняє стан процесів, є події. Один з видів подій – це переривання

Процеси в ОС UNIX

Процес в ОС UNIX - це програма, виконувана у власному віртуальному адресному просторі. Коли користувач входить у систему, автоматично створюється процес, у якому виконується програма командного інтерпретатора. Якщо командному інтерпретаторові зустрічається команда, що відповідає виконуваному файлу, то він створює новий процес і запускає в ньому відповідну програму, починаючи з функції main. Ця запущена програма, у свою чергу, може створити процес і запустити в ньому іншу програму (вона теж повинна містити функцію main) і т.д.

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

Інакше кажучи, відразу після виконання системного виклику fork основний і породжений процеси є абсолютними близнюками; керування й у тім, і в іншому перебуває в крапці, що безпосередньо випливає за викликом fork. Щоб програма могла розібратися, у якому процесі вона тепер працює - в основна або породженому, функція fork повертає різні значення: 0 у породженому процесі й ціле позитивне число (ідентифікатор породженого процесу) в основному процесі.

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

Системне програмне забезпечення. І.Яковлєва

13

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

У наступному прикладі користувальницька програма, викликувана як команда shell, виконує в окремому процесі стандартну команду shell ls, що видає на екран уміст поточного каталогу файлів:

main() {

if(fork()==0) wait(0); /* батьківський процес */ else execl("ls", "ls", 0); /* породжений процесс */

}

--

Соседние файлы в папке lect