Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Виртуальные машины различаются и организованы по функциям, показанным здесь:

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

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

Определения [ править ]

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

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

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

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

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

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

Обработка виртуальных машин [ править ]

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

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

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

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

Полная виртуализация [ править ]

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

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

Примеры за пределами области мэйнфреймов включают Parallels Workstation , Parallels Desktop для Mac , VirtualBox , Virtual Iron , Oracle VM , Virtual PC , Virtual Server , Hyper-V , 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 в 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 jails ; другие примеры включают Docker , Solaris Containers , OpenVZ , Linux-VServer , LXC , AIX Workload Partitions., Parallels Virtuozzo Containers и виртуальные учетные записи iCore .

См. Также [ править ]

  • Образ машины Amazon
  • Контейнеры Linux
  • Родной комплект разработчика
  • Паравиртуализация
  • Гипервизор хранилища
  • Универсальная машина Тьюринга
  • Виртуальное устройство
  • Виртуальное устройство резервного копирования
  • Образ виртуального диска
  • Виртуальная машина DOS (VDM)
  • Побег на виртуальной машине

Ссылки [ править ]

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

Дальнейшее чтение [ править ]

  • Джеймс Э. Смит, Рави Наир, Виртуальные машины: универсальные платформы для систем и процессов , Морган Кауфманн, май 2005 г., ISBN 1-55860-910-5 , 656 страниц (охватывает как процессные, так и системные виртуальные машины) 
  • Крейг, Иэн Д. Виртуальные машины . Springer , 2006, ISBN 1-85233-969-1 , 269 страниц (охватывает только виртуальные машины процессов) 

Внешние ссылки [ править ]

  • Мендель Розенблюм (31 августа 2004 г.). «Реинкарнация виртуальных машин» . Очередь ACM . Vol. 2 шт. 5.
  • Sandia National Laboratories использует 1 миллион ядер Linux в качестве виртуальных машин
  • Дизайн виртуальной машины Inferno Филом Винтерботтомом и Робом Пайком