Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
всі білети.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
696 Кб
Скачать
☆

Взаємодія потоків. М'ютекси.

М’ютексом називають синхронізаційний примітив, що не допускає виконання деякого фрагмента коду більш як одним потоком. Фактично м’ютекс є реалізацією блокування на рівні ОС. М’ютекс може перебувати у двох станах: вільному і зайнятому. Початковим станом є «вільний». Над м’ютексом можливі дві атомарні операції. Зайняти м’ютекс (mutex_lock): якщо м’ютекс був вільний, він стає зайнятим, і потік продовжує своє виконання (входячи у критичну секцію); якщо м’ютекс був зайнятий, потік переходить у стан очікування (кажуть, що потік «очікує на м’ютексі», або «заблокований на м’ютексі»), виконання продовжує інший по­тік. Потік, який зайняв м’ютекс, називають власником м’ютекса (mutex owner):

Mutex_lock (mutex_t mutex) { if (mutex.state == free) { mutex.state =locked;

mutex.owner = this thread;}else sleepO;}

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

mutex_unlock (mutex_t mutex) {

if (mutex.owner != this_thread) return error: mutex.state=free;

if (waiting_threads()) wakeup (some_thread);}

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

Рекурсивний м’ютекс - особливий вид м’ютекса. Він дозволяє повторне зай­няття тим самим потоком, а також відстежує, який потік намагається його зайняти.

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

Логічна або віртуальна адреса — адреса, яку генерує програма, запущена на

деякому процесорі. Адреси, що використовують інструкції конкретного

процесора, є логічними адресами. Фізична адреса — адреса, якою оперує мікросхема пам'яті. Прикладна програма в сучасних комп'ютерах не має справи з фізичними адресами. Спеціальний апаратний пристрій MMU (memory management unit - пристрій керування пам'яттю) відповідає за перетворення логічних адрес у фізичні.

Під час реалізації віртуальної пам'яті необхідно забезпечити захист пам'яті,

переміщення процесів у пам'яті та спільне використання пам'яті кількома

процесами.

Підхід базового і межового регістрів один із найпростіших способів задовольнити вимоги. Для кожного процесу в двох регістрах процесора зберігають два значення — базової адреси (base) і межі(bounds). Кожний доступ до логічної адреси апаратно перетворюється у фізичну адресу шляхом додавання логічної адреси до базової. Якщо отримувана фізична адреса не потрапляє в діапазон (base, base+bounds), вважають, що адреса невірна,

і генерують помилку.

БІЛЕТ № 17

Міжпроцесова взаємодія. Види міжпроцесової взаємодії.

Реалізація міжпроцесової взаємодії здійснюється трьома основними методами: передавання повідомлень, розподілюваної пам'яті та відображуваної пам’яті.

Методи розподілюваної пам’яті (shared memory) дають змогу двом процесам об­мінюватися даними через загальний буфер пам’яті. Перед обміном даними кож­ний із тих процесів має приєднати цей буфер до свого адресного простору з ви­користанням спеціальних системних викликів (перед цим перевіряють права). Буфер доступний у системі за допомогою процедури іменування, термін його іс­нування звичайно обмежений часом роботи всієї системи. Дані в ньому фактично є спільно використовуваними, як і для потоків. Жодних засобів синхронізації доступу до цих даних розподілювана пам’ять не забезпечує, програміст, так само, як і при розробці багатопотокових застосувань, має організовувати її сам.

В основі методів передавання повідомлень (message passing) лежать різні техно­логії, що дають змогу потокам різних процесів (які, можливо, виконуються на різ­них комп’ютерах) обмінюватися інформацією у вигляді фрагментів даних фіксо­ваної чи змінної довжини, котрі називають повідомленнями (messages). Процеси можуть приймати і відсилати повідомлення, при цьому автоматично забезпечу­ється їхнє пересилання між адресними просторами процесів одного комп’ютера або через мережу. Важливою особливістю технологій передавання повідомлень є те, що вони не спираються на спільно використовувані дані — процеси можуть обмінюватися повідомленнями, навіть не знаючи один про одного.

Відображувана пам'ять (mapped memory). У ряді ОС відображувана пам’ять є базовим системним механіз­мом, на якому ґрунтуються інші види міжпроцесової взаємодії та системні вирі­шення. Звичайно відображувану пам’ять використовують у поєднанні з інтерфей­сом файлової системи, в такому разі говорять про файли, відображувані у пам'ять (memory-mapped files). Ця технологія зводиться до того, що за допомогою спеціального системного виклику (зазвичай це mmap()) певну частину адресного простору процесу одно­значно пов’язують із вмістом файла. Після цього будь-яка операція записування в таку пам’ять спричиняє зміну вмісту відображеного файла, яка відразу стає доступною усім застосуванням, що мають доступ до цього файла. Інші застосу­вання теж можуть відобразити той самий файл у свій адресний простір і обміню­ватися через нього даними один з одним.