Читаем Журнал «Компьютерра» №32 от 06 сентября 2005 года полностью

Последний пример хорошо иллюстрирует суть происходящего. Как известно, современные многозадачные операционные системы активно используют механизм виртуальной памяти, когда запущенные на процессоре программы работают с «линейными» адресами, произвольным образом отображенными в реальную физическую оперативную память (или еще куда-нибудь - например, на участок жесткого диска в своп-файле или своп-разделе). С физической памятью не работает даже сама операционная система: слишком уж это неудобно - подстраиваться под особенности конкретного ПК, и слишком опасно - когда в общей куче перемешаны данные десятков и сотен запущенных программ, и только аккуратность разработчика защищает эти данные от ошибочных действий программного обеспечения. Преобразование виртуальных «линейных» адресов в физические обычно выполняет сам центральный процессор, для чего у него предусмотрена специальная таблица трансляции адресов, в которой записано, какому «линейному» адресу какой физический соответствует (или стоит пометка, что при обращении к данному участку памяти процессору следует позвать на помощь операционную систему). Хранится эта таблица не в регистрах процессора, а в оперативной памяти (в виде трех-четырехуровневого B-дерева, если вас интересуют подробности), причем таблиц может быть сколько угодно: для переключения к другому виртуальному адресному пространству в процессоре достаточно изменить один-единственный регистр CR3 (указатель на таблицу трансляции) и выполнить специальную команду сброса и очистки кэшей CPU, в которых может сохраняться старая информация о виртуальной памяти. «Простым смертным» в лице обычных программ доступ к CR3, разумеется, закрыт, и поэтому изменить «мир», в котором программы находятся, они могут только путем обращения за помощью к операционной системе. Операционной системе «проще» - она, с одной стороны, подчиняется «общим правилам», а с другой - может эти правила самостоятельно «переписывать», работая ровно в тех условиях, которые кажутся ей наиболее приемлемыми. Скажем, если ОС срочно потребуется записать что-то по физическому адресу 0x00123456, она вначале создаст в таблице трансляции своих виртуальных адресов ссылку на соответствующий участок оперативной памяти (отобразив его в то место виртуального линейного пространства ОС, которое покажется ей самым удобным) и затем обратится по свежесозданному виртуальному адресу. Для «обычного» же процесса (который, строго говоря, почти ничем не отличается от процесса ядра операционной системы) подобная «лазейка» к, скажем, «соседям» по компьютеру закрыта - ему просто-напросто не дадут увидеть собственную таблицу трансляции, выведя ее за пределы «видимости» виртуального пространства его памяти либо защитив эту область памяти от записи (здесь тоже используется та самая таблица трансляции - в ней можно указывать права доступа к виртуальным адресам). Все замечательно, все удобно, никаких проблем.

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

Набор ситуаций, «прерывающих» выполнение обычных программ и приводящих к вызову VMM, довольно гибко настраивается - вовсе не обязательно, скажем, реагировать на все обращения операционных систем к компьютерным портам ввода-вывода: достаточно указать, какие порты для какой операционной системы будут «выбрасывать» ее к VMM, а какие - работать как если бы VMM не существовало в природе. Причем догадаться о том, что ОС запущена «под неусыпным контролем», практически невозможно: VMM может, например, точно таким же образом фальсифицировать обращения к CPUID (информация о процессоре и поддерживаемых им технологиях), после чего запущенная на Pentium D операционная система будет искренне полагать, что работает, скажем, на Pentium 3 и что никакой поддержки технологий виртуализации этот процессор не предоставляет.

Перейти на страницу:

Все книги серии Компьютерра

Похожие книги

«Если», 2002 № 06
«Если», 2002 № 06

ФАНТАСТИКАЕжемесячный журналСодержание:Джеймс Блиш. БИ-И-ИП! рассказВл. Гаков. МИССИОНЕР (статья)Джин Вулф. ПОДМЕНЫШ, рассказШон Макмаллен. БАШНЯ КРЫЛЬЕВ, рассказМэри Терзиллоу. ДЕСЯТАЯ ЖИЗНЬ НЕФЕРТИТИ, рассказВидеодром*Рейтинг--- Дмитрий Байкалов. ЭЛОИ ПРОТИВ МОРЛОКОВ (статья)*Премьера--- Тимофей Озеров. УДАР ПО КАРМАНУ (статья)*Рецензии*Экранизация--- Вл. Гаков. ЧУЖАК В СВОЕЙ СТРАНЕ (статья)Алексей Калугин. РАССВЕТ ПОТЕРЯННЫХ ДУШ, рассказРаджнар Ваджра. ДЖЕЙК, Я И ЗИППО, рассказСвятослав Логинов. ДОЛИНА ЛОРИЭН, рассказ,Алексей Зарубин. КРАСОТА ОПЛАЧЕННОГО ДОЛГА, повестьКэрол Карр. И ВАМ ЕЩЕ КАЖЕТСЯ, ЧТО У ВАС НЕПРИЯТНОСТИ? рассказДмитрий Володихин. КАРАУЛ УСТАЛ (статья)Сергей Питиримов. МОРЕ ВОЛНУЕТСЯ РАЗ… (статья)РецензииОлег Дивов. БЕЛЫЙ КВАДРАТ НА ЧЕРНОМ ФОНЕ (статья), стр. 280-291Владислав Гончаров. ДО АПОКАЛИПСИСА ЕЩЕ ПОЖИВЕМ! (статья)Виталий Пищенко: «ПРИЯТНО НАЙТИ ПРОРОКА В СВОЕМ ОТЕЧЕСТВЕ»КурсорPersonaliaОбложка Игоря Тарачкова к повести Алексея Зарубина «Красота оплаченного долга».Иллюстрации: А. Балдин, В. Овчинников, А. Филиппов, Т. Филиппова, С. Голосов, С. Шехов, И. Тарачков.

Алексей Зарубин , Виталий Пищенко , Кэрол Карр , Раджнар Ваджра , Сергей Питиримов

Фантастика / Журналы, газеты / Фэнтези / Современная проза / Эссе