stringtranslate.com

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

В вычислительной технике виртуальная машина ( ВМ ) — это виртуализация или эмуляция компьютерной системы . Виртуальные машины основаны на компьютерной архитектуре и обеспечивают функциональность физического компьютера. Их реализация может включать специализированное оборудование, программное обеспечение или их комбинацию. Виртуальные машины различаются и организованы по своим функциям, показанным здесь:

Некоторые эмуляторы виртуальных машин, такие как QEMU и эмуляторы игровых консолей , также предназначены для эмуляции (или «виртуальной имитации») различных системных архитектур, что позволяет выполнять программные приложения и операционные системы, написанные для другого процессора или архитектуры. Виртуализация на уровне ОС позволяет разделить ресурсы компьютера через ядро . Эти термины не являются универсально взаимозаменяемыми.

Определения

Системные виртуальные машины

Первоначально Попек и Голдберг определили «виртуальную машину» как «эффективную изолированную копию реальной компьютерной машины». [1] Текущее использование включает виртуальные машины, которые не имеют прямого соответствия какому-либо реальному оборудованию. [2] Физическое «реальное» оборудование, на котором работает виртуальная машина, обычно называется «хостом», а виртуальная машина, эмулируемая на этой машине, обычно называется «гостем». Хост может эмулировать несколько гостей, каждый из которых может эмулировать разные операционные системы и аппаратные платформы.

Желание запускать несколько операционных систем было первоначальным мотивом создания виртуальных машин, чтобы обеспечить разделение времени между несколькими однозадачными операционными системами. В некотором смысле системную виртуальную машину можно считать обобщением концепции виртуальной памяти , исторически предшествовавшей ей. IBM CP/CMS , первые системы, допускающие полную виртуализацию , реализовали разделение времени , предоставив каждому пользователю однопользовательскую операционную систему, Conversational Monitor System (CMS). В отличие от виртуальной памяти, системная виртуальная машина дает пользователю право писать привилегированные инструкции в своем коде. Этот подход имел определенные преимущества, такие как добавление устройств ввода/вывода, не разрешенных стандартной системой. [2]

Поскольку технология развивает виртуальную память для целей виртуализации, новые системы избыточного выделения памяти могут применяться для управления общим использованием памяти между несколькими виртуальными машинами в одной компьютерной операционной системе. Возможно совместное использование страниц памяти с идентичным содержимым несколькими виртуальными машинами, работающими на одной физической машине, что может привести к сопоставлению их с одной и той же физической страницей с помощью метода, называемого слиянием одной страницы ядра (KSM). Это особенно полезно для страниц, доступных только для чтения, например тех, которые содержат сегменты кода, что имеет место для нескольких виртуальных машин, на которых выполняется одно и то же или похожее программное обеспечение, библиотеки программного обеспечения, веб-серверы, компоненты промежуточного программного обеспечения и т. д. Гостевым операционным системам не требуется быть совместимым с аппаратным обеспечением хоста, что позволяет запускать различные операционные системы на одном компьютере (например, Windows , Linux или предыдущие версии операционной системы) для поддержки будущего программного обеспечения. [3]

Использование виртуальных машин для поддержки отдельных гостевых операционных систем популярно в отношении встраиваемых систем . Типичным использованием будет запуск операционной системы реального времени одновременно с предпочтительной сложной операционной системой, такой как Linux или Windows. Другое применение — новое и непроверенное программное обеспечение, которое все еще находится на стадии разработки и работает в « песочнице» . Виртуальные машины имеют и другие преимущества для разработки операционных систем, включая улучшенный доступ для отладки и более быструю перезагрузку. [4]

Для консолидации серверов часто используются несколько виртуальных машин с собственной гостевой операционной системой. [5]

Обрабатывать виртуальные машины

Виртуальная машина процесса, иногда называемая виртуальной машиной приложения или управляемой средой выполнения (MRE), работает как обычное приложение внутри операционной системы хоста и поддерживает один процесс. Он создается при запуске процесса и уничтожается при выходе. Его цель — предоставить независимую от платформы среду программирования, которая абстрагирует детали базового оборудования или операционной системы и позволяет программе выполняться одинаково на любой платформе. [ нужна цитата ]

Виртуальная машина процесса обеспечивает абстракцию высокого уровня — абстракцию языка программирования высокого уровня (по сравнению с абстракцией низкого уровня ISA системной виртуальной машины). Виртуальные машины процессов реализуются с помощью интерпретатора ; производительность, сравнимая с компилируемыми языками программирования, может быть достигнута за счет использования JIT-компиляции . [ нужна цитата ]

Этот тип виртуальных машин стал популярен благодаря языку программирования Java , который реализован с помощью виртуальной машины Java . Другие примеры включают виртуальную машину Parrot и .NET Framework , которая работает на виртуальной машине под названием Common Language Runtime . Все они могут служить слоем абстракции для любого компьютерного языка. [ нужна цитата ]

