
- •Поняття операційної системи
- •Операційна система як розширена машина
- •Операційна система як менеджер ресурсів
- •Історія розвитку операційних систем
- •Перше покоління (1945-1955): електронні лампи і комутаційні панелі
- •Друге покоління (1955-1965): транзистори і системи пакетної обробки
- •Третє покоління (1965-1980): інтегральні схеми і багатозадачність
- •Четверте покоління (з 1980 року по наші дні): персональні комп'ютери
- •Історія minix 3
- •Основні концепції
- •Процеси
- •Оболонка
- •Системні виклики
- •Системні виклики для управління процесами
- •Системні виклики для управління сигналами
- •Системні виклики для управління файлами
- •Системні виклики для управління каталогами
- •Системні виклики для захисту
- •Системні виклики для управління часом
- •Структура операційної системи
- •1.5.2. Багаторівневі системи
- •1.5.3. Віртуальні машини
- •1.5.4. Екзоядра
- •1.5.5. Модель клієнт-сервер
- •2.1.1. Модель процесів
- •2.1.2. Створення процесів
- •2.1.3. Завершення процесів
- •2.1.4. Ієрархії процесів
- •2.1.5. Стани процесів
- •2.1.6. Реалізація процесів
- •2.1.7. Програмні потоки
- •2.2. Взаємодія між процесами
- •5.1. Файли
- •5.1.1. Іменування файлів
- •5.1.2. Структура файлу
- •5.1.3. Типи файлів
- •5.1.4. Доступ до файлів
- •5.1.5. Атрибути файлів
- •5.1.6. Операції з файлами
- •5.2. Каталоги
- •5.2.1. Прості каталоги
- •5.2.2. Ієрархічні системи каталогів
- •5.2.3. Шляхи
- •5.2.4. Операції з каталогами
- •5.3. Реалізація файлової системи
- •5.3.1. Структура файлової системи
- •5.3.2. Реалізація файлів
- •5.3.4. Організація дискового простору
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 підтримує можливість використання процесами загального коду, оскільки його неможливо модифікувати). Тим не менш
процес-нащадок може спільно з батьком використовувати інші ресурси,
наприклад відкриті файли.