- •28. Синхронізація за принципом бар'єра
- •29. Синхронізація процесів користувача у Linux.Ф’ютекси
- •30. Види міжпроцесової взаємодії
- •31. Міжпроцесова взаємодія на базі спільної пам'яті
- •32. Технології передавання повідомлень
- •33. Взаємні блокування
- •34. Умови виникнення взаємних блокувань
- •35. Запобігання взаємним блокуванням на рівні ос
- •36. Підхід ведучого-веденого
- •37. Підхід портфеля задач
- •38. Підхід конвеєра
- •39. Проблеми реалізації'віртуальної пам'яті. Фрагментація пам'яті
- •41. Сегментація пам'яті
- •42. Сторінкова організація пам'яті
- •43. Сторінково-сегментна організація пам'яті
- •44. Поняття підкачування
- •45. Поняття сторінкового переривання
- •46. Алгоритм fifo
- •47. Оптимальний алгоритм
- •48. Алгоритм lru
- •49. Годинниковий алгоритм
- •50. Організація заміщення сторінок
- •51. Поняття файла і файлової системи
- •52. Організація інформації у файловій системі
- •53. Операції над файлами і каталогами
- •54. Файлові операції posix
33. Взаємні блокування
У разі використання блокувань може виникнути ситуація взаємного блокування (тупик, deadlock), коли жоден із потоків не може продовжувати виконання, бо очікує дій іншого. Вихід із такої ситуації без стороннього втручання неможливий. Наприклад, взаємне блокування виникає як наслідок таких дій.
Потік ТА блокує доступ до ресурсу RA.
Потік Тв блокує доступ до ресурсу RB.
Потік ТА намагається отримати доступ до ресурсу RB і призупиняється, оскільки той зайнятий потоком Тв.
Потік Тв намагається отримати доступ до ресурсу RA і теж призупиняється, оскільки той зайнятий потоком ТА.
34. Умови виникнення взаємних блокувань
Є чотири умови виникнення взаємних блокувань (коли хоча б одна з них не виконується, взаємні блокування в системі неможливі):
взаємне виключення — ресурсом у конкретний момент може володіти тільки один потік, інші мають очікувати;
утримування і очікування — потік у конкретний момент може володіти кількома ресурсами і робити запити на нові; усі інші потоки мають очікувати, поки він не звільнить доступ до своїх ресурсів;
відсутність витиснення — у потоку не можна відібрати ресурси, якими він володіє, потік має звільнити їх сам;
циклічне очікування — має існувати така циклічна послідовність потоків, за якої кожен попередній очікує доступу до ресурсу, зайнятого наступним (циклічність послідовності полягає в тому, що останній потік чекає ресурсу, зайнятого першим).
35. Запобігання взаємним блокуванням на рівні ос
У літературі описані складні алгоритми і стратегії виявлення взаємних блокувань і запобігання ним в ОС, які використовують переважно теорію графів. Більшість таких алгоритмів ґрунтуються на попередніх знаннях про особливості розподілу ресурсів між процесами і тому не мають практичного значення (оскільки в системах, де одночасно виконуються сотні процесів, такої інформації бути не може). Докладніше про це сказано в [44].
У більшості сучасних систем використовують найпростіший можливий алгоритм — «алгоритм страуса»: система не вживає ніяких дій для запобігання взаємним блокуванням, оскільки організація таких дій коштує дорожче, ніж можливі втрати від появи блокувань. Оскільки на практиці блокування з'являються рідко, на них не звертають уваги. Якщо потрібно, відповідне застосування можна явно знищити
36. Підхід ведучого-веденого
Найпростішим підходом до організації потоків є підхід ведучого-веденого (master-slave). Основний (ведучий) потік запускає набір ведених потоків і передає кожному з них його обсяг роботи. Він відомий заздалегідь і нарівно розділений між веденими потоками. Після того як ведучий потік запустить всі ведені, він очікує їхнього завершення, виконуючи операцію приєднання потоків. Потім, якщо це необхідно, ведені потоки запускаються знову для виконання роботи наступного етапу. Цей підхід можна використовувати тоді, коли ведені потоки виконуються незалежно один від одного, тому між ними не потрібна синхронізація.
