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

Я хотел бы получить правильное представление о виртуализации ввода-вывода. Контекст представляет собой чистую/полную виртуализацию, а не паравиртуализацию.

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

Предположим, что чип имеет аппаратный таймер, предназначенный для использования ядром ОС в качестве таймера тиков. Предположим, что поверх гипервизора работают две виртуальные машины (например, Windows и Linux).

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

Какова на самом деле роль гипервизора здесь? Как две ОС действительно не могут получить доступ к реальным вещам?


person Raj    schedule 21.10.2012    source источник


Ответы (1)


После небольшого чтения я достиг определенного уровня понимания, описанного в:

https://stackoverflow.com/a/13045437/1163200

Я воспроизвожу его полностью здесь:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Hypervisor_Service(Timer Start, Windows, 10ms); 

ЭМУЛЯЦИЯ

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

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

person Raj    schedule 24.10.2012
comment
+1 за повторное упоминание ответа. - person Gupta; 27.10.2012