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

2.1.2. Створення процесів

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

необхідності. Зараз ми розглянемо кілька пов'язаних з цим питань.

Існують чотири основні події, що призводять до створення процесів:

1. Ініціалізація системи.

2. Виконання запущеним процесом системного виклику створення процесу.

3. Запит користувача на створення процесу.

4. Ініціалізація пакетного завдання.

При завантаженні операційної системи часто створюються декілька процесів.

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

веб-сторінок, розміщених на комп'ютері, «прокидаючись» кожен раз при отриманні

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

здійснюють певну діяльність, таку як обслуговування веб-сторінок,

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

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

за допомогою програми ps.

Процеси можуть створюватися не тільки при завантаженні операційної системи, але

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

об'єктний код, а потім звертається до програми install, щоб скопіювати програму

в цільової каталог, задати власника, дозволи та інші атрибути. У MINIX 3

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

В інтерактивних системах користувачі можуть запустити програму шляхом

введення команди. У MINIX 3 віртуальні консолі дозволяють користувачеві

запустити програму (скажімо, компілятор), потім переключитися на іншу консоль

і запустити ще одну програму, наприклад редактор документів, у той час як

компілятор виконує свою роботу.

Остання подія, що приводить до створення процесів, підтримується тільки

в системах пакетної обробки, що встановлюються на великих мейнфреймах.

У таких системах користувачі можуть вводити в систему пакетні завдання (у тому

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

ще одного завдання достатньо ресурсів, вона створює новий процес і запускає

завдання, що витягають із вхідної черги.

У всіх описаних випадках новий процес створюється шляхом виконання відповідних

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

може виступати користувальницький процес, системний процес,

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

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

нового процесу, і вказує (прямо чи опосередковано), яка програма повинна

бути запущена в цьому процесі.

Для створення нового процесу в MINIX 3 існує єдиний системний

виклик fork. Він створює точну копію викликає процесу. По завершенні виклику два процеси, батьківський та дочірній, мають однакові образи пам'яті, рядки оточення і відкриті файли. Як правило, потім дочірній процес виконує виклик execve або аналогічний системний виклик, щоб змінити свій образ пам'яті і запустити нову програму. Наприклад, коли користувач вводить в оболонку команду sort, оболонка створює дочірній процес, який і виконує команду. Сенс такого двох етапного дії полягає в тому, що дочірній процес отримує можливість маніпулювати своїми дескрипторами файлів між викликами fork і exec, щоб перенаправити стандартні потоки введення, виведення і помилок. Як в UNIX, так і в MINIX 3 батьківський і дочірній процеси мають власні адресні простори. Якщо який-небудь процес змінить слово в своєму адресному просторі, це не торкнеться інший процес. Адресний простір дочірнього процесу є копією адресного простору батька, проте не збігається з ним; у двох процесів немає спільної пам'яті для запису (як і деякі

реалізації UNIX, MINIX 3 підтримує можливість використання процесами загального коду, оскільки його неможливо модифікувати). Тим не менш

процес-нащадок може спільно з батьком використовувати інші ресурси,

наприклад відкриті файли.

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