Прощай, тормоза! Крис Касперски Хакер, номер #095, стр. 095-038-1 Как запустить виртуальную машину без тормозов! Интерес к различного рода эмуляциям все растет и растет. Кому не интересно запустить из-под Windows этот загадочный LINUX или полюбоваться Mac OS X? Единственный сдерживающий фактор — это никудышная производительность эмуляторов, которые по обыкновению больше тормозят, чем работают. Но вот в середине 2006 года в процессорах Intel и AMD наконец-то появилась аппаратная поддержка виртуализации, которая снижает накладные расходы на эмуляцию в сотни раз. Тут уже сам Бог велел разобраться, что к чему и насколько хорошо работает. Откуда взялись эмуляторы? Лет 15-20 назад, в эпоху перехода с 8-битного потребительского барахла типа РК86, ZX Spectrum на серьезный по тем временам IBM PC XT/AT, ностальгирующие разработчики, нежелающие расставаться со старой техникой, писали эмуляторы. Растущие как грибы после дождя, эти эмуляторы позволяли всем желающим играть в их любимые игры, прямых аналогов которых на IBM PC не существовало. Через 10 лет история повторилась. Операционные системы семейства NT, ставшие стандартом де-факто, заблокировали прямой доступ к оборудованию, и 90% игр тут же отказалось запускаться (или потеряло звуковое сопровождение). «Ответом турецкому султану» стали DOSBox и другие эмуляторы, позволяющие повернуть время вспять и вспомнить свою былую молодость, прошедшую в окровавленных коридорах DOOM II. Только вот даже на P-III 733 старый добрый Aladdin шел на пределе, с пропуском кадров, не говоря уже про более серьезные игры. Наращивать мощность было невыгодно. Проще купить старый компьютер, водрузить на него MS-DOS и наслаждаться играми без внезапных вылетов эмулятора, рывков и тормозов. Идея эмулировать IBM PC на самом IBM PC, то есть создавать виртуальные машины, родилась не сразу, но тут же завоевала расположение хакеров, системных администраторов и просто любопытствующих. Всплывающий SoftICE уже не замораживал компьютер, позволяя отлаживать программу с одновременным чтением документации. Для экспериментов с вирусами уже не приходилось переключаться на специальный жесткий диск. И самое главное - любой желающий мог поставить LINUX/BSD, не рискуя угробить основной Windows-раздел. Ценная вещь, не поспоришь! К сожалению, для полноценной работы с LINUX'ом на эмуляторе требовалась очень мощная машина с резвым процессором и большим объемом оперативки. По-настоящему комфортно можно было ковыряться в консоли, в то время как в красивых KDE/GNOME приходилось полностью отключать все визуальные эффекты. Ты бы, возможно, и дальше продолжал тратить время и переживать из-за непрерывных тормозов, если бы не узнал сегодня об аппаратной виртуализации. Это настоящий прорыв со стороны процессоров, позволяющий гонять гостевые операционные системы с той же скоростью, с какой они исполнялись бы на «живом» железе! Круто? Еще бы, но не будем забегать вперед и рассмотрим все по порядку. От к динозавров машинной эры до наших дней Вслед за возникновением концепции многозадачности появилась идея виртуализации. Чтобы запускать несколько операционных систем одновременно, процессор должен поддерживать виртуальную память и обладать раздельными уровнями привилегий, согласованными с набором команд. Специальная программа — Монитор Виртуальных Машин (Virtual Machine Monitor, или VMM) — запускалась бы на наивысшем уровне привилегий, перехватывала выполнение привилегированных инструкций (пытающихся обратиться к физической памяти или портам ввода-вывода, например) и эмулировала их выполнение. Непривилегированные инструкции в этой схеме выполняются на «живом» железе без потери скорости. А поскольку процент привилегированных инструкций относительно невелик, накладными расходами на эмуляцию можно полностью пренебречь. Это, можно сказать, идеальная схема. |