Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Operatsiyni_sistemi_vidpovidi.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
561.15 Кб
Скачать
  1. Механізм реалізації взаємовиключення з використанням семафорів. Застосування семафорів

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

Задача синхронізації

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

Рішення задачі: Для розв'язання цієї задачі достатньо використати двійковий семафор(S=0,1). На початку обов'язково семафор S встановити в нуль: S:=0 !!!

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

  • Нехай першим дійшов потік А. Операція V(S) збільшить семафор на 1 і потік А продовжить виконуватися. Тоді, коли до критичної ділянки дійде потік В, він продовжить своє виконання. При цьому операція P(S) зменшить семафор на 1.

  • Нехай першим дійде потік В. Перевіривши семафор, потік В блокується, поки не буде повідомлення(сигналу) від потоку А. Тобто, поки семафор рівний нулю. Коли потік А відправить сигнал, тобто, збільшить семафор на 1, тоді продовжить виконуватися потік В. При цьому зменшивши семафор на 1.

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

Для організації взаємного виключення використовують м'ютекси, очікування виконання умови — умовні змінні.

  1. Задача „голодного філософа”. Алгоритм розв'язку задачі „голодного філософа”

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

Задача сформульована таким чином, щоб ілюструвати проблему уникнення взаємного блокування (англ. deadlock) - стану системи, при якому прогрес неможливий.

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

Взаємне виключення (англ. mutual exclusion) є основною ідеєю «Проблеми обідають філософів. Рішення завдання:

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

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

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