Виртуальные машины – другой распространенный подход к разработке операционных систем и их пользовательских интерфейсов

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

Пример: система виртуальных машин (SVM) в ОС IBM 360/370, разработанная в конце 1980-х гг. Более современный пример: Microsoft Virtual PC – продукт, эмулирующий виртуальную машину, в которую может быть инсталлирована любая другая ОС, отличная от основной.

При работе пользователей в виртуальных машинах физические ресурсы реальной компьютерной системы используются совместно для поддержки нескольких виртуальных машин. Диспетчеризация процессора создает у каждого пользователя впечатление, что он имеет свой собственный процессор. Буферизация (spooling) и файловая система предоставляют виртуальные устройства ввода и вывода. Терминал обычного пользователя, характерный для более раннего режима разделения времени, действует как операторская консоль.

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


Рис. 7.4. Модели ОС без использования виртуальных машин и на основе виртуальных машин.

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

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

Система виртуальных машин – хорошая основа для исследования и разработок в области ОС. Разработка систем выполняется над виртуальной машиной, а не на физической машине, и не нарушает нормального функционирования системы

Концепцию виртуальной машины, однако, труднее реализовать, так как трудно адекватно смоделировать используемую машину.

Виртуальная машина Java (JVM)

Подход, основанный на виртуализации, характерен не только для разработки операционных систем, но и для реализации современных платформ т языков программирования. Причина в том, что реализаторы этих языков и платформ стремятся сделать их переносимыми с одной реальной аппаратной платформы на другую. Такой подход принят, как широко известно, при реализации Java, но авторы Java отнюдь не первыми предложили данную идею. Программы на Java компилируются в платформонезависимый байт-код (bytecode) –команды виртуальной Java-машины, построенные на основе постфиксной записи операндов. Байт-код исполняется виртуальной машиной Java (JVM).

JVM состоит из:

  1. загрузчика классов(class loader), выполняющего загрузку классов в виртуальную машину во время выполнения программы; загрузчик классов может быть стандартным или может быть переопределен пользователем;
  2. верификатора классов(class verifier), выполняющего при загрузке класса проверку корректности его байт-кода, контроль типов и другие необходимые проверки;
  3. интерпретатора(runtime interpreter), выполняющего интерпретацию (эмуляцию) команд байт-кода – абстрактной машины Java;
  4. Just-In-Time (JIT) – компилятора, выполняющего при первом вызове каждого метода его компиляцию в объектный код целевой платформы (native –код), что позволяет повысить суммарную производительность выполнения программ на Java.

Аналогичную архитектуру имеет виртуальная машина VES (Virtual Execution System)платформы Microsoft.NET, однако подход .NET более открытый – поддерживается многоязыковое программирование, и байт-код (в .NET называемый CIL – Common Intermediate Language) играет роль универсального промежуточного языка, в который компилируется исходный код на любом языке, например, на C# или Visual Basic. Подробное рассмотрение этих вопросов выходит за рамки данного курса. В качестве базового учебника по Java-технологии рекомендую книгу "Виртуальные файловые системы (VFS). Реализации файловых систем. Сетевая файловая система NFS".

Архитектура виртуальной машины Java изображена на рис. 7.5.


Рис. 7.5. Архитектура виртуальной машины Java (JVM).