софтComputer Review#5(55)

Вячеслав Калошин,
multik@istu.edu, http://linux.irk.ru


VMWare
Windows и Linux в соседних окнах

 15 марта вышел программый продукт, необычайно полезный всем тем пользователям Linux и Windows, которые в силу каких-то обстоятельств вынуждены держать на своей машине несколько версий других операционных систем (например, для некоторых программ, которые существуют в версии только для этих операционных систем, или их функциональность для опредленной ОС недостаточна для продуктивной работы). Имя этому продукту - VMWare. Его создатель – молодая компания VMWare, которая до сих пор никому не была известна.

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

 Он может создавать до 254 виртуальных машин (конечно, если хост-система выдержит) под своим управлением, и при этом каждая виртуальная машина получает в свое распоряжение свой биос, свою память, свою сетевую карточку и считает, что она работает в системе совсем одна.

 Что дает эта система среднему пользователю Linux или WindowsNT? Для запуска Windows или какой-либо другой операционной системы не нужно перезагружаться в нее, а достаточно запустить VMWare, указать ему параметры виртуальной машины, указать, откуда загружать операционную систему, и получить в свое распоряжение полностью работоспособную систему, но работающую в окне хост-системы. На данный момент VMWare существует только в версии для Linux, но его создатели уже дописывают версию для WindowsNT.

 Какие операционные системы позволяет запускать VMWare? DOS, Windows 3.1, 3.11, 95, 98, NT, Linux. Это те, о которых официально заявлено на сайте фирмы-производителя, но, на самом деле, в специализированных эхоконференциях и списках рассылки поступают сообщения от энтузиастов, которые запустили под диспетчером SCO Unix, Interactive Unix, FreeBSD, Novell Netware, Windows 2000. Пока сопротивляются Solaris и BSDI, но, говорят, что скоро запустят и их.

 Идея, лежащая в основе диспетчера, очень проста: зачем эмулировать какую-либо операционную систему (и получать при этом целый букет несовместимостей из-за различных недокументированных функций и т.п.), когда можно просто сэмулировать целый компьютер, а что на нем будет работать - не наша задача. Делается это относительно просто – возможности современных процессоров позволяют установить для любой задачи, выполняющейся в системе, некий определенный набор правил (доступность адресов памяти, портов ввода-вывода и многое другое). И программа, которая установила эти правила на "подчиненное" приложение, вправе, при нарушении им этих правил, либо запретить его дальнейшее выполнение либо заменить запрещенное действие на другое, да так, что приложение этого не заметит.

 Диспетчер виртуальных машин так и делает: создает в адресном пространстве хост-машины память для будущей виртуальной машины, устанавливает набор правил, по которым процессор хост-машины будет вызывать диспетчера, загружает туда BIOS виртуальной машины и отдает ему управление процессором. Дальше все происходит аналогично включению машины: BIOS проверяет память, устройства и начинает загрузку операционной системы в виртуальной машине. Как раз во время этих нехитрых действий диспетчер и выполняет основную работу: перехватывает обращения к некоторым участкам памяти и "подсовывает" виртуальной машине то, что установил для нее пользователь: для винчестеров отслеживаются порты контроллеров и эмулируется их реакция на команды, и так далее. В итоге, операционная система на виртуальной машине не замечает того, что она не одна на хост-системе и притормаживает только тогда, когда обращается ко внешним устройствам (в это время диспетчер общается с реальными устройствами и файлами и проверяет допустимость команд и адресов). Если же машина занята чисто вычислительными задачами, то снижения производительности по сравнению с "чистой" машиной практически не наблюдается (конечно, если на хост-системе на запущено что-нибудь ресурсоемкое).

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

 Как она работает? VMWare состоит из трех частей - Virtual Platform Application, VP Monitor и VP Driver. VP Monitor работает на самом низком уровне, обеспечивая работу с железом; VP Application представляет собой прикладную программу базовой ОС (биос, загрузчик и прочее); VP Driver занимается их взаимодействием. Виртуализацией CPU занимается непосредственно VP Monitor, поэтому потери тут минимальные.

 Немного о самой виртуальной машине. Для операционной системы, запущенной в ней, она выглядит как обычный компьютер с Phoenix-BIOS с тем процессором, который есть на хост-машине (MMX поддерживается), с тем количеством памяти, которое пользователь отвел машине из доступных ему объемов (до 2х ГБайт), с сетевой картой AMD PCINet (до 4х штук в каждой виртуальной машине) и с видеокартой VGA (причем, после установки дополнительных программ в виртуальную Windows, последней становятся доступны все видеорежимы и разрешения, которые доступны в хост-системе).

 В качестве жестких дисков для виртуальной машины могут выступать как уже имеющиеся разделы на существующих жестких дисках (к сожалению, эта опция работает пока только для IDE-дисководов), так и созданные VMWare образы дисков, которые располагаются в виде обычных файлов. Виртуальная машина легко обманывается - она может считать, что в ее распоряжении есть несколько физических дисков, хотя сами образы дисков могут лежать на общем сервере, и ими будут пользоваться несколько виртуальных машин одновременно (конечно, в режиме "только для чтения"). Причем, для виртуальной машины безразлично, откуда берутся диски для нее - она загружается как с существующего раздела, так и с образа диска. Это очень удобно для тех пользователей, которые по каким-либо причинам вынуждены часто переустанавливать операционную систему. Например, в тех учебных заведениях, где студенты имеют доступ в компьютерные классы с установленной Windows, лаборантам приходится раз-два в день переустанавливать ОС на каких-либо компьютерах, потому что вместо того, чтобы заниматься делом, почти каждый студент стремится залезть куда-нибудь внутрь системы и показать соседям, что он крут до неимоверности. Ведь поставить Windows NT не везде позволяют условия проведения учебного процесса. Вот и бегают лаборанты и выполняют доведенные своей многократностью до автоматизма действия по восстановлению системы. В этом и во многих других случаях, когда работоспособность системы необходимо восстановить в кратчайший срок, помогут образы дисков - просто скопировать один файл гораздо быстрее, чем отвечать на кучу вопросов (правда, в дистрибутиве Windows есть скрипты, которые облегчают автоматическую установку, но они рассчитаны на установку только MS продуктов). Хост-систему тоже можно довести до неработоспособного состояния, но сделать это простому студенту гораздо тяжелее, а при нормальной настройке хост-системы - почти невозможно. Забавный (и полезный) штрих - можно сказать системе отменять все изменения на виртуальных дисках после выхода из данной виртуальной машины.

 Сетевые настройки у виртуальной машины возможны в одном из 3х вариантов: no network, bridged, host-only. В режиме "no network" сеть для виртуальной машины вообще не доступна (например, по соображениям безопасности); в режиме "bridged" виртуальной машине через виртуальную сетевую карту доступна сеть во всем обьеме, доступном хост-машине; режим "host-only" разрешает виртуальной машине доступ только на хост-машину (хотя, если на хост-машине установлен какой-либо прокси-сервер, то будет доступно то, что разрешит прокси-сервер). Учтите, что настройки сети у виртуальных машин отдельные и нисколько не зависят от настроек сети хост-машины (у хост-машины вообще не может быть сетевой карты, но виртуальные машины все-таки смогут связываться между собой). То есть, ни адреса, ни протоколы не ограничиваются хост-машиной (например, у хост-машины может быть включен только протокол tcp/ip, а у виртуальной машины - tcp/ip,ipx и netbeui).

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

 На данный момент VMWare существует в бета-версии, поэтому в ней нет MIDI (ну и джойстика, соответственно), нет поддержки USB и 3D-акселераторов, а также есть некоторые ограничения в поддержке DirectX/DirectDraw, однако, они настолько малы, что их можно не заметить.

 Вы не верите? Сходите на http://cce.nextreme.com/vmware/, там лежит куча скриншотов, на которых показывается запущенная под Linux'ом Windows во всех положениях и разные программы под нее.

 Вы считаете, что для нормальной работы в Windows и linux одновременно необходима монстрообразная машина? Вовсе нет! Хотя на сайте VMWare советуют PII/300/64 и выше, вполне достаточно Р/133 с 48 мегабайтами памяти. Причем, из-за отличной работы всех модулей VMWare чисто процессорные задачи (паковка-распаковка, обсчет чего-либо) выполняется на практически полной скорости процессора, притормаживаясь на видео и дисковых операциях.

 Автором после непродолжительной работы с диспетчером и операционными системами под его управлением было замечено, что 16ти разрядные программы выполняются гораздо медленней, чем 32х разрядные. Ведь VP Monitor'у необходимо некоторое время, чтобы переключить процессор из 32х разрядного режима работы в 16ти разрядный. Что это означает на практике? А что, что на моем компьютере (Р150 (up to 188)/64) 32х разрядная Windows9* загружала процессор хост-машины на все 100%, и что-то более-менее серьезное под обоими операционными системами сделать было нельзя (в Windows все тестирующие программы показывали скорость процессора на уровне Р100, а скорость обмена с дисками составляла 100-200 КБайт/с). Я уж было решил, что и в самом деле нужен маленький монстрик для нормальной работы, но вовремя задумался и решил для очистки совести поставить рядом WindowsNT. Скорость увеличилась раз в 10, как хост-система, так и WindowsNT работали спокойно, без особых напряжений, по всем тестам скорость процессора возросла до Р150, а скорость обмена с диском увеличилась до приемлемых 3-4 МБайт/с (вот что значит истинная 32х разрядность!). Продолжая попытки добить диспетчер, я запустил в окне виртуальной WindowsNT Quake в режиме 320х200 безо всяких акселераций и прочего - получил 15 fps, что в такой "драконовской" конфигурации очень даже неплохо. В конце концов, я установил в виртуальной машине MicrosoftWord 7.0, в WindowsNT – сетевой принтер, и вся эта связка заработала и исправно работает до сих пор. Большего от поделок Микрософта мне и не надо.

 Если Вы заинтересовались, то скачать VMWare можно либо с www.vmware.com, либо с указанных там зеркал. В версии для linux - 3 файла, каждый примерно по 2 мегабайта. Чтобы Вам не скачивать лишнее, кратко опишу их функции: vmware.tar.gz - именно сам диспетчер; vmware-tools.ex (именно так, без последней буквы e!) - набор утилит, который устанавливается в виртуальную Windows и обеспечивает последней доступ до всех видео-режимов, которые поддерживает хост-система, копирование текстовых блоков между виртуальными машинами и многое другое; vmware-tools.tar.gz - в этом архиве содержится X-Server для тех машин, где не установлен X-Window, но есть видеокарта с поддержкой графики.


софтComputer Review#5(55)

Copyright © 1998 "Компьютерное обозрение"
Дизайн - leidenwebdesign - http://leiden.irkutsk.ru