Особым случаем процессных виртуальных машин являются системы, абстрагирующиеся от механизмов связи (потенциально гетерогенного) компьютерного кластера . Такая виртуальная машина состоит не из одного процесса, а из одного процесса на физическую машину в кластере. Они предназначены для облегчения задачи программирования параллельных приложений, позволяя программисту сосредоточиться на алгоритмах, а не на механизмах связи, предоставляемых межсоединением и ОС. Они не скрывают факт наличия связи и как таковые не пытаются представить кластер как единую машину. [ нужна цитата ]

В отличие от других виртуальных машин процессов, эти системы не предоставляют определенного языка программирования, а встроены в существующий язык; обычно такая система предоставляет привязки для нескольких языков (например, C и Fortran ). [ нужна цитация ] Примерами являются параллельная виртуальная машина (PVM) и интерфейс передачи сообщений (MPI).

История

И системные виртуальные машины, и виртуальные машины процессов появились в 1960-х годах и остаются областями активного развития.

Системные виртуальные машины выросли из разделения времени , что, в частности, реализовано в совместимой системе разделения времени (CTSS). Разделение времени позволяло нескольким пользователям одновременно использовать компьютер : казалось, что каждая программа имела полный доступ к машине, но одновременно выполнялась только одна программа, при этом система переключалась между программами во временных интервалах, каждый раз сохраняя и восстанавливая состояние. Это превратилось в виртуальные машины, в частности, через исследовательские системы IBM: M44/44X , в которых использовалась частичная виртуализация , а также CP-40 и SIMMON , которые использовали полную виртуализацию и были ранними примерами гипервизоров . Первой широко доступной архитектурой виртуальных машин была CP-67 /CMS ( подробности см. в разделе «История CP/CMS» ). Важным различием было использование нескольких виртуальных машин в одной хост-системе для разделения времени, как в M44/44X и CP-40, и использование одной виртуальной машины в хост-системе для прототипирования, как в SIMMON. Эмуляторы с аппаратной эмуляцией более ранних систем для совместимости восходят к IBM System/360 в 1963 году, [6] [7] , тогда как программная эмуляция (тогда называемая «симуляцией») предшествует этому.

Виртуальные машины процессов первоначально возникли как абстрактные платформы для промежуточного языка , используемого в качестве промежуточного представления программы компилятором ; ранние примеры датируются примерно 1966 годом. Примером начала 1966 года была машина O-code , виртуальная машина, которая выполняет O-код (объектный код), создаваемый внешней частью компилятора BCPL . Эта абстракция позволила легко перенести компилятор на новую архитектуру путем реализации новой серверной части , которая взяла существующий O-код и скомпилировала его в машинный код для базовой физической машины. В языке Эйлера использовалась аналогичная конструкция с промежуточным языком под названием P (переносимый). [8] Это было популяризировано примерно в 1970 году Паскалем , особенно в системе Pascal-P (1973) и компиляторе Pascal-S (1975), в котором он был назван p-кодом , а полученная машина - машиной p-кода . Это оказало большое влияние, и виртуальные машины в этом смысле часто называли машинами с p-кодом. Помимо того, что Pascal был промежуточным языком, p-код также выполнялся непосредственно интерпретатором, реализующим виртуальную машину, особенно в UCSD Pascal (1978); это повлияло на более поздние интерпретаторы, особенно на виртуальную машину Java (JVM). Другим ранним примером был SNOBOL4 (1967), который был написан на языке реализации SNOBOL (SIL), языке ассемблера для виртуальных машин, который затем был ориентирован на физические машины путем транспиляции в их родной ассемблер через макроассемблер . [9] Однако с тех пор макросы вышли из моды, поэтому этот подход стал менее влиятельным. Виртуальные машины процессов были популярным подходом к реализации раннего программного обеспечения для микрокомпьютеров, включая Tiny BASIC и приключенческие игры, от одноразовых реализаций, таких как Pyramid 2000, до движка общего назначения, такого как z-machine от Infocom , который, как утверждает Грэм Нельсон , «возможно, самая портативная виртуальная машина из когда-либо созданных». [10]

Значительные успехи произошли в реализации Smalltalk -80, [11] особенно в реализации Deutsch/Schiffmann [12] , которая продвинула JIT-компиляцию вперед как подход к реализации, использующий виртуальную машину процесса. [13] Позже известными виртуальными машинами Smalltalk были VisualWorks , виртуальная машина Squeak , [14] и Strongtalk . [15] Родственным языком, который породил множество инноваций в виртуальных машинах, был язык программирования Self , [16] который стал пионером в области адаптивной оптимизации [17] и сборки мусора по поколениям . Эти методы оказались коммерчески успешными в 1999 году на виртуальной машине HotSpot Java. [18] Другие инновации включают виртуальную машину на основе регистров, которая лучше соответствует базовому оборудованию, а не виртуальную машину на основе стека, которая больше соответствует языку программирования; в 1995 году это было впервые реализовано в виртуальной машине Dis для языка Limbo .

