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