
- •Операційні системи
- •Функціонування комп'ютерної системи
- •Обработка переривань
- •Структура пам'яті
- •Лекція 5: Архітектура ос. Управління процессами: Основні поняття. Семафори і монітори План
- •2. Керування процесами
- •Віртуальні машини - інший розповсюджений підхід до розробки операційних систем й їхніх користувальницьких інтерфейсів
- •Механізми й політики
- •Реалізація операційних систем
- •Генерація операційної системи
- •Перемикання з одного процесу на інший
- •Планувальники, що виконують диспетчеризацію процесів
- •Лекція 10. Методи синхронізації процесів План
- •Алгоритм рішення проблеми критичної секції
- •Алгоритм «в пиріжковій» (bakery algorithm)
- •Синхронізація на основі загальних семафорів
- •Реалізація семафорів
- •Рішення за допомогою семафорів завдання
- •Рішення за допомогою семафорів завдання "читачі - письменники"
- •Рішення за допомогою семафорів завдання " філософи, що обідають,"
- •Монітори
- •Лекція № 11. Управління памяттю План
- •Динамічне завантаження й динамічна лінковка
- •Оверлейна структура програми
- •Відкачка й підкачування
- •Лекція 13. Сегментна організація пам’яті. Віртуальна пам’ять
- •Оптимальний алгоритм заміщення сторінок
- •Сторінкова організація на вимогу в Windows nt
- •Лекція № 14. Системи файлів План
- •Типова організація файлової системи зображена на мал. 19.3.
- •Логічна організація директорій
- •Монтування файлових систем
- •Структура файлової системи
- •Лекція № 15. Віртуальні файлові системи План
- •Лекція 17. Системи вводу-виводу План
- •Опитування пристроїв
- •Переривання
- •Ввід-вивід із прямим доступом до пам'яті (dma)
- •Блокові й символьні пристрої
- •Мережні пристрої істотних відрізняються від блоків і символьних; мають свій власний інтерфейс і систему команд
- •Годинники й таймери
- •Блокуємий (синхронний) і не блокуємий (асинхронний) ввід-вивід
- •Структури даних для вводу-виводу в ядрі ос
- •Життєвий цикл запиту на ввід-вивід
- •Продуктивність вводу-виводу
- •Лекція 18. Мережі й мережеві структури. Класичні и сучасні мережеві комунікаційні протоколи План
- •Мережі Ethernet
- •Протокол tcp/ip
- •Функционирование Ethernet-мереж
- •Лекція 19: Безпека операційних систем і мереж. План
- •Лекція 20. Огляд архітектури й можливостей системи Linux: архітектура, ядро, поширення й ліцензування, принципи проектування, керування процесами План
- •Історія Linux
- •Ядро Linux
- •Сучасний стан Linux, дистрибутиви й ліцензування
- •Принципи проектування й компоненти системи Linux
- •Модулі ядра, що завантажують, Linux
- •Керування процесами в Linux
- •Планування завдань ядра й синхронізація в ядрі
- •Лекція 21. Огляд архітектури й можливостей системи Linux: керування пам'яттю, ресурсами, файлові системи, драйвери пристроїв, мережі, безпека План
- •Керування фізичною пам'яттю в Linux
- •Віртуальна пам'ять в Linux
- •Виконання й завантаження користувальницьких програм в Linux
- •Системи файлів Linux
- •Ввод й вивід в Linux
- •Взаємодія процесів в Linux
- •Структура мережі в Linux
- •Безпека в Linux
- •Розвиток і використання Linux
- •Лекція 22. Огляд архітектури й можливостей систем Windows 2000/xp/2003/Vista/2008/7 План
- •Система Windows 2000
- •Історія Windows
- •Принципи проектування Windows 2000 - розширюваність, переносимость, надійність, безпека, сумісність, продуктивність, підтримка інтернаціоналізації й локалізації.
- •Архітектура Windows 2000
- •Ядро Windows 2000
- •Обработка переривань у ядрі
- •Виконавча підсистема (executive) ос Windows 2000
- •Підсистеми оточення в Windows 2000
- •Лекція 23. Системні механізми Windows План
- •Система файлів Windows
- •Рограммный інтерфейс Windows
- •Програмний інтерфейс Windows: Керування процесами
- •Керування віртуальною й фізичною пам'яттю й робочими наборами в Windows
- •Лекція 24. Ос для мобільних пристроїв. Windows Mobile План
- •Особливості ос для мобільних пристроїв
- •Ринок ос для мобільних пристроїв
- •Перспективи ос для мобільних пристроїв
- •Лекція 25. Перспективи операційних систем і мереж План
- •Операційні системи інших великих фірм
- •Solaris - операційна система розробки фірми Oracle / Sun
- •Сучасні тенденції в розвитку ос
- •Нові ос сімейства Windows
- •Нові тенденції в розвитку ос
- •Графічні оболонки ос
- •Підтримка паралельних обчислень
- •Розвиток бездротових мереж
- •Перспективи розвитку ос
Лекція 10. Методи синхронізації процесів План
Історія синхронізації процесів
Проблема критичної секції
Апаратна підтримка синхронізації
Семафори
Класичні проблеми синхронізації
Критичні області
Монітори
Синхронізація в Solaris й в Windows.
Історія синхронізації
Методи синхронізації процесів розглядалися ще в 1960-х рр. у піонерській роботі Е. Дейкстра. Було відзначено, що спільний доступ паралельних процесів до загальних даних може привести до порушення їхньої цілісності. Підтримка цілісності загальних даних вимагає реалізації й використання механізмів упорядкування роботи взаємодіючих процесів (або потоків).
Ситуація, при якій взаємодіючі процеси можуть паралельно (одночасно) звертатися до загальних даних, називається конкуренцією за загальні дані (race condition). Для запобігання подібних ситуацій процеси варто синхронізувати.
Синхронізація процесів по критичних секціях
Розглянемо проаналізовану проблему в загальному виді. Нехай є n паралельних процесів, кожний з яких може звернутися до загального для них даним. Назвемо критичною секцією фрагмент коду кожного процесу, у якому відбувається звертання до загальних даних. Проблема синхронізації процесів по критичних секціях полягає в тому, щоб забезпечити наступний режим виконання: якщо один процес увійшов у свою критичну секцію, то до її завершення ніякий інший процес не зміг би одночасно ввійти у свою критичну секцію.
Можна показати, що для рішення проблеми критичної секції необхідно й досить виконання наступних трьох умов:
Взаємне виключення. Якщо деякий процес виконує свою критичну секцію, то ніякий інший процес не повинен у цей момент виконувати свою.
Прогрес.Якщо в цей момент немає процесів, що виконують критичну секцію, але є кілька процесів, що бажають почати виконання критичної секції, то вибір системою процесу, якому буде дозволений запуск критичної секції, не може тривати нескінченно.
Обмежене очікування.У системі повинне існувати обмеження на число раз, що процесам дозволено входити у свої критичні секції, починаючи від моменту, коли деякий процес зробив запит про вхід у критичну секцію, і до моменту, коли цей запит задоволений.
При цьому передбачається, що кожен процес виконується з ненульовою швидкістю, але не робиться ніяких припущень про співвідношення швидкостей процесів.
Алгоритм рішення проблеми критичної секції
Нехай для простоти є тільки два процеси – P0 й P1. Загальна структура i - го процесу повинна мати вигляд:
do {
вхід у критичну секцію
критична секція
вихід із критичної секції
інша частина коду
} while (1)
Процеси можуть використати загальні змінні для синхронізації своїх дій.
Алгоритм 1. Почнемо першу спробу рішення проблеми. Уведемо цілу змінну turn (черга), значення якої turn == i буде позначати, що наступила черга процесу номер i увійти у свою критичну секцію. Спочатку turn == 0.
Алгоритм процесу Pi має вигляд:
do {
while (turn != i);
критична секція
turn = j; /* j != i: якщо i == 0, j == 1; якщо i == 1, j == 0 */
інша частина коду
} while (1)
Очевидно по побудові, що даний алгоритм задовольняє принципу взаємне виключення. Однак він не задовольняє принципу прогрес: алгоритм не вживає ніяких мір, щоб обмежити час вибору процесу, що бажає почати критичну секцію. Причина в наступному: алгоритм не зберігає інформацію про те, які процеси бажають увійти у свої критичні секції.
Алгоритм 2.Будемо зберігати не номер процесу, допущеного до критичної секції, а масив булевских прапорів flag [2], такий, що flag[i] == true, якщо i -й процес готовий увійти у свою критичну секцію. Алгоритм процесу Pi прийме вид:
do {
flag[i] = true;
while (flag[j]); /* j!=i: якщо i==0, j==1; якщо i == 1, j == 0 */
критична секція
flag[i] = false;
інша частина коду
} while (1)
Даний варіант алгоритму також задовольняє принципу взаємо виключення, тому що перед входом у критичну секцію процес чекає, поки не залишиться інших процесів, що бажають увійти у свої критичні секції.
Однак даний алгоритм також не задовольняє принципу прогрес. Причина в тім, що алгоритм не розрізняє інформацію про те, що процес ще тільки готовий увійти у свою критичну секцію, і про те, що він у неї вже ввійшов.
Алгоритм 3. Модифікуємо алгоритм, використовуючи в ньому одночасно й змінну turn, і масив прапорів flag. Алгоритм процесу прийме вид:
do {
flag[i] = true;
turn = j;
while (flag[j] and turn == j);
критична секція
flag[i] = false;
інша частина коду
} while (1)
Можна перевірити, що даний варіант алгоритму задовольняє всім трьом принципам і вирішує проблему синхронізації по критичних секціях. Формальний доказ надаємо студентам. Ідея даного варіанта алгоритму в тім, що перед входом у критичну секцію процес спочатку заявляє про свій намір у неї ввійти, але потім намагається надати право на вхід у критичну секцію іншому процесу й тільки після того, як інший процес її виконав і більше не бажає в неї ввійти, входить сам у свою критичну секцію.