Полная эмуляция против полной виртуализации - PullRequest
27 голосов
/ 18 мая 2011

При полной эмуляции виртуальные устройства ввода-вывода, ЦП, основная память. Гостевая операционная система будет обращаться к виртуальным устройствам, а не к физическим устройствам. Но что такое полная виртуализация? Это то же самое, что полная эмуляция или что-то совершенно другое?

Ответы [ 7 ]

29 голосов
/ 18 мая 2011

Эмуляция и виртуализация связаны, но не совпадают.

Эмуляция использует программное обеспечение для обеспечения другой среды исполнения или архитектуры. Например, у вас может быть запущен эмулятор Android на Windows. Windows-бокс не имеет того же процессора, что и устройство Android, поэтому эмулятор фактически выполняет приложение Android через программное обеспечение.

Виртуализация - это больше создание виртуальных барьеров между несколькими виртуальными средами, работающими в одной физической среде. Большая разница в том, что виртуализированная среда - это та же архитектура. Виртуализированное приложение может предоставлять виртуализированные устройства, которые затем транслируются на физические устройства, и хост виртуализации имеет контроль над тем, какая виртуальная машина имеет доступ к каждому устройству или части устройства. Фактическое выполнение чаще всего все еще выполняется изначально, но не через программное обеспечение. Поэтому производительность виртуализации обычно намного лучше, чем эмуляция.

Существует также отдельная концепция виртуальной машины, например, для тех, которые используют Java, .NET или Flash-код. Они могут варьироваться от одной реализации к другой и могут включать в себя аспекты эмуляции или виртуализации, или и то, и другое. Например, JVM предоставляет механизм для выполнения байтовых кодов Java. Однако спецификация JVM не предписывает, что байтовые коды должны выполняться программным обеспечением или что они должны быть скомпилированы в собственный код. Каждая JVM может делать свое дело, и на самом деле большинство JVM сочетают как использование эмуляции, где это необходимо, так и использование JIT, где это необходимо (JITM Hotspot, как мне кажется, это то, что называется для JVM Sun / Oracle).

4 голосов
/ 18 мая 2011

При полной эмуляции виртуальные устройства ввода-вывода, ЦП, основная память.

Нет, они эмулируются в программном обеспечении. Эмуляция означает, что их поведение полностью копируется в программном обеспечении.

Но что такое полная виртуализация?

При виртуализации вы пытаетесь запустить как можно больше кода на аппаратном обеспечении, чтобы ускорить процесс. Это особенно проблема с кодом, который должен был выполняться в режиме ядра , поскольку это может потенциально изменить глобальное состояние хоста (машина, на которой работает Hypervisor или VMM ) и тем самым влияют на другие виртуальные машины.

1 голос
/ 28 ноября 2016

Без эмуляции или виртуализации код выполняется непосредственно на оборудовании.Его инструкции выполняются непосредственно ЦП, а его доступ к вводу / выводу напрямую обращается к аппаратному обеспечению.


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

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

Аппаратная поддержка виртуализации (, как у Intel иОтдельные расширения для виртуализации x86 от AMD ) позволяют гостю делать вещи, которые обычно влияют на всю машину, например изменять отображения памяти в таблице страниц.Таким образом, вместо того, чтобы вызывать выход из виртуальной машины и заставлять виртуальную машину выяснить, что делал гость, а затем изменять что-то извне для достижения результата, в CPU просто встроен дополнительный слой трансляции.более качественное, но более длинное описание программной виртуализации и аппаратной виртуализации.)


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

Эмулятор ARM, работающий наХост x86 всегда должен работать таким образом, потому что аппаратное обеспечение хоста не может выполнять инструкции ARM.

Но вы все равно можете, например, эмулировать гостевую систему x86 на хосте x86.Тот факт, что гостевая и хост-архитектура совпадают, не означает, что эмулятор должен использовать этот факт.


Например, BOCHS - это эмулятор ПК x86 , написанный на переносном языке.C ++.Одним из его основных применений является отладка загрузчиков и ОС.

BOCHS не волнует, работает он на хосте x86 или нет.Это просто программа на C ++, которая читает двоичные файлы (образы дисков) и рисует в окне (содержимое гостевой видеопамяти).Что касается хоста, то он не особенно отличается от просмотра JPG или игры.

Некоторые эмуляторы используют двоичную трансляцию для JIT-компиляции гостевого кода в код хоста, но это все же эмуляция, а не виртуализация,См. http://wiki.osdev.org/Emulator_Comparison.

