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

М’ютекси

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

Монітори

Монітор це колекція змінних і структур даних, згрупованих разом в спеціальний модуль або пакета процедур. Процеси можуть викликати будь-які необхідні їм процедури, наявні в моніторі, але вони не можуть отримати безпосередній доступ до внутрішніх структур даних монітора з процедур, оголошених за межами монітора.

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

Варто зазначити, що монітори є поняттям мови програмування. Компілятор повинен їх розпізнати і яким-небудь чином облаштувати взаємне виключення. Отже монітори не приносять жодної користі, за винятком невеликої кількості мов програмування. До того ж жоден з примітивів НЕ дозволяє здійснювати інформаційний обмін між машинами, оскільки команди TSL або XCHG блокують шину пам’яті лише на одній машині.

Передача повідомлень

Передача повідомлень Це метод взаємодії процесів, що використовує два примітиви: send і receive, які є системними викликами (як і семафори), а не конструкціями мови. Їх можна легко помістити в бібліотечні процедури:

send (destination. & message);

або receive (source. & message);

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

Бар’єри

Деякі програми розбиті на фази і слідують правилу, згідно з яким жоден з процесів не може перейти до наступної фази, поки всі процеси не будуть готові перейти до наступної фази. Домогтися виконання цього правила можна за допомогою бар'єрів, поставлених в кінці кожної фази. Коли процес досягає бар'єру, він блокується до тих пір, поки цього бар’єру не досягнуть всі інші процеси.

Планування

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

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

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

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

Ситуації в при виникненні яких в дію вступає планувальник:

  1. При створенні нового процесу необхідно прийняти рішення, який із процесів виконувати: батьківський чи дочірній.

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

  3. Коли процес блокується в очікуванні завершення операції вводу-виводу, на семафорі або з якої-небудь іншої причини, для виконання повинен бути обраний якийсь інший процес.

  4. Планувальник повинен прийняти рішення при виникненні переривання вводу-виводу.

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

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

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

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

  1. пакетну;

  2. інтерактивну;

  3. реального часу.

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