Багатозадачність
Багатозадачність (англ. multitasking) — властивість операційної системи або середовища програмування забезпечувати можливість паралельної (або псевдопаралельної) обробки декількох процесів. На комп'ютерах із одним одноядерним процесором одночасно може виконуватись лише одна задача, тому багатозадачність організовується через розподілення часу виконання задачі на процесорі. Справжня багатозадачність операційної системи можлива тільки в багатопроцесорних, або кількаядерних системах, або в розподілених обчислювальних системах.
Властивості багатозадачного середовища
Примітивні багатозадачні середовища забезпечують чисте «розділення ресурсів», коли за кожним завданням закріплюється певна ділянка пам'яті, і завдання активізується в строго певні інтервали часу.
Розвиненіші багатозадачні системи проводять розподіл ресурсів динамічно, коли завдання стартує в пам'яті або покидає пам'ять залежно від її пріоритету і від стратегії системи. Таке багатозадачне середовище володіє такими особливостями:
- Кожне завдання має свій пріоритет, відповідно до якого отримує час і пам'ять
- Система організовує черги завдань так, щоб всі завдання отримали ресурси, залежно від пріоритетів і стратегії системи
- Система організовує обробку переривань, за яких завдання можуть активуватися, деактивуватися і віддалятися
- Після закінчення покладеного кванта часу завдання може тимчасово викидатися з пам'яті, віддаючи ресурси іншим завданням, а потім через визначений системою час, відновлюватися в пам'яті (свопінг)
- Система забезпечує захист пам'яті від несанкціонованого втручання інших завдань
- Система розпізнає збої і зависання окремих завдань і припиняє їх
- Система вирішує конфлікти доступу до ресурсів і пристроїв, не допускаючи тупикових ситуацій загального зависання від очікування заблокованих ресурсів
- Система гарантує кожному завданню, що рано чи пізно його буде активовано
- Система обробляє запити реального часу
- Система забезпечує комунікацію між процесами
Труднощі реалізації багатозадачного середовища
Основною трудністю реалізації багатозадачного середовища є її надійність, виражена в захисті пам'яті, обробці збоїв і переривань, оберіганні від зависань і тупикових ситуацій.
Окрім надійності, багатозадачне середовище має бути ефективним. Витрати ресурсів на її підтримку не повинні заважати процесам проходити, уповільнювати їхню роботу, різко обмежувати пам'ять.
Історія багатозадачних операційних систем
Спочатку реалізація багатозадачних операційних систем була серйозною технічною трудністю, тому впровадження багатозадачних систем затягувалося, а користувачі довгий час після впровадження віддавали перевагу однозадачним.
Надалі, після появи кількох вдалих рішень, багатозадачні середовища стали удосконалюватися, і в наш час[коли?] уживаються повсюдно.
Однією з перших багатозадачних систем була OS/360 (1966 [1]), використовувана для комп'ютерів фірми IBM і їхніх радянських аналогів ЄС ЕОМ. Розробки системи були сильно затягнуті, і на початковий час фірма IBM висунула однозадачний DOS/360, щоб задовольнити замовників до повної здачі OS/360 в експлуатацію. Система піддавалася критиці через низьку надійність і важкість експлуатації.
У 1969 році з'явилася система UNIX з першим досить акуратним алгоритмічним рішенням проблеми багатозадачності. В наш час[коли?] на базі UNIX створені десятки операційних систем.
На комп'ютерах PDP-11 і їх радянських аналогах СМ-4 використовувалася багатозадачна система RSX-11 (радянський аналог ОС РВ), і система розподілу часу TSX-PLUS, що забезпечує обмежені можливості багатозадачності і розрахований на багато користувачів режим розділення часу, що емулював для кожного користувача однозадачну RT-11 (радянський аналог РАФОС). Останнє рішення було вельми популярне через низьку ефективність і надійність повноцінної багатозадачної системи.
Акуратним рішенням виявилася операційна система VMS, розроблена спочатку для комп'ютерів VAX (радянський аналог — СМ-1700) як розвиток RSX-11.
Перший у світі мультимедійний персональний комп'ютер Amiga 1000 (1984 р.) спочатку проектувався з розрахунком на повну апаратну підтримку витискальної багатозадачності реального часу в ОС AmigaOS. У цьому випадку розробка апаратної і програмної частини велася паралельно, це привело до того, що за показником квантування планувальника багатозадачності (1/50 секунди на перемикання контексту) AmigaOS довгий час залишалася неперевершеною серед персональних комп'ютерів.
Багатозадачність забезпечувала також фірма Microsoft в операційних системах Windows. При цьому Microsoft вибрала дві лінії розробок — на базі Windows 0.9 (яка після довгого доопрацювання початкової системи кооперативної багатозадачності, аналогічної Mac OS, згодом вилилася в лінійку Windows 9x), і Windows NT, на основі ідей, закладених в VMS. Використання досвіду VMS забезпечило системам істотно вищу продуктивність і надійність. За часом перемикання контексту багатозадачності (квантування) тільки ці операційні системи можуть бути порівнянні з AmigaOS і UNIX (а також його нащадками, такими, як ядро Linux).
Виноски
- Mealy G.H., Witt B.I., Clark W.A. The functional structure of OS/360, IBM Systems Journal, 5, #1, 1966