Полная виртуализация

Логическая схема полной виртуализации

При полной виртуализации виртуальная машина имитирует достаточно аппаратного обеспечения, чтобы позволить изолированно запускать немодифицированную «гостевую» ОС (разработанную для того же набора команд ). Этот подход был впервые использован в 1966 году в IBM CP-40 и CP-67 , предшественниках семейства VM .

Примеры за пределами области мэйнфреймов включают Parallels Workstation , Parallels Desktop для Mac , VirtualBox , Virtual Iron , Oracle VM , Virtual PC , Virtual Server , Hyper-V , VMware Fusion , VMware Workstation , VMware Server (снято с производства, ранее называлось GSX Server), VMware. ESXi , QEMU , Adeos , Mac-on-Linux, Win4BSD, Win4Lin Pro и технология Egenera vBlade.

Аппаратная виртуализация

При аппаратной виртуализации аппаратное обеспечение обеспечивает архитектурную поддержку, которая упрощает создание монитора виртуальной машины и позволяет изолированно запускать гостевые ОС. [19] Аппаратная виртуализация была впервые представлена ​​в IBM System/370 в 1972 году для использования с VM/370 , первой операционной системой виртуальных машин, предлагаемой IBM в качестве официального продукта. [20]

В 2005 и 2006 годах Intel и AMD предоставили дополнительное оборудование для поддержки виртуализации. Sun Microsystems (теперь Oracle Corporation ) добавила аналогичные функции в свои процессоры UltraSPARC T-Series в 2005 году. Примеры платформ виртуализации, адаптированных к такому оборудованию, включают KVM , VMware Workstation , VMware Fusion , Hyper-V , Windows Virtual PC , Xen , Parallels Desktop для Mac , Oracle VM Server для SPARC , VirtualBox и Parallels Workstation .

В 2006 году было обнаружено, что поддержка 32- и 64-разрядного оборудования x86 первого поколения редко обеспечивает преимущества в производительности по сравнению с программной виртуализацией. [21]

Виртуализация на уровне ОС

При виртуализации на уровне ОС физический сервер виртуализируется на уровне операционной системы, что позволяет нескольким изолированным и безопасным виртуализированным серверам работать на одном физическом сервере. Среды «гостевой» операционной системы используют тот же запущенный экземпляр операционной системы, что и хост-система. Таким образом, одно и то же ядро ​​операционной системы также используется для реализации «гостевых» сред, а приложения, работающие в данной «гостевой» среде, рассматривают ее как автономную систему. Пионерской реализацией были тюрьмы FreeBSD ; другие примеры включают Docker , Solaris Containers , OpenVZ , Linux-VServer , LXC , разделы рабочей нагрузки AIX , контейнеры Parallels Virtuozzo и виртуальные учетные записи iCore .

Смотрите также

