<
  • Главная
Статьи

Віртуалізація додатків: Історія появи і перспективи подальшого розвитку

  1. Зв'язок з Тімом
  2. Порівняння віртуалізації платформ з виртуализацией додатків
  3. Поява віртуальних машин
  4. Малюнок 1. Віртуальна машина, що забезпечує незалежність додатків від платформи
  5. Історія віртуальних машин
  6. BCPL тоді і сьогодні
  7. Поточний стан технології віртуальних машин
  8. Віртуальна машина Dalvik
  9. Малюнок 2. Архітектура стека ПО віртуальної машини Dalvik
  10. Parrot
  11. Малюнок 3. Архітектура віртуальної машини Parrot
  12. Лістинг 1. Приклад PASM-програми
  13. Лістинг 2. Приклад PIR-програми
  14. Інші способи застосування віртуалізації додатків
  15. висновок
  16. Ресурси для скачування

Знайомство c виртуализацией додатків

Зв'язок з Тімом

Тім є одним з найбільш популярних авторів порталу developerWorks. ознайомтеся з іншими статтями , Написаними Тімом для developerWorks. Загляньте в профайл Тіма , Щоб зв'язатися з ним, а також спілкуйтеся з іншими авторами та розробниками в співтоваристві developerWorks .

Порівняння віртуалізації платформ з виртуализацией додатків

Перші віртуальні машини (ВМ) (virtual machines - VM) були створені компанією IBM 60 років тому, як спосіб забезпечити безлічі користувачів спільний доступ до великих дорогим мейнфреймам. Хоча ця концепція досі застосовується в продуктах, що випускаються компанією IBM, значення самого терміна "віртуальна машина" стало значно ширше, і сьогодні він зустрічається і в інших областях, а не тільки в області віртуалізації.

Поява віртуальних машин

Операційна система CMS (conversational monitor system - система діалогового монітора) була першою ОС з повною підтримкою віртуалізації для ВМ. ОС CMS підтримувала повну віртуалізацію і паравіртуалізацію. На початку 70-их років IBM представила сімейство віртуальних машин, які могли запускати безліч розрахованих на одного користувача операційних систем поверх VMCP (VM control program - програма управління ВМ) - першої реалізації гипервизора.

У 60-ті роки IBM займалася розвитком віртуалізації платформ (або систем). Цей тип віртуалізації характеризується тим, що нижележащих апаратна платформа віртуалізується, щоб забезпечити одночасний доступ до неї для безлічі користувачів і операційних систем.

Інший варіант використання ВМ забезпечує стан, при якому віртуальні системи не залежать один від одного. Цей тип віртуалізації називається виртуализацией додатків (або процесів), і в ньому для додатка створюється абстрактна "середовище", роблячи його незалежним від апаратного оточення.

При віртуалізації додатків віртуальні машини використовуються, щоб забезпечити апаратно-незалежну середу для виконання додатків. Приклад такої віртуальної машини показаний на малюнку 1. У верхній частині розташовується високорівнева мова, яка використовується розробниками для створення додатків. За допомогою компіляції код, написаний на високорівневої мовою, перетворюється в проміжне представлення, так званий об'єктний код. У звичайному середовищі об'єктний код (незалежний від апаратного забезпечення) компілюється в бінарний машинний код для виконання на апаратній платформі. У віртуальному середовищі об'єктний код відразу інтерпретується абстрактної машиною з метою виконання. Ключовою перевагою подібного підходу є те, що об'єктний код можна запускати на будь-якій апаратній платформі, яка підтримує абстрактну машину (інтерпретатор).

Малюнок 1. Віртуальна машина, що забезпечує незалежність додатків від платформи
Знайомство c виртуализацией додатків   Зв'язок з Тімом   Тім є одним з найбільш популярних авторів порталу developerWorks

Крім створення яку переносять середовища для запуску об'єктного коду, віртуалізація додатків надає середовище, що дозволяє ізолювати ВМ від інших додатків, запущених на цій же системі. Ця можливість забезпечує додаткові переваги, наприклад, розширене управління ресурсами і підвищений рівень безпеки.

