Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lecture.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
740.35 Кб
Скачать

2.1.3. Завершення процесів

Після створення процесу він запускається і починає виконувати свою роботу.

Однак ніщо не вічне, і це повною мірою справедливо стосовно процесів.

Рано чи пізно процес завершується одним з наступних чотирьох способів:

1. Нормальне завершення (добровільне).

2. Завершення внаслідок помилки (добровільне).

3. Завершення внаслідок фатальної помилки (примусове).

4. Знищення іншим процесом (примусове).

Більшість процесів завершуються через закінчення своєї роботи. Після

компіляції переданої йому програми компілятор виконує системний виклик,

щоб повідомити операційну систему про те, що робота завершена. В

операційній системі MINIX 3 таким викликом є ​​exit. Програми з екранним

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

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

збереження робочого файла, видалення тимчасових файлів і завершення роботи.

Друга причина завершення процесу - виявлення невиправною помилки.

Наприклад:

її foo.c

Якщо користувач введе цю команду, але файлу foo.c не існує, компіляції

компілятор просто закінчить роботу.

Третя причина завершення - помилка, викликана процесом, наприклад, через

неправильно написаної програми. Можливо, програма містить недопустиму

інструкцію, посилання на неіснуючу область пам'яті або намагається

виконати ділення на нуль. У MINIX 3 процес може повідомити операційній системі

про намір обробляти деякі помилки самостійно. В цьому випадку при

появі помилки процес отримує сигнал (переривається), а не завершується.

Четверта причина завершення процесу - виконання одним процесом

системного виклику, що вимагає у операційної системи завершення іншого

процесу. В ОС MINIX 3 таким викликом є ​​kill. Зрозуміло,

запитувач процес повинен мати відповідні права. У деяких операційних

системах при завершенні процесу, незалежно від причини, всі створені ним

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

стосується MINIX 3.

2.1.4. Ієрархії процесів

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

В операційній системі MINIX 3 процес, його дітей та інших нащадків можна

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

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

клавіатурою (як правило, це всі процеси, створені в поточному вікні). Це -

сигнальна залежність. Кожен член групи процесів може по-своєму відреагувати

на переданий групі сигнал: перехопити, проігнорувати або виконати

дія за замовчуванням (завершитися).В якості простого прикладу використання дерев процесів розглянемо ініціалізацію операційної системи MINIX 3. В її завантажувальному образі є два спеціальні процесу - сервер реінкарнації (reincarnation server) і init.

У функції сервера реінкарнації входить запуск і перезапуск драйверів і

інших серверів. Перше, що він робить, - блокується і чекає повідомлення,

вказує йому, що потрібно створити.

Процес init запускає сценарій / etc / rc, за допомогою якого передає

серверу реінкарнації команди запуску драйверів і серверів, відсутніх в

завантажувальному образі. В результаті всі драйвери і сервери, запущені подібним

чином, є нащадками сервера реінкарнації. Це означає, що якщо хто небудь з них завершить виконання, сервер реінкарнації отримає про це повідомлення і зможе перезапустити (реінкарнувати) драйвер або сервер. Такий механізм дозволяє MINIX 3 справлятися з аваріями драйверів і серверів, оскільки в цьому випадку перезапуск здійснюється автоматично. На практиці перевстановити драйвер значно простіше, ніж сервер, оскільки вплив драйвера на систему менше. Ми не стверджуємо, що наше рішення працює ідеального ідеально, і ведемо роботу над його покращенням. Далі процес init зчитує конфігураційний файл / etc / ttytab, щоб отримати інформацію про існуючі реальних і віртуальних терміналах. Для кожного терміналу init створює новий процес getty за допомогою системного виклику fork, відображає запрошення для входу в систему і чекає введення. Після введення імені getty запускає системним викликом exec процес login, передавши йому ім'я в якості аргументу. Якщо вхід користувача в систему виявився вдалим, login також за допомогою виклику exec запускає оболонку користувача. Таким чином, оболонка є дочірнім процесом по відношенню до init. Команди користувача породжують дочірні процеси для оболонки, є «онуками» init. Описана послідовність подій

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]