В персональном компьютере после включения питания или сброса процессор считывает команду по адресу (номер ячейки памяти), находящемуся в специальном регистре, называемом счетчиком команд. Далее происходит выполнение команд и изменение рабочего пространства – содержимого оперативной, внешней памяти и регистров, являющихся разновидностью памяти. Далее содержимое счетчика команд наращивается в зависимости от длины команды с операндами на определенное число так, чтобы процессор считал следующую команду. Условные и безусловные переходы, циклы, вызовы подпрограмм происходят путем перезаписи содержимого счетчика команд.
В виртуальной машине те же команды и в том же порядке считывает не процессор, а программа виртуальной машины, затем для выполнения отправляет их на реальный процессор, далее записывает результаты, но не в реальные регистры, а в область оперативной памяти, выделенной для виртуальной машины. При необходимости записи/считывания информации в реальные регистры (например, при переброске портов или устройств (переключение на ВМ)) это делается только после тщательного контроля безопасности этих операций.
Таким образом, программы в ВМ вообще не имеют прямого доступа к ресурсам реальной машины (только через посредника в виде программы, реализующей ВМ, например, VirtualBox). С другой стороны, и хост-ОС не имеет доступа к области памяти, выделенной для ВМ. Хост-ОС только видит, что память выделена для чего-то, но доступ к этой памяти закрыт.
В результате в реальном компьютере могут одновременно и совершенно независимо функционировать несколько совершенно разных ОС на базе одной или разных программ виртуальных машин (VirtualBox, VMWare и т.д.) своими приложениями, в том числе хост-ОС.
Виртуальная машина является платформенно-независимой, т.е. должна работать на любом компьютере, в том числе с разным аппаратным обеспечением (системная плата, процессор и т.д.). Однако реально это не всегда так.
Рис.
2.1
Здесь ОП – оперативная память;
ВОП – виртуальная оперативная память, т.е. оперативная память ВМ;
ЖД – жесткий диск;
ВЖД – виртуальный жесткий диск;
ВРУ – виртуальные регистры устройств.
Вывод 1: процессы (выполняющиеся программы) в любой из ВМ или хост-ОС изолированы друг от друга. Вирус или некорректно написанная программа, работающие в ВМ, не могут проникнуть в другие системы и нанести им ущерб.
Вывод 2: ВМ использует только часть ресурсов реальной машины, поэтому работает существенно (в несколько раз) медленнее.
Вывод 3: в случае краха системы в ВМ или при заражении ее вирусами целесообразно сохранить данные (если можно), удалить файл образа виртуального жесткого диска и скопировать на его место такой же файл, сохраненный ранее. Чтобы можно было легко восстановить ВМ даже в случае краха реального ЖД или вирусной атаки, резервную копию виртуального жесткого диска желательно хранить на внешнем носителе (ЖД или флешке), который не подключен к компьютеру постоянно. Восстановление системы с уничтожением вирусов производится простым копированием файла виртуального ЖД и занимает пару минут.
Вывод 4: виртуальный жесткий диск, созданный программой виртуализации, должен работать на любой аппаратной платформе, т.е. на любом компьютере (по крайней мере под управлением такой же программы виртуализации).