В об'єктному коді ВМ, також званому байт-кодом (bytecode), визначений набір інструкцій, які будуть виконуватися інтерпретатором. Термін байт-код виник завдяки реалізаціям, в яких віртуальні інструкції для більшої простоти і продуктивності представлялися у вигляді окремих байтів.

У наступних розділах статті розповідається про те, як віртуалізація додатків застосовувалася раніше, і яка область застосування відводиться їй сьогодні.

Історія віртуальних машин

Один з перших випадків використання віртуалізації додатків був зафіксований в 60-их роках минулого століття в продукті BCPL (Basic Combined Programming Language). Мова BCPL - це імперативний мову програмування, розроблений Мартіном Річардсом (Martin Richards) в Кембриджському Університеті. Ця мова була попередником мови B, який згодом розвинувся в мову C, що не потребує уявлення.

BCPL тоді і сьогодні

Хоча мова BCPL з'явився в 1966 році, але завдяки Мартіну Річардса він продовжує розвиватися і сьогодні. Перший BCPL-компілятор був написаний для системи IBM7094 під управлінням ОС CTSS (Compatible Time Sharing System), однією з перших операційних систем з поділом часу. Сьогодні BCPL можна використовувати на самих різних системах, включаючи Linux.

Хоча BCPL - це високорівнева мова (також, як і мова С), але проміжний код, що генерується компілятором, був названий О-кодом (об'єктним кодом). О-код може інтерпретуватися на апаратній платформі (наприклад, за допомогою віртуальної машині) або компілюватися в "рідній" машинний код цільової системи. Ця можливість забезпечує додаткові переваги з точки зору незалежності від апаратної складової. По-перше, завдяки абстрагування О-коду від "матеріальної" складової, він може інтерпретуватися на різних платформах. По-друге, О-код може бути скомпільований в "рідній" машинний код, що дозволяє створити один компілятор для створення О-коду і безліч компіляторів для трансляції О-коду в специфічний машинний код (це спрощує постановку і реалізацію завдання). Незалежність від платформ робить мову BCPL стерпним між різними системами, що забезпечує його доступність на самих різних платформах.

На початку 70-их років минулого століття в Університеті Каліфорнії в Сан-Дієго був розроблений спосіб виконання скомпільованого коду на мові Pascal за допомогою віртуальної машини. Це проміжне представлення, яке називається p-код (p-code), дозволяло абстрагуватися від нижчого апаратного забезпечення, що спрощувало розробку компіляторів для мови Pascal (замість використання архітектури на основі абстрактного псевдо-комп'ютера). Мова Forth також використовував віртуальні машини, а саме архітектури з адресацією нульового рівня або засновані на стеку.

У 1972 лабораторія PARC компанії Xerox представила мову Smalltalk, в якому для виконання також використовувалася віртуальна машина. Smalltalk був одним з перших мов, побудованих на об'єктної моделі. Мова Smalltalk і p-code мали значний вплив на Java - один з найвідоміших на сьогодні мов програмування, також заснований на віртуальній машині. Мова Java, розроблений компанією Sun Microsystems, вперше з'явився в 1995 році і розвинув ідею мульти-платформної програмування за допомогою віртуальної Java-машини (Java Virtual Machine - JVM). З того часу технологія Java є фундаментальним компонентом корпоративних додатків. Від сценаріїв на стороні сервера до аплетів на стороні клієнта, технологія Java сприяла популяризації технологій на основі віртуальних машин і впроваджувала нові підходи, які б поєднували інтерпретацію і виконання "рідного" машинного коду за допомогою JIT-компіляції (just-in-time - точно в термін) .

В інших мовах програмування також використовуються віртуальні машини. Мова Erlang, розроблений компанією Ericsson, використовує віртуальну машину для запуску Erlang-байт-коду та інтерпретації вихідного коду Erlang у вигляді дерева абстрактного синтаксису. Спрощений мова Lua, розроблений в Католицькому Університеті Ріо-де-Жанейро, включає в себе віртуальну машину на основі регістрів. При запуску Lua-програми, вона транслюється в байт-коди, які потім виконуються у віртуальній машині. Далі в статті буде розглянуто стандарт байт-коду, який може використовуватися для будь-якої мови.

Поточний стан технології віртуальних машин

Класичний варіант використання віртуальної машини для абстрагування від апаратної складової в процесі розвитку охопив і область віртуалізації додатків. У цьому розділі розглядаються сучасні рішення open-source, які, можливо, визначать напрямки для подальшого розвитку віртуальних машин.

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

Віртуальна машина Dalvik - це технологія open-source, розроблена компанією Google для операційної системи Android. Android - це модифіковане ядро ​​Linux, що включає стек ПО для мобільних пристроїв (див. Рисунок 2). На відміну від інших віртуальних машин, що використовують архітектуру на основі стека, в Dalvik використовується архітектура на основі регістрів (в розділі ресурси приведена додаткова інформація про архітектуру Dalvik і наборі інструкцій). Хоча архітектури, засновані на стеку, більш прості й ефективні, вони можуть привести до нових труднощів, наприклад, до збільшення розміру програм через необхідність підтримки стека.

Малюнок 2. Архітектура стека ПО віртуальної машини Dalvik

Так як Dalvik забезпечує віртуалізацію додатків, то він залежить від високорівневого мови, який компілюється в байт-код, який розуміється віртуальною машиною. Замість того, щоб в черговий раз винаходити колесо, Dalvik як високорівневого мови для розробки додатків використовує мову Java. Також в цій технології є спеціальний інструмент dx для конвертації Java-класів в виконувані модулі для Dalvik ВМ. Для підвищення продуктивності віртуальна машина Dalvik додатково оптимізує виконувані (dex) модулі, використовуючи JIT-компіляцію, яка переводить dex-інструкції в "рідній" машинний код. Подібний процес називається "динамічної трансляцією" і є одним із способів підвищення продуктивності віртуальних машин.

Як показано на малюнку 2 , Виконуваний dex-модуль разом з екземпляром віртуальної машини ізолюються в окремому процесі в просторі користувача Linux. Віртуальна машина Dalvik спроектована так, щоб підтримувати одночасне виконання декількох віртуальних машин в незалежних процесах.

Технологія Dalvik VM не використовує стандартну середу виконання Java і тому не пов'язана відповідними ліцензійними обмеженнями. Завдяки тому, що Dalvik є незалежним додатком, ця технологія поширюється під ліцензією Apache 2.0.

Parrot

Parrot - це ще один цікавий проект в області віртуалізації додатків. Технологія Parrot - це віртуальна машина, заснована на регістрах і спроектована для ефективного виконання динамічних мов. Особливість динамічних мов полягає в тому, що дії, звичайно що виконуються на етапі компіляції, наприклад, модифікація системи типів, виконуються безпосередньо під час роботи програми.

Спочатку Parrot був спроектований як середовище виконання для Perl 6, але його гнучка архітектура допускає запуск байт-кодів та інших мов, як показано на малюнку 3. Parrot може приймати вхідні дані в декількох форматах

  • PAST - абстрактне синтаксичне дерево (Parrot Abstract Syntax Tree), що застосовується при написанні компіляторів;
  • PIR - проміжне представлення (Parrot Intermediate Representation), високорівнева код, який може бути написаний як людиною, так і компілятором в автоматичному режимі;
  • PASM - збірка (Parrot Assembly), розташована нижче рівня PIR, але підходить для використання користувачам і компіляторам.

Кожен з цих форматів транслюється в байт-код Parrot і виконується віртуальною машиною Parrot.

Малюнок 3. Архітектура віртуальної машини Parrot

Parrot підтримує велику кількість мов, але особливо цікава його можливість підтримувати одночасно статичні і динамічні мови, включаючи спеціальну підтримку функціональних мов. У лістингу 1 наведено приклад використання PASM. Для установки Parrot в дистрибутиві Ubuntu використовується команда apt-get:

sudo apt-get install parrot

У лістингу 1 наведено приклад програми Parrot для маніпуляції рядками. Хоча Parrot виконує цей код як окрему збірку, він більш функціональний, ніж звичайні збірки. Інструкції Parrot використовують синтаксис dest.src, тому в лістингу 1 показується, як текст завантажується в строковий регістр. Інструкція length визначає довжину рядка і завантажує її в цілочисельний регістр. Інструкція print виводить значення аргументу в стандартний потік виводу (stdout), а інструкція concat виконує злиття рядків.

Лістинг 1. Приклад PASM-програми

$ More test.pasm set S1, "Parrot" set S2, "VM" length I1, S1 print I1 print "\ n" concat S3, S1, S2 print S3 print "\ n" end $ parrot test.pasm 6 ParrotVM $

В розділі ресурси наведено посилання на повний набір інструкцій Parrot. Автори Parrot віддали перевагу мінімалізму багатий вибір функцій, тому при створенні компіляторів для віртуальної машини Parrot зазвичай не виникає ніяких складнощів.

Незважаючи на те, що в PASM використовуються високорівневі абстракції, PIR-програми ще більш зручні для програмістів, що використовують мови високого рівня. У лістингу 2 наведено приклад програми, написаної в PIR і виконуваної в віртуальній машині Parrot. У цьому прикладі оголошує підпрограма square, що обчислює квадратний корінь числа і повертає його. Цей процес викликається підпрограмою main, яка спеціально виділена ідентифікатором: main, щоб Parrot запустив її першої. Підпрограма main виведе результат роботи PIR-програми.

Лістинг 2. Приклад PIR-програми

$ More test.pir .sub square .param int arg arg * = arg .return (arg) .end .sub main: main .local int value value = square (19) print value print "\ n" .end $ parrot test .pir 361 $

Parrot надає середу з широкими можливостями для віртуалізації додатків, яка може використовуватися для розробки високоефективних додатків, не прив'язаних до конкретних платформ. Велика кількість мов програмування, включаючи С, Lua, Python, Scheme і Smalltalk, підтримують спеціальні надбудови для своїх компіляторів, що дозволяють генерувати код для віртуальної машини Parrot.

Інші способи застосування віртуалізації додатків

У статті були описані відомі приклади віртуалізації додатків, включаючи новітні розробки. Dalvik - це потужне середовище для розробки додатків для сучасних мобільних пристроїв, a Parrot пропонує зручне середовище для програмістів, що розробляють компілятори для статичних і динамічних мов. Але ідея віртуалізації додатків знайшла застосування і в інших областях, що не згадувалися раніше.

Один з перспективних способів використання віртуалізації додатків, можливо, працює прямо зараз на вашому комп'ютері. Системи, що використовують новий стандарт EFI (Extensible Firmware Interface - розширюваний інтерфейс для микрокода), який повинен замінити BIOS, можуть використовувати драйвери, в яких викликається EBC (EFI Byte Code - EFI-байт-код). Мікрокод комп'ютера включає в себе інтерпретатор, який викликається при завантаженні образу EBC. Ця ідея також реалізована в технології Open Firmware, розробленої компанією Sun Microsystems, в якій використовується мова Forth, що включає власну віртуальну машину.

Віртуалізація додатків успішно застосовується в галузі комп'ютерних ігор. Багато сучасні ігри використовують сценарії, написані на мовах, які виконують байт-коди (наприклад, Lua), для управління поведінкою неігрових персонажів і іншими аспектами гри. Але сама ідея застосувати віртуалізацію додатків в комп'ютерних іграх виникла набагато раніше.

Компанія Infocom, яка розробляла текстові пригодницькі ігри, наприклад Zork, оцінила перспективи мультіплатформенності ще в 1979 році. Infocom створила віртуальну машину Z-machine, названу на честь гри Zork. Ця віртуальна машина полегшувала перенесення ігор на інші архітектури. Замість міграції всієї гри на нову платформу досить було перенести на потрібну платформу тільки інтерпретатор, який представляє Z-machine. Ця можливість значно спростила процес перенесення ігор на інші системи, які могли підтримувати інші мови або взагалі мати абсолютно іншу архітектуру. Хоча завданням Infocom було полегшити міграцію додатків між платформами, що існували в той момент, ця робота була продовжена, і в кінці зробила можливим запуск старих ігор на новому поколінні платформ, включаючи мобільні.

Іншим прикладом використання віртуальних машин в галузі комп'ютерних ігор може служити проект ScummVM, що надає віртуальне середовище виконання для мови SCUMM (Script Creation Utility for Maniac Mansion - утиліта для створення сценаріїв), розробленого в 1987 році в компанії LucasArts для спрощення процесу розробки пригодницьких ігор. Сьогодні ScummVM використовується на різних платформах для запуску великої кількості текстових і графічних пригодницьких ігор.

висновок

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

Ресурси для скачування

Схожі тими

  • Application virtualization, past and future : Оригінал статті (EN).
  • Ознайомтеся зі статтей, присвячений віртуалізації и іншімі статтей Тіма , Представлених на порталі developerWorks.
  • У Wikipedia представлені безліч статей, что дозволяють дізнатіся более про віртуальніх машинах для віртуалізації платформ и Додатків. на странице virtual machines приведена інформація про віртуальніх машинах, а в статті p-code machines розповідається про p-code машинах.
  • Мова BCPL, попередники мов програмування B і С, БУВ розроблення в 1967 году Мартіном Річардсом. На сайті Project Mac можна Прочитати керівництво Опис BCPL reference manual для Першої Версії BCPL. Такоже можна скачать потокової версию BCPL з сайту проекту .
  • В технології EBC визначається інтерпретує рівень для переносяться драйверів компонентів. Додаткову інформацію про технології EBC і UEFI можна знайти в статті Boot Loaders: Small, Fast System Initialization (Dr. Dobb's, вересень 2010).
  • Хоча технологія Forth з'явилася в 70-их роках, вона як і раніше використовується в якості мови для віртуальних машин. Forth застосовується в космічній галузі, вбудованих системах, BIOS і інших додатках, що працюють на обмежених ресурсах. Додаткову інформацію про Forth можна знайти на Web-сайті Forth Interest Group .
  • Слідкуйте за публікаціями developerWorks в Твіттері , Підпишіться на канал твітів по Linux на developerWorks або приєднуйтесь до облікового запису Тіма на Твіттер .
  • Dalvik - це віртуальне середовище виконання для операційної системи Android. Ця технологія була розроблена Деном Борнстейн (Dan Bornstein) і підтримується Google як один з компонентів Android. Додаткову інформацію про Dalvik і його байт-коди можна знайти в документації користувача . Також можна прочитати про цю технологію в статті Introduction to Android development (Frank Ableson, developerWorks, травень 2009).
  • Parrot - це віртуальна машина, спроектована для ефективного виконання статичних і динамічних мов за допомогою різних проміжних реалізацій на основі байт-коду Parrot. Технологія Parrot відноситься до open-source ПО і може застосовуватися з великою кількістю мов. Додаткову інформацію про набір інструкцій, доступних в Parrot, можна отримати на Web сторінці .
  • Віртуалізація додатків також популярна і в області розробки комп'ютерних ігор. Один з перших прикладів використання віртуалізації додатків був представлений компанією Infocom в своїх текстових пригодницьких іграх (наприклад, Zork). За вказаними посиланнями можна дізнатися більше про віртуальній машині Infocom - Z-machine и інтерпретатора , Існуючих для різних платформ. Інший приклад використання віртуальних машин для розробки комп'ютерних ігор - проект Scumm , Використаний в графічних пригодницьких іграх компанії LucasArts. Scumm реалізований у вигляді open-source проекту ScummVM , Який дозволяє запускати старі ігри на сучасних платформах.

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів



Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью