
- •Определения
- •Виды циклов Безусловные циклы
- •Цикл с предусловием
- •Цикл с постусловием
- •Цикл с выходом из середины
- •12. Опишіть переваги циклічного алгоритму.
- •13. Опишіть алгоритм розподілу часу.
- •14. Опишіть алгоритм кооперативна багатозадачність.
- •15. Опишіть алгоритм пріоритетна багатозадачність із витисненням.
15. Опишіть алгоритм пріоритетна багатозадачність із витисненням.
Пріоритетна багатозадачність з витісненням - це, мабуть, найбільш часто використовуваний в ОС РВ принцип планування. Основна ідея полягає в тому, що високопріоритетні завдання, як тільки для неї з'являється робота, негайно перериває (витісняє) низькопріоритетних. Іншими словами, якщо яка-небудь задача переходить в стан готовності, вона негайно отримує управління, якщо поточна активна задача має більш низький пріоритет. Таке «витіснення» відбувається, наприклад, коли високопріоритетних завдання отримала очікуване повідомлення, звільнився запитаний нею ресурс, відбулося пов'язане з нею зовнішня подія, вичерпався заданий інтервал часу і т. п.
Витісняюча або пріоритетна багатозадачність (режим реального часу)
Вид багатозадачності, в якому операційна система сама передає управління від однієї виконуваної програми іншої в разі завершення операцій введення-виведення, виникнення подій в апаратурі комп'ютера, закінчення таймерів і квантів часу, або ж надходжень тих чи інших сигналів від однієї програми до іншої. У цьому виді багатозадачності процесор може бути переключений з виконання однієї програми на виконання іншої без всякого побажання першої програми і буквально між будь-якими двома інструкціями в її коді. Розподіл процесорного часу здійснюється планувальником процесів. До того ж кожній задачі може бути призначений користувачем або самою операційною системою певний пріоритет, що забезпечує гнучке управління розподілом процесорного часу між завданнями (наприклад, можна знизити пріоритет ресурсномісткою програмі, знизивши тим самим швидкість її роботи, але підвищивши продуктивність фонових процесів). Цей вид багатозадачності забезпечує більш швидкий відгук на дії користувача.
Переваги: можливість повної реалізації багатозадачного вводу-виводу в ядрі ОС, коли очікування завершення введення-виведення однією програмою дозволяє процесору тим часом виконувати іншу програму. Сильне підвищення надійності системи в цілому, в поєднанні з використанням захисту пам'яті - ідеал у вигляді «жодна програма користувацького режиму не може порушити роботу ОС в цілому» стає досяжним хоча б теоретично, поза витісняючої багатозадачності він не досяжний навіть в теорії. Можливість повного використання багатопроцесорних і багатоядерних систем.
Недоліки: необхідність особливої дисципліни при написанні коду, особливі вимоги до його реентрантності, до захисту всіх поділюваних і глобальних даних об'єктами типу критичних секцій та mutex'ов.
Реалізована в таких ОС, як:
VMS
Linux
в режимі користувача (а часто і в режимі ядра) всіх UNIX-подібних ОС, включаючи версії Mac OS X, iOS; Symbian OS
в режимі ядра ОС Windows 3.x - тільки при виконанні на процесорі 386 або старше, «завданнями» є тільки всі Windows-програми разом узяті і кожна окрема віртуальна машина ДОС, між додатками Windows витісняє багатозадачність не використовувалася
Windows 95/98/ME - без повноцінного захисту пам'яті, що служило причиною вкрай низькою, на одному рівні з MS-DOS, Windows 3.x і Mac OS версій до X - надійності цих ОС
Windows NT/2000/XP/Vista/7 і в режимі ядра, і в режимі користувача.
AmigaOS - усі версії, до версії 4.0 без повноцінного захисту пам'яті, що на практиці для системних програм майже не позначалося на надійності через високу стандартизованість, прозорих API і SDK. Програми орієнтовані на «залізо» Аміго, навпаки не відрізнялися надійністю. 16. У яких випадках потрібна синхронізація завдань?
- функції, які виконуються різними завданнями та зв*язані одна з одною
- необхідність впорядкувати доступ декількох завдань до розподілення ресурсу
- необхідність синхронізації завдання із зовнішніми подіями
- необхідність синхронізації завдань за часом 17. Що називають ресурсом?
Це термін, що описує фізичний пристрій або область пам*яті, які можуть одночасно використовуватись тільки одним завданням 18. Що називають семафором?
Семафор — це універсальний механізм для організації взаємодії процесів (в термінології операційних систем сімейства Windows — потоків).
Розв'язує задачі взаємного виключення та синхронізації потоків. Він є одним з найстаріших засобів розподілення доступу процесів, що працюють паралельно, до критичних ресурсів. Семафори використовуються для контролю доступу до спільного ресурсу, або для синхронізації процесів (потоків).
Визначення семафору зроблено нідерландським вченим Едсгером Дейкстрою, деякий час використовувався термін Семафор Дейкстри.
Семафор — це об'єкт ядра ОС, який можна розглядати як лічильник, що містить ціле число в діапазоні від 0 до заданого при його створенні максимального значення. При досягненні семафором значення 0 він переходить у несигнальний стан, при будь-яких інших значеннях лічильника – його стан сигнальний.
Традиційне позначення семафора : S. Операції, які можна виконати над семафором:
Ініціалізація - встановлення початкового значення семафору.
Операція P(S): Вона перевіряє стан семафору. Якщо семафор не рівний нулю, то виконується операція S:=S-1. Інакше, процес блокується, поки S=0.
Операція V(S): Ця операція збільшує значення семафору на 1. Тобто виконується операція S:=S+1.
Типи семафорів
В залежності від значень, які може приймати семафор він поділяється на:
Двійковий : здатний приймати значення 0 та 1.
Трійковий : здатний приймати значення 0, 1 та 2.
і т. д.
Задачі, що розв'язуються з допомогою семафорів
З допомогою семафорів можна розв'язати задачі синхронізації потоків та використання спільного ресурсу багатьма потоками. 19. Що називають мутексом?
Мьютекс (англ. mutex, від mutual exclusion - «взаємне виключення») - одномісний семафор, службовець в програмуванні для синхронізації одночасно виконуються потоків.
Мьютекс - це один з варіантів Семафорний механізмів для організації взаємного виключення. Вони реалізовані в багатьох ОС, їх основне призначення - організація взаємного виключення для потоків з одного і того ж або з різних процесів.
Мьютекс - це найпростіші двійкові семафори, які можуть знаходитися в одному з двох станів - відзначеному або невідмічений (відкритий і закритий відповідно). Коли-небудь потік, що належить будь-якому процесу, стає власником об'єкта mutex, останній переводиться в невідмічений стан. Якщо завдання звільняє мьютекс, його стан стає відміченим.
Завдання мьютекса - захист об'єкта від доступу до нього інших потоків, відмінних від того, який заволодів мьютекс. У кожен конкретний момент тільки один потік може володіти об'єктом, захищеним мьютекс. Якщо іншому потоку буде потрібен доступ до змінної, захищеної мьютекс, то цей потік засинає доти, поки мьютекс не буде звільнений.
Мета використання мьютекс - захист даних від пошкодження в результаті асинхронних змін (стан гонки), однак можуть породжуватися інші проблеми - такі, як взаємне блокування (клінч).
Мьютекс відрізняється від спінлока наявністю черги чекають потоків.
Мьютекс відрізняється від семафора загального вигляду тим, що тільки володіє ним потік може його звільнити, тобто перевести в зазначене стан.
Мьютекс в мові C + +
Останній стандарт мови C + + (ISO / IEC 14882:2011 [5]) визначає різні класи мьютекс:
mutex - немає контролю повторного захоплення тим же потоком;
recursive_mutex - повторні захоплення тим же потоком допустимі, ведеться лічильник таких захоплень;
timed_mutex - немає контролю повторного захоплення тим же потоком, підтримується захоплення мьютекса з тайм-аутом;
recursive_timed_mutex - повторні захоплення тим же потоком допустимі, ведеться лічильник таких захоплень, підтримується захоплення мьютекса з тайм-аутом.
Слід зазначити бібліотеку Boost, яка забезпечує:
Реалізацію мьютекс сумісних по інтерфейсу зі стандартом C + +11 для компіляторів і платформ які не підтримують цей стандарт;
Реалізацію додаткових класів мютексов: shared_mutex та ін, які дозволяють захоплювати мьютекс для спільного володіння декількома потоками тільки для читання даних. 20. Опишіть „смертельне захоплення”. 21. Що називають інверсією приорітетів?
Інверсія пріоритетів використовується, коли у зв'язку з нижчим пріоритетом завдання вище пріоритетним завданням повинна чекати невизначений час. Пріоритет наслідування є одним із способів боротьби з інверсії пріоритетів.Це контролю доступу до ресурсів протокол, який ставить пріоритетним завданням, якщо це завдання має запитуваної ресурсу з вищим пріоритетом завдання, з тим же рівнем пріоритету вище пріоритетних завдань.
Інверсія пріоритету відбувається тоді, коли дві або декілька потоків з різними пріоритетами знаходяться в суперечці, яка з них повинен бути обслужений процесором. Розглянемо простий випадок з трьома потоками: потік 1, потік 2 і потік 3. Потік 1 - високопріоритетних і стає готовим бути допущеним до процесора для виконання коду. Потік 2, потік з низьким пріоритетом, виконує код в критичній секції програми. Потік 1, високопріоритетних потік, починає очікувати спільно використовуваний ресурс від потоку 2. Потік 3 має середній пріоритет. Потік 3 отримує все процесорний час, тому що високопріоритетні потік (потік 1) очікує спільно використовувані ресурси від потоку з низьким пріоритетом (потік 2). Потік 2 не залишить критичну секцію програми, тому що не має найвищого пріоритету і не буде допущений до процесора для виконання коду.
Windows NT/2000/XP: диспетчер вирішує цю проблему, за допомогою довільного підвищення пріоритетів потоків готових до роботи (в цьому випадку, низькопріоритетні потоки утримуються заблокованими). Низькопріоритетні потоки запускаються досить довго, щоб вийти з критичної секції програми, а високопріоритетні потік може ввести критичну секцію програми. Якщо потік з низьким пріоритетом не отримає достатньо процесорного часу, щоб вийти з критичної секції програми перший раз, він отримає інший шанс протягом наступного кола диспетчеризації.
Windows 95/98/Me: Якщо високопріоритетних потік залежить від потоку з низьким пріоритетом, який не матиме можливості виконати свій код, тому що середньо пріоритетний потік отримує все процесорний час, система визнає, що високопріоритетні потік залежить від потоку з низьким пріоритетом. Вона підвищує пріоритет низькопріоритетного потоку до рівня високопріоритетних потоку. Це дає можливість потоку, який спочатку мав найнижчий пріоритет виконати свій код і звільнити високопріоритетних потік, який чекав його. 22. Що називають розподіленим середовищем?
Розподілена середа обробки даних - технологія розподіленої обробки даних, що представляє собою стандартний набір мережевих служб для виконання прикладних процесів, розосереджених по групі абонентських систем (по гетерогенної мережі). Функції розподіленої середовища включають:
- Службу каталогів, що дозволяє клієнтам знаходити сервери;
- Службу інтерфейсу многопоточной обробки;
- Службу віддаленого виклику процедур;
- Службу обслуговування файлів;
- Службу безпеки даних;
- Службу часу, синхронизирующей годинник в абонентських системах.