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