BOCHS относительно медленный, поскольку он читает и декодирует гостевые инструкции напрямую, без выполнения двоичного перевода.Но он пытается сделать это максимально эффективно.См. Как Bochs работает под капотом , чтобы узнать о некоторых приемах, которые он использует для эффективного отслеживания состояния гостя.Поскольку эмуляция является единственным вариантом запуска программного обеспечения x86 на оборудовании, отличном от x86, полезно иметь высокопроизводительный эмулятор.В BOCHS работают несколько очень умных и опытных разработчиков эмуляторов, в частности Дарек Михока, у которого есть несколько интересных статей об оптимизации эмуляции на своем сайте .

1 голос
/ 24 октября 2012

Это попытка ответить на мой собственный вопрос.

Виртуализация системы: понимание виртуализации ввода-вывода и роли гипервизора

Виртуализация

Виртуализация какконцепция позволяет сосуществовать нескольким / разнородным приложениям на одном и том же базовом оборудовании, не зная друг друга.

Например, полнофункциональные операционные системы, такие как Windows, Linux, Symbian и т. д. вместе с их приложениями могутсосуществовать на той же платформе.Все вычислительные ресурсы виртуализированы.

Это означает, что ни одна из вышеупомянутых машин не имеет доступа к физическим ресурсам.Единственным объектом, имеющим доступ к физическим ресурсам, является программа, известная как Virtual Machine Monitor (также известный как Hypervisor).

Теперь это важно.Пожалуйста, прочитайте и перечитайте внимательно.

Гипервизор предоставляет виртуальную среду для каждой из вышеперечисленных машин.Поскольку эти машины не обращаются к физическому оборудованию, НО виртуализированному оборудованию, они известны как виртуальные машины.

Например, ядро ​​Windows может захотеть запустить физический таймер (системный ресурс).Предположим, что таймер является отображенным в память IO.Ядро Windows выдает серию инструкций загрузки / сохранения по адресам таймера.В не виртуализированной среде эти загрузка / хранение привели бы к программированию аппаратного обеспечения таймера.

Однако в виртуализированной среде такой доступ к физическим ресурсам на основе загрузки / хранения приведет к прерыванию / отказу.Ловушка обрабатывается гипервизором.Гипервизор знает, что Windows пыталась запрограммировать таймер.Гипервизор поддерживает структуры данных Timer для каждой виртуальной машины.В этом случае гипервизор обновляет структуру данных таймера, созданную для Windows.Затем он программирует реальный таймер.Любое прерывание, сгенерированное таймером, сначала обрабатывается гипервизором.Структуры данных виртуальных машин обновляются и вызываются подпрограммы обработки прерываний последней.

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

Таким образом, все виртуальные машины думают, что они получают доступ к базовому оборудованию;В действительности им неизвестно, что все обращения к физическому оборудованию осуществляются гипервизором.

Все, что описано выше, является полной / классической виртуализацией.Большинство современных процессоров непригодны для классической виртуализации.Ловушка / ошибка не распространяется на все инструкции.Так что гипервизор легко обходит на современных устройствах.

Вот здесь и возникает паравиртуализация.Чувствительные инструкции в исходном коде виртуальных машин заменяются вызовом гипервизора.Приведенный выше фрагмент загрузки / сохранения может быть заменен вызовом, например

Hypervisor_Service(Timer Start, Windows, 10ms); 

EMULATION

Эмуляция - это тема, связанная с виртуализацией.Представьте себе сценарий, в котором программа, изначально скомпилированная для ARM, предназначена для работы на процессоре ATMEL.ЦП ATMEL запускает программу эмулятора, которая интерпретирует каждую инструкцию ARM и эмулирует необходимые действия на платформе ATMEL.Таким образом, эмулятор предоставляет виртуализированную среду.

В этом случае виртуализация системных ресурсов НЕ выполняется через модель прерывания и выполнения.

0 голосов
/ 23 июля 2018

Виртуализация и эмуляция - это почти одно и то же. Существует одна основная концепция, на которую намекают эти два слова. То есть эти два слова являются аспектами одной вещи. Это продемонстрировано в QEMU , эмуляторе Quick , который выполняет аппаратную виртуализацию .

Вы можете думать об этом как о симуляции. Хотя симуляция также может быть запутанным словом.

Сначала мы можем определить общее значение слов.

  • Симуляция : заставить одну вещь делать то же, что и другая.
  • Эмуляция : Создание одной системы точно копирует другую систему.
  • Виртуализация : разрешить запуск системы в другой системе.

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

Итак, мы можем видеть, что слова несколько взаимозаменяемы. Основной концепцией является симуляция.

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

