Операційні системи
[Ред] Основні поняття
Паралельні процеси - процеси, виконання яких хоча б частково перекривається за часом
Незалежні процеси - процеси, що використовують незалежні безлічі ресурсів. На результат роботи такого процесу не впливає робота незалежного від нього процесу.
Взаємодіючі процеси - процеси, що використовують ресурси спільно.
Поділ ресурсу - спільне використання декількома процесами ресурсу ВС, коли кожен з процесів деякий час володіє ресурсом.
Поділу підлягають як апаратні, так програмні ресурси.
Колективні ресурси, які повинні бути доступні в поточний момент часу тільки одному процесу - це так звані критичні ресурси. Такими ресурсами можуть бути як зовнішній пристрій, так і якась змінна, значення якої може змінюватися різними процесами.
Необхідно вміти вирішувати дві найважливіші завдання:
Найважливішим вимогою мультипрограммирования з точки зору розподілу ресурсів є наступне: результат виконання процесу не повинен залежати від порядку перемикання виконання між процесами, тобто від співвідношення швидкості виконання процесу зі швидкостями виконання інших процесів.
Розглянемо приклад ситуації, в якій порушується вимога мультипрограммирования. Нехай є деяка проста функція, яка зчитує символ, введений з клавіатури, і виводить його на екран:
В даному прикладі ми використовуємо деякі умовні функції input () і output (), так як в даний момент для нас неважливо, як саме реалізований введення / виведення в даній системі. Оскільки такий шматок коду буде використовуватися практично в будь-якій програмі, його зручно зробити розділяються, коли ОС завантажує в деяку область пам'яті, доступну всім процесам, одну-єдину копію даної програми, і всі процеси використовують цю копію спільно. Зауважимо, що в цьому випадку змінна in є розділяється.
- Процес А викликає функцію echo (), проте в той момент, коли вхідний символ був лічений в змінну in, але до того, як він був виведений на екран, виконання процесу переривається і на виконання завантажується процес В.
- Процес У той же викликає функцію echo (). Після виконання функції echo () змінна in містить вже нове значення, лічений з клавіатури.
- Процес А відновлює свою роботу в тій точці, в якій він був перерваний, і виводить на екран символ, що знаходиться в змінній in.
У цьому прикладі символ, лічений процесом А, був втрачений, а символ, лічений процесом В, був виведений двічі. Результат виконання процесів тут залежить від того, в який момент здійснюється перемикання процесів, і від того, який саме процес буде обраний для виконання наступних.
Такі ситуації називаються гонками (race conditions) між процесами, а процеси - конкуруючими.
Частина програми (фактично набір операцій), в якій здійснюється робота з критичним ресурсом, називається критичною секцією. або критичним інтервалом.
Єдиний спосіб уникнути гонок при використанні поділюваних ресурсів - контролювати доступ до будь-яких ресурсів, що розділяються в системі. При цьому необхідно організувати взаємне виключення - такий спосіб роботи з ресурсом, при якому в той момент, коли один з процесів працює з ресурсом, всі інші процеси не можуть мати до нього доступ.
Зауважимо, що питання організації взаємного виключення актуальний не тільки для взаємопов'язаних процесів, спільно використовують певні ресурси для обміну інформацією. Можлива ситуація, коли процеси, які не підозрюють про існування один одного, використовують глобальні ресурси системи, такі як пристрої введення / виводу, принтери і т.п. В з цьому випадку має місце конкуренція за ресурси, доступ до яких також повинен бути організований за принципом взаємного виключення.
[Ред] Проблеми організації взаємного виключення
- Тупики (deadlocks)
- Блокування (дискримінація)
[Ред] Тупики (deadlocks)
При організації взаємного виключення можуть виникнути тупики (deadlocks), ситуації в якій конкуруючі за критичний ресурс процеси вступають в клінч - безповоротно блокуються.
Є два процеси А і В, кожному з яких в певний момент потрібно мати доступ до двох ресурсів R1 і R2. Процес А отримав доступ до ресурсу R1, і отже, ніякий інший процес не може мати до нього доступ, поки процес А чи не закінчить з ним працювати. Одночасно процес В заволодів ресурсом R2. У цій ситуації кожен з процесів очікує звільнення відсутнього ресурсу, але обидва ресурси ніколи не будуть звільнені, і процеси ніколи не зможуть виконати необхідні дії.
[Ред] Блокування (дискримінація)
Блокування - ситуація, коли доступ одного з процесів до ресурсу не забезпечується через активність інших, більш пріоритетних процесів.