
- •Поняття операційної системи
- •Операційна система як розширена машина
- •Операційна система як менеджер ресурсів
- •Історія розвитку операційних систем
- •Перше покоління (1945-1955): електронні лампи і комутаційні панелі
- •Друге покоління (1955-1965): транзистори і системи пакетної обробки
- •Третє покоління (1965-1980): інтегральні схеми і багатозадачність
- •Четверте покоління (з 1980 року по наші дні): персональні комп'ютери
- •Історія minix 3
- •Основні концепції
- •Процеси
- •Оболонка
- •Системні виклики
- •Системні виклики для управління процесами
- •Системні виклики для управління сигналами
- •Системні виклики для управління файлами
- •Системні виклики для управління каталогами
- •Системні виклики для захисту
- •Системні виклики для управління часом
- •Структура операційної системи
- •1.5.2. Багаторівневі системи
- •1.5.3. Віртуальні машини
- •1.5.4. Екзоядра
- •1.5.5. Модель клієнт-сервер
- •2.1.1. Модель процесів
- •2.1.2. Створення процесів
- •2.1.3. Завершення процесів
- •2.1.4. Ієрархії процесів
- •2.1.5. Стани процесів
- •2.1.6. Реалізація процесів
- •2.1.7. Програмні потоки
- •2.2. Взаємодія між процесами
- •5.1. Файли
- •5.1.1. Іменування файлів
- •5.1.2. Структура файлу
- •5.1.3. Типи файлів
- •5.1.4. Доступ до файлів
- •5.1.5. Атрибути файлів
- •5.1.6. Операції з файлами
- •5.2. Каталоги
- •5.2.1. Прості каталоги
- •5.2.2. Ієрархічні системи каталогів
- •5.2.3. Шляхи
- •5.2.4. Операції з каталогами
- •5.3. Реалізація файлової системи
- •5.3.1. Структура файлової системи
- •5.3.2. Реалізація файлів
- •5.3.4. Організація дискового простору
1.5.3. Віртуальні машини
Вихідна версія OS/360 була системою виключно пакетної обробки.
Однак безліч користувачів OS/360 бажали працювати в системі з
поділом часу, тому різні групи програмістів як в самій корпорації
IBM, так і поза її вирішили написати для цієї машини системи поділу часу.
Офіційна система поділу часу від IBM, яка називалася TSS/360,
пізно вийшла в світ і виявилася настільки громіздкою і повільною, що на неї
перейшли лише деякі. В кінцевому рахунку від неї відмовилися, але вже після того, як її
розробка зажадала близько 50 млн доларів. Група з наукового
центру IBM в Кембриджі, штат Массачусетс, розробила в корені відрізняючусь від
неї систему, яку компанія IBM в результаті прийняла як закінчений
продукт. Зараз вона широко використовується на ще залишившихся мейнфреймах.
Ця система, в оригіналі називалася CP / CMS, а пізніше перейменована в VM /
370VM/370, була заснована на наступному проникливому спостереженні:
система поділу часу забезпечує, по-перше, багатозадачність, по-друге,
розширену машину з більш зручним інтерфейсом, ніж той, що
надається обладнанням безпосередньо. Система VM/370 заснована на повному поділі цих двох функцій . Серце системи, зване монітором віртуальної машини, працює з
обладнанням та забезпечує багатозадачність, надаючи верхньому рівню не
одну, а кілька віртуальних машин. Але, в
відміну від усіх інших операційних систем, ці віртуальні машини не є
розширеними. Вони не підтримують файли та інші зручності, а
надають точні апаратні копії, включаючи режими ядра і користувача, введення-виведення
даних, переривання і все інше, характерне для реального комп'ютера.
Оскільки кожна віртуальна машина ідентична справжньому обладнанню,
на кожній з них може працювати будь-яка операційна система, яка
запускається прямо на апаратурі. На різних віртуальних машинах можуть (а часто
так і відбувається) функціонувати різні операційні системи. На
деяких з них для обробки пакетів і транзакцій працюють нащадки OS/360,
а на інших для інтерактивного поділу часу користувачів працює
однокористувальницька інтерактивна система CMS (Conversational Monitor Sys-
System - система діалогової обробки).
Коли програма операційної системи CMS виконує системний виклик, він
перехоплюється операційною системою на власній віртуальній машині,
а не на VM/370, як сталося б, якби він працював на реальній машині
замість віртуальною. Потім CMS видає звичайні команди введення-виведення для читання
свого віртуального диска або інші команди, які можуть знадобитися
системі для виконання виклику. Ці команди введення-виведення перехоплюються
ОС VM/370, яка виконує їх в рамках моделювання реального
обладнання. При повному поділі функцій багатозадачності та надання
розширеної машини кожна частина може бути набагато простіше, гнучкіше і зручніше
для обслуговування.
Ідея віртуальної машини дуже часто використовується в наші дні, але в кілька
іншому контексті: для роботи на Pentium (або на інших 32-розрядних
процесорах від Intel) старих програм, написаних для MS-DOS. При розробці
комп'ютера Pentium і його програмного забезпечення обидві компанії, Intel і Microsoft,
розуміли, що виникне гостра потреба у підтримці роботи старих
програм на новому обладнанні. Тому корпорація Intel створила на процесорі
Pentium режим віртуального процесора 8086. В цьому режимі машина діє
як 8086 (з точки зору програмного забезпечення вона ідентична 8088),
включаючи 16-розрядну адресацію пам'яті з обмеженням обсягу пам'яті в 1 Мбайт.
Такий режим використовується системою Windows та іншими операційними
системами для запуску програм MS-DOS. Програми запускаються в режимі
віртуального процесора 8086. Поки вони виконують звичайні команди, ці
програми працюють безпосередньо з обладнанням. Але коли програма намагається
звернутися по перериванню до операційної системи, щоб зробити системний
виклик, або намагається безпосередньо здійснити введення-виведення даних, відбувається
переривання з перемиканням на монітор віртуальної машини.
Можливі два варіанти пристрою. Перший: сама система MS-DOS завантажена
в адресний простір віртуальної машини 8086, так що монітор
віртуальної машини тільки відсилає переривання назад до MS-DOS, як це відбувалося
відбувається на реальній машині 8086. Коли потім MS-DOS намагається самостійно
здійснити введення-виведення, операція перехоплюється і виконується монітором
віртуальної машини.
В іншому варіанті монітор віртуальної машини перехоплює першу
переривання і сам виконує введення-виведення, тому що він знає всі системні виклики MS-DOS і має уявлення про те, що повинно робити кожне переривання. Цей
варіант не настільки бездоганний, як перший, тому що, на відміну від першого
варіанту, він коректно моделює тільки MS-DOS і ніякі інші операційні
системи. З іншого боку, він набагато швидше працює, оскільки не вимагає
запуску MS-DOS для виконання вводу-виводу. Існує ще один недолік
фактичного запуску MS-DOS в режимі віртуальної машини 8086: MS-DOS
дуже часто оперує прапором дозволу / заборони переривань, а
моделювання цього вимагає великих витрат.
Варто відзначити, що жоден з двох описаних методів в дійсності не
забезпечує те, чим була система VM/370, тому що змодельована машина
являє собою тільки машину 8086, а не повноцінний процесор Pentium.
В системі VM/370 можна було запустити на віртуальній машині саму систему
VM/370. Навіть для самих старих версій Windows необхідний як мінімум
процесор 286, а, значить, їх неможливо запустити на віртуальній машині 8086.
Деякі реалізації віртуальних машин пропонуються ринку як комерційні. Для компаній, що надають послуги веб-хостингу, економічно вигідніше використовувати кілька віртуальних машин на одному потужному сервері(Можливо, багатопроцесорному), ніж кілька комп'ютерів, обслуговуючих окремі сайти. Саме для такого застосування призначені машиниVMWare і Microsoft Virtual PC. В якості імітуємих дисків для гостьових систем (guest systems) ці програми використовують великі файли на
фізичній системі. Для ефективності вони аналізують двійковий код програм
гостьової системи і дозволяють виконання безпечного коду безпосередньо
на фізичному апаратному забезпеченні, перехоплюючи інструкції,
здійснюють системні виклики. Подібні системи також корисні в сфері навчання.
Наприклад, студенти, які вивчають ОС MINIX 3, можуть працювати з нею як з
гостьовий операційною системою за допомогою віртуальної машини VMWare на
фізичному комп'ютері з Windows, Linux або UNIX без ризику пошкодити інше
встановлене програмне забезпечення. Багато викладачів з побоюванням
відносяться до поєднання своїх занять з курсом операційних систем на одних і тих
ж комп'ютерах, оскільки помилки, чинені студентами при роботі з ОС,
здатні пошкодити або зовсім знищити дані на дисках.
Ще одна область застосування віртуальних машин, хоча й трохи
специфічна, - це виконання Java-програм. Разом з мовою Java компанія Sun
Microsystems винайшла віртуальну машину (тобто комп'ютерну архітектуру) JVM (Java Virtual Machine - віртуальна машина Java). Компілятор Java створює код для JVM, який, як правило, виконується програмним JVM-інтерпретатором. Перевага такого підходу полягає в тому, що JVM-код може бути переданий через Інтернет і виконаний на будь-якому комп'ютері, оснащеному JVM-інтерпретатором. Двійковий код, створений компілятором, наприклад, для SPARC або Pentium, не можна використовувати де завгодно з такою ж
простотою. Зрозуміло, фірма Sun могла б спочатку запропонувати компілятор двійкового
коду для SPARC, а потім його інтерпретатор, проте інтерпретувати JVM-архітектури значно легше. У JVM є й інше важлива перевага: якщо інтерпретатор реалізований коректно (що аж ніяк не є нетривіальним), входять JVM-програми можна перевіряти на безпеку і потім виконувати в безпечному середовищі, щоб уникнути викрадення даних і деструктивних наслідків.