Рекомендации

  1. ^ Попек, Джеральд Дж .; Голдберг, Роберт П. (1974). «Формальные требования к виртуализуемым архитектурам третьего поколения» (PDF) . Коммуникации АКМ . 17 (7): 412–421. дои : 10.1145/361011.361073. S2CID  12680060.
  2. ^ Аб Смит, Джеймс Э.; Наир, Рави (2005). «Архитектура виртуальных машин». Компьютер . 38 (5): 32–38, 395–396. дои : 10.1109/MC.2005.173. S2CID  6578280.
  3. ^ Олифант, Патрик. «Виртуальные машины». Виртуальные вычисления. Архивировано из оригинала 29 июля 2016 г. Проверено 23 сентября 2015 г. Некоторые люди используют эту возможность для настройки отдельной виртуальной машины под управлением Windows на Mac, предоставляя им доступ ко всему спектру приложений, доступных для обеих платформ.
  4. ^ «Сверхбыстрые перезагрузки серверов - еще одна причина успеха виртуализации» . vmwarez.com . 9 мая 2006 г. Архивировано из оригинала 14 июня 2006 г. Проверено 14 июня 2013 г.
  5. ^ «Консолидация и сдерживание серверов с помощью виртуальной инфраструктуры» (PDF) . ВМваре . 2007. Архивировано (PDF) из оригинала 28 декабря 2013 г. Проверено 29 сентября 2015 г.
  6. ^ Пью, Эмерсон В. (1995). Создание IBM: формирование отрасли и ее технологий . Массачусетский технологический институт. п. 274. ИСБН 978-0-262-16147-3.
  7. ^ Пью, Эмерсон В .; и другие. (1991). Системы IBM 360 и Early 370 . Массачусетский технологический институт. стр. 160–161. ISBN 978-0-262-16123-7.
  8. ^ Вирт, Никлаус Эмиль ; Вебер, Гельмут (1966). ЭЙЛЕР: обобщение АЛГОЛА и его формальное определение: Часть II, Сообщения Ассоциации вычислительной техники. Том. 9. Нью-Йорк: ACM . стр. 89–99.
  9. ^ Грисволд, Ральф Э. Макрореализация SNOBOL4 . Сан-Франциско, Калифорния: WH Freeman and Company, 1972 ( ISBN 0-7167-0447-1 ), Глава 1. 
  10. ^ Нельсон, Грэм А. «О переводчиках». Информируйте сайт . Архивировано из оригинала 3 декабря 2009 г. Проверено 7 ноября 2009 г.
  11. ^ Гольдберг, Адель ; Робсон, Дэвид (1983). Smalltalk-80: Язык и его реализация . Серия Аддисона-Уэсли по информатике. Аддисон-Уэсли . ISBN 978-0-201-11371-6.
  12. ^ Дойч, Л. Питер ; Шиффман, Аллан М. (1984). «Эффективное внедрение системы Smalltalk-80». ПОПЛ . Солт-Лейк-Сити, Юта: ACM. дои : 10.1145/800017.800542. ISBN 0-89791-125-3.
  13. ^ Эйкок, Джон (2003). «Краткая история системы «точно в срок». АКМ Компьютер. Выж. 35 (2): 97–113. дои : 10.1145/857076.857077. S2CID  15345671.
  14. ^ Ингаллс-младший, Дэниел «Дэн» Генри Холмс ; Кэлер, Тед; Мэлони, Джон; Уоллес, Скотт; Кей, Алан Кертис (1997). «Назад в будущее: история Squeak, практического Smalltalk, написанного сам по себе». OOPSLA '97: Материалы 12-й конференции ACM SIGPLAN по объектно-ориентированному программированию, системам, языкам и приложениям . Нью-Йорк, штат Нью-Йорк, США: ACM Press. стр. 318–326. дои : 10.1145/263698.263754. ISBN 0-89791-908-4.
  15. ^ Браха, Гилад ; Грисволд, Дэвид (1993). «Strongtalk: проверка типов Smalltalk в производственной среде». Материалы восьмой ежегодной конференции по системам, языкам и приложениям объектно-ориентированного программирования . УПСЛА '93. Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 215–230. дои : 10.1145/165854.165893 . ISBN 978-0-89791-587-8.
  16. ^ Ангар, Дэвид Майкл ; Смит, Рэндалл Б. (декабрь 1987 г.). «Я: сила простоты». Уведомления ACM SIGPLAN . 22 (12): 227–242. дои : 10.1145/38807.38828. ISSN  0362-1340.
  17. ^ Хёльцле, Урс ; Унгар, Дэвид Майкл (1994). «Оптимизация динамически отправляемых вызовов с обратной связью по типу во время выполнения». ПЛДИ . Орландо, Флорида, США: ACM. стр. 326–336. дои : 10.1145/178243.178478. ISBN 0-89791-662-Х.
  18. ^ Палечный, Майкл; Вик, Кристофер; Клик, Клифф (2001). «Компилятор сервера Java HotSpot». Материалы Симпозиума по исследованиям и технологиям виртуальных машин Java на Симпозиуме по исследованиям и технологиям виртуальных машин Java . Том. 1. Монтерей, Калифорния: Ассоциация USENIX.
  19. ^ Улиг, Рич; Нейгер, Гил; Роджерс, Дион; Сантони, Эми Л.; Мартинс, Фернандо КМ; Андерсон, Эндрю В.; Беннетт, Стивен М .; Кяги, Ален; Люнг, Феликс Х.; Смит, Ларри (май 2005 г.). «Технология виртуализации Intel». Компьютер . 38 (5): 48–56. дои : 10.1109/MC.2005.163. S2CID  18514555.
  20. ^ Рэндал, А. (2019). Идеальное против реального: пересмотр истории виртуальных машин и контейнеров.
  21. ^ Адамс, Кейт; Агесен, Оле (21 октября 2006 г.). Сравнение программных и аппаратных методов виртуализации x86 (PDF) . ASPLOS'06 21–25 октября 2006 г. Сан-Хосе, Калифорния, США. Архивировано (PDF) из оригинала 20 августа 2010 г. Удивительно, но мы обнаружили, что аппаратная поддержка первого поколения редко обеспечивает преимущества в производительности по сравнению с существующими программными технологиями. Мы связываем эту ситуацию с высокими затратами на переход между VMM и гостевой системой и жесткой моделью программирования, которая оставляет мало места для гибкости программного обеспечения в управлении частотой и стоимостью этих переходов.

дальнейшее чтение

Внешние ссылки