Прощай, тормоза! Крис Касперски Хакер, номер #095, стр. 095-038-2 Из всех существующих на тот момент машин данным критериям отвечали только IBM System/370 и Motorola MC68020, на которых и были реализованы эффективные эмуляторы, позволяющие, в частности, создавать виртуальные серверы, обслуживающие разных пользователей или просто дублирующие друг друга. Если падает один сервер, инициативу тут же подхватывает другой, и для этого совершенно не нужно держать несколько физических серверов! Конечно же, выход из строя самого сервера здесь не рассматривается, поскольку операционные системы наворачиваются значительно чаще. А как же процессоры семейства Intel 80386? Они поддерживают виртуальную память и разделение привилегий по целым четырем кольцам защиты. Что мешает реализовать на них полноценный эмулятор, такой же, как и на IBM System/370?! Начнем с того, что все операционные системы, какие только имеются на IBM PC, помещают свои ядра в так называемое нулевое кольцо, на которое понятие привилегированных команд не распространяется. Следовательно, Монитор Виртуальных Машин уже не может их перехватывать. Беда! Правда, существует лазейка — устанавливаем некоторую операционную систему, объявляя ее базовой или основной (host), и запускаем все остальные оси… в третьем кольце! Тогда привилегированные инструкции станут возбуждать исключения, легко перехватываемые Монитором Виртуальных Машин, работающим в нулевом кольце. Но тут не все так легко, как кажется! Во время работы процессор тесно связан с так называемыми таблицами дескрипторов, в которых содержится информация о сегментах памяти и прерываниях. Проблема в том, что они существуют в единственном числе и для работы процессора в нескольких ОС совершенно не приспособлены. Существует один выход — для каждой из виртуальных машин создавать свою собственную копию таблиц дескрипторов, переключая их при переходе с одной виртуальной машины на другую, а это очень тормозит процесс. Но даже на этом проблемы не заканчиваются. Любопытные могут прочитать некоторые тонкости во врезке, всем же остальным рекомендую просто читать далее. Программная эмуляция Непригодность x86-архитектуры для эффективной виртуализации еще не запрещает эмулировать IBM PC программно с минимальной поддержкой со стороны оборудования. В грубом приближении это будет интерпретатор, «переваривающий» машинные команды с последующей имитацией их выполнения. С 8086 никаких проблем не возникает, но вот эмуляция страничной организации памяти и прочих штучек 386+ не только усложняет кодирование, но и снижает скорость выполнения программы в сотни или даже в тысячи раз! |