Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2.docx
Скачиваний:
10
Добавлен:
12.02.2016
Размер:
1.41 Mб
Скачать

Процеси та потоки Процеси

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

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

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

Модель процесу

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

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

Створення процесу

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

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

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

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

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

При запуску операційної системи створюються, як правило, кілька процесів. Деякі з них являють собою високопріоритетні процеси, тобто процеси, які взаємодіють з користувачами і виконують для них певну роботу. Решта є фоновими процесами, не пов'язаними з конкретними користувачами, але виконують ряд специфічних функцій. Фонові процеси, призначені для обробки якої-небудь активної діяльності, пов'язаної, наприклад, з електронною поштою, веб-сторінками, новинами, виведенням інформації на друк і т. д., називаються демонами.

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

В інтерактивних системах користувачі можуть запустити програму введенням команди або клацанням на піктограмі. Будь-яка з цих дій дає початок новому процесу і запускає в ньому обрану програму.

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

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

У UNIX існує тільки один системний виклик для створення нового процесу - fork. Цей виклик створює точну копію процесу, що здійснює виклик. Після виконання системного виклику fork два процеси, батьківський і дочірній, мають єдиний образ пам'яті, ідентичні рядки опису конфігурації і одні і ті ж відкриті файли. І більше нічого. Зазвичай після цього дочірній процес змінює образ пам'яті і запускає нову програму, виконуючи системний виклик execve або йому подібний. Наприклад, коли користувач набирає в оболонці команду sort, оболонка створює відгалужений дочірній процес, в якому і виконується команда sort. Сенс цього двоступеневого процесу полягає в тому, щоб дозволити дочірньому процесу управляти його файловими дескрипторами після розгалуження, але перед виконанням execve з метою виконання пере направлення стандартного введення, стандартного виводу і стандартного виводу повідомлень про помилки.

У Windows все відбувається інакше: одним викликом функції Win32 CreateProcess створюється процес, і в нього завантажується потрібна програма.

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

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