Ім'я файлу: Критичні секції. Мьютекси.docx
Розширення: docx
Розмір: 27кб.
Дата: 04.02.2023
скачати

Критичні секції. Мьютекси.

Основною особливістю сучасних операційних систем як складової частини СПЗ є виконання декількох задач одночасно (паралельно в часі). При цьому під паралельними задачами (процесами) розуміють не тільки процеси які виконуються паралельно на різних процесорах чи пристроях вводу/виводу, але й ті послідовні процеси, які розділяють один центральний процесор і хоча б частково перекриваються в часі.

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

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

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

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

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

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

Види задач синхронізації паралельних процесів.


Задача “взаємного виключення”.

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

Рішення задачі взаємного виключення полягає в організації такого доступу до критичного ресурсу, коли тільки одному процесу дозволено “зайти” в критичну секцію (почати виконання своєї критичної секції).

Для кожного критичного ресурсу можуть існувати окремі критичні секції процесу. До критичних секцій процесу існують наступні вимоги:


  • в кожен момент часу тільки один процес може знаходитись в певній критичній секції;

  • ні один процес не може знаходитись в критичній секції в необмежений відрізок часу;

  • жоден процес не повинен чекати входження в критичну секцію в нескінченний проміжок часу;

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


Задача “виробник – споживач”.

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

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


  • задача взаємного виключення повинна бути забезпечена по відношенню до спільної області пам’яті;

  • повинен враховувати стан цієї пам’яті, що характеризує можливість

або неможливість обміну повідомленнями.
Спроба процесу виробника записати повідомлення в спільну область пам’яті, з якої не було прочитане повідомлення процесом споживачем, повинна бути блокована. Аналогічно повинна бути блокована спроба споживача зчитати повідомлення з області пам’яті у випадку, коли процес виробник не помістить такого повідомлення в спільну область пам’яті.
Задача “читачів – письменників”.

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

Виділяють два паралельних процеси:

  1. процеси “читачі” – вони зчитують одночасно інформацію зі спільного файлу, якщо це допускається при роботі з таким файлом;

  2. процеси “письменники” – вони записують інформацію в цей спільний файл, при умові забезпечення задачі взаємного виключення як з процесами “читачами”, так з процесами “письменниками”.

Це забезпечується двома шляхами:

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

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



Задача “синхронізації виконання гілок алгоритмів”.

Використовується тоді, коли декілька процесів реалізовують один і той самий алгоритм паралельно. Ця задача зводиться до визначення точок (операторів) алгоритмів, яких необхідно отримати результатом виконання кожного процесу. Для цього використовують спеціальну змінну або набір змінних типу “подія”. Подія – це зафіксований результат будь якої операції (запис файлу, закінчення процесу).
М’ютекси
М'ю́текс (англ. mutex, від англ. mutual exclusion — взаємне виключення) призначено для захисту певного об’єкта у потоці від доступу інших потоків. М'ютекс є одним із засобів синхронізації роботи потоків або процесів.

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

М'ютекси є одним з варіантів семафорних механізмів для організації взаємного виключення. Вони реалізовані в багатьох ОС, їхнє основне призначення — організація взаємного виключення для потоків з одного і того ж або різних процесів.

М'ютекси — це прості двійкові семафори, які можуть перебувати в одному з двох станів - сигнальному або несигнальному (відкритий і закритий відповідно). Коли потік отримує м'ютекс, той переводиться в несигнальний стан.

Організація послідовного доступу до ресурсів з використанням м'ютексів стає нескладною, оскільки в кожен конкретний момент тільки один потік може володіти цим об'єктом. Для того, щоб об'єкт mutex став доступний потокам, що належать різним процесам, при створенні йому необхідно присвоїти ім'я. Потім це ім'я потрібно передати «у спадок» завданням, які повинні його використовувати для взаємодії. Для цього вводяться спеціальні системні виклики (наприклад CreateMutex у Windows), в яких указується початкове значення м'ютекса і його ім'я. Для роботи з м'ютексом є кілька функцій. Крім вже згаданої функції створення такого об'єкта (CreateMutex), є функції відкриття (OpenMutex) і функція звільнення цього об'єкта (ReleaseMutex).

Порівняння м'ютексів та критичних секцій


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

С.р. №1 "Поняття семафора"

Завдання: Створити опорний конспект на тему лекції та с.р.
скачати

© Усі права захищені
написати до нас