Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вступ, ст 22-93.doc
Скачиваний:
5
Добавлен:
02.09.2019
Размер:
1.62 Mб
Скачать

Віртуальні машини

Вихідна версія OS/360 була системою виключно пакетної обробки.

Проте багато користувачів OS/360 бажали працювати в системі з розділенням часу, тому різні групи програмістів як в самій корпорації IBM, так і поза її вирішили написати для цієї машини системи з поділом часу. Офіційна система з поділом часу від IBM, яка називалася TSS/360, пізно вийшла в світ і виявилася настільки громіздкою і повільною, що на неї перейшли всі. В кінцевому підсумку від неї відмовилися, але вже після того, як її розробка зажадала близько 50 млн доларів [135]. Група з наукового центру IBM в Кембриджі, штат Массачусетс, розробила в корені відрізняється від неї систему, яку IBM в результаті прийняла як закінчений продукт. Зараз вона широко використовується на ще залишилися мейнфреймах.

Ця система, в оригіналі називалася CP / CMS, а пізніше перейменована

в VM/370 [279], була заснована на наступному проникливому спостереженні:

система з поділом часу забезпечує A) багатозадачність і B) розширену

машину з більш зручним інтерфейсом, ніж той, що надається обладнанням безпосередньо. VM/370 заснована на повному розділенні цих двох функцій.

Серце системи, зване монітором віртуальної машини, працює з обладнанням та забезпечує багатозадачність, надаючи верхньому шару не одну, а кілька віртуальних машин, як показано на рис. 1.22. Але, на відміну від усіх

інших операційних систем, ці віртуальні машини не є розширеними. Вони не підтримують файли та інші зручності, а являють собою точні копії голою апаратури, включаючи режими ядра і користувача, введення-виведення даних, переривання і все інше, присутнє на реальному комп'ютері.Оскільки кожна віртуальна машина ідентична справжньому обладнання, а кожній з них може працювати будь-яка операційна система, яка запускається прямо на апаратурі. На різних віртуальних машинах можуть (а часто так і відбувається) функціонувати різні операційні системи. На деяких з них для обробки пакетів і транзакцій працюють нащадки OS/360, а на інших для інтерактивного поділу часу користувачів працює однокористувальницька інтерактивна система CMS (Conversational Monitor System – система діалогової обробки).

Рис. 1.22. Структура VM/370 з системою CMS

Коли програма операційної системи CMS виконує системний виклик,

він перериває операційну систему на своїй власній віртуальній машині,

а не на VM/370, як сталося б, якби він працював на реальній машині замість

віртуальної. Потім CMS видає звичайні команди введення-виведення для читання

свого віртуального диска або інші команди, які їй можуть знадобитися для

здійснити дзвінок. Ці команди введення-виведення перехоплюються VM/370,

яка виконує їх в рамках моделювання реального обладнання. При повному

поділі функцій багатозадачності та надання розширеної машини кожна частина може бути набагато простіше, гнучкіше і зручніше для обслуговування.

Ідея віртуальної машини дуже часто використовується в наші дні, але в дещо іншому контексті: Для роботи старих програм, написаних для системи MS-DOS на Pentium (або на інших 32-розрядних процесорах Intel). При розрядів розробці комп'ютера 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. На Pentium не можна запустити, скажімо, операційну систему Windows на віртуальній 8086, тому що не існує версій Windows, що працюють на цій машині. Навіть для самих старих версій Windows необхідний як мінімум 286-й процесор, а моделювання 286 не підтримується (не кажучи вже про емуляції Pentium). Однак, якщо трохи модифіковані двійковий код Windows, подібна модель стає можлива, і навіть можлива її комерційна реалізація.

Крім того, віртуальні машини використовуються, правда, дещо іншим

способом, для роботи програм Java, Коли корпорація Sun Microsystems придумала мову програмування Java, вона також розробила віртуальну машину (Тобто архітектуру комп'ютера), звану JVM (Java Virtual Machine - віртуальна машина Java). Компілятор Java видає код для JVM, який потім зазвичай виконується програмним інтерпретатором JVM. Перевага цього підходу полягає в тому, що код JVM можна передавати через Internet на будь-який комп'ютер, що має інтерпретатор JVM, і запускати там. Якби компілятор видавав виконавчі програми, наприклад, для комп'ютерів SPARC або Pentium, їх було б не можна будь-куди передати і запустити в роботу так просто, як зто відбувається з JVM. (Звичайно, компанія Sun могла б розробити компілятор, який видавав би двійкові коди SPARC, і потім використовувати Лари SPARC, але структура JVM набагато простіше для інтерпретації.) Інше перевагу JVM полягає в тому, що коли інтерпретатор реалізований належним чином, що зовсім не тривіально, що приходять jVM-програми можна перевірити в цілях безпеки і потім запустити в захищеному середовищі, так що ці програми не зможуть викрасти дані або заподіяти який-небудь іншу шкоду.