В эмуляции обычно подразумевается, что симуляция является "точной". В аппаратной эмуляции вы копируете все функции аппаратной системы. Это означает, что вы создали симуляцию оборудования. Можно сказать, что вы создали виртуализацию оборудования, но здесь виртуализация немного отличается. Виртуализация подразумевает создание изолированной среды, что не обязательно подразумевает эмуляция. Таким образом, аппаратный эмулятор может обеспечивать тот же интерфейс для аппаратного обеспечения, что и само оборудование, но реализация эмулятора может основываться на глобальной памяти, поэтому, если вы попытаетесь запустить два эмулятора одновременно, они будут мешать друг другу. Это то, что решает виртуализация, она изолирует симуляции.

Надеюсь, это поможет.

0 голосов
/ 29 марта 2018

Виртуализация может происходить на разных уровнях архитектуры компьютера: (от высшего к низшему): 1: приложение, 2: библиотека, 3: операционная система, 4: аппаратная абстракция (HAL), 5: архитектура набора инструкций (ЭТО).Ниже последнего слоя находится Аппаратное обеспечение.Как правило, определенный уровень использует службы более низкого уровня, используя инструкции, которые нижний уровень предоставляет в своем интерфейсе.
Обратите внимание, что использование службы не связано строго с многоуровневой структурой, в том смысле, что определенные уровни могут сразу пропустить уровень.ниже и используйте инструкцию от более низких уровней.В качестве примера, Приложения могут предоставлять определенные инструкции непосредственно уровню HAL, пропуская уровни Библиотеки и ОС.

«Эмулировать инструкцию» означает перехватывать и отображать инструкцию, предназначенную для определенного уровня компьютерной архитектуры.(виртуальный) в последовательность (одну или несколько) инструкций для одного и того же уровня другой компьютерной архитектуры (не виртуальной).Уровень виртуализации можно разместить на разных уровнях архитектуры компьютера.Этот момент может ввести в заблуждение.Например, при виртуализации на уровне уровня аппаратной абстракции (например, VMware, VirtualBox) между уровнем HAL и уровнем операционной системы размещается виртуальный уровень.Операционная система использует инструкции уровня виртуального HAL, затем гипервизор сопоставляет некоторые виртуальные ISA (архитектура набора инструкций) с физической системой для ISA.Когда ВСЕ инструкции эмулируются, мы говорим о полной эмуляции, которая является частным случаем виртуализации.В виртуализации типично мы пытаемся сделать слой для непосредственного выполнения инструкций не виртуального уровня в максимально возможной степени из соображений производительности.В другом примере уровень виртуализации размещается над Оперативной системой (виртуализация на уровне оперативной системы): в этом случае виртуальная машина называется Контейнером (например, Docker).Он включает в себя уровни от Приложения до ОС (включены).

В заключение, эмуляция связана с одной инструкцией, в то время как «полная эмуляция» происходит, когда мы перехватываем и отображаем ВСЕ инструкции определенного уровня.Как правило, термин «полная эмуляция» используется, когда уровень виртуализации размещен на уровне ISA (возможен более низкий уровень).В этом случае виртуальная машина включает в себя все уровни от приложения до ISA, и все ISA перехватываются и отображаются.Это обычно используется для виртуализации нишевых продуктов, таких как маршрутизаторы Cisco (например, с QEMU) или игровые приставки 90-х годов, имеющие совершенно другую архитектуру по сравнению с обычными общедоступными компьютерами.Тем не менее, обратите внимание, что может быть «полная эмуляция» и на других уровнях, что обычно не требуется.

0 голосов
/ 09 мая 2016

Более свежий ответ:

Из моего исследования я могу сказать, что это лучший ответ, чтобы понять, как выглядит концепция:

Первая концепция эмуляция на самом делевосходит к первому компьютеру, Колоссу.Он был использован британским правительством в 1941 году для имитации функций нацистской машины Enigma.Теория эмуляции была разработана в 1962 году и была задумана тремя инженерами IBM, работающими с трех разных точек зрения.

Эмуляция означает имитировать поведение цели , которая может быть аппаратной, например, эмулятор emu8086, или программной, как эмуляция службы с какого-либо сетевого порта.

Вы хотите имитировать набор функций, предоставляемых целью, и, возможно, вас не интересует внутренний механизм.

Зачем вам это?Для управления этими функциями.Зачем контролировать?По нескольким причинам, которые являются очень большой темой для обсуждения здесь.Но имейте в виду, что вы хотите быть позади вещей.

Но такой процесс дорог для производительности.У вас есть инструкция, для которой выполняется много других инструкций.Может быть, вы заинтересованы контролировать только некоторые из этих инструкций.Поэтому мы хотели бы разрешить выполнение некоторых инструкций родным.

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

Также обратите внимание, что при переходе от эмуляции к виртуализации ввод системы уменьшается, поскольку виртуализация принимает только программное обеспечение.Контроллер этого потока инструкций называется HyperVisor .

...