Основы
В этой серии туториалов, я предполагаю, что вы, читатель, знакомы с операциями защищенного режима 80x86, такими как виртуальный 8086-режим, рaging, GDT, LDT, IDT. Если вы не знаете о них, прочитайте сначала интелловскую документацию по адресу http://developet.intel.com/design/pentium/manuals/
СОДЕРЖАНИЕ
"Windows 95" - это мультизадачная операционная система (is a multithreaded operating system), выполняющаяся на самом привилегированном уровне, ring 0. Все приложения запускаются на ring 3, наименее привилегированном уровне. Таким образом, приложения ограниченны в том, что они могут делать в системе. Они не могут выполнять привилегированные инструкции процессора, не могут получить доступ к портам ввода/вывода напрямую и так далее. Вы, без сомнения, знакомы с тремя большими системными компонентами: gdi32, kernel32 и user32. Вы могли бы подумать, что такие важные части кода должны выполняться в ring 0. Hо на самом деле, они выполняются в ring 3, как и все остальные приложения. Вот почему они имеют не больше привилегий, чем, скажем, калькулятор или "минер". Hастоящая сила системы находится под контролем менеджера виртуальной машины (VMM - virtual machine manager) и драйверов виртуальных устройств(VxD).
Hичего бы этого не случилось, если бы не DOS, усложняющий ситуацию. Во время эпохи Windows 3.x, существовало множество успешных DOS-программ на pынке. Windows 3.x должна была быть способной выполнять их вместе с Windows-программами, иначе бы она потерпела коммерческий провал.
Эту дилемму не так легко решить. DOS- и Windows- программы разительно отличаются друг от друга. DOS-программы плохи в том смысле, что они берут под свой контроль все в системе: клавиатуру, CPU, память, диск и т.д.
Они не знают, как взаимодействовать с другими программами, в то время как Windows-программы используют кооперативную многозадачность, то есть каждая Windows-программа должна передавать контроль другим программам через GetMessage или PeekMessage.
Решение в том, чтобы выполнять каждую DOS-программу на виртуальной 8086-машине, в то время как другие Windows-программы выполняются на другой виртуальной машине под названием системная виртуальная машина. Windows ответственна за то, чтобы выделять CPU-время каждой машине по кругу. Таким образом, под Windows 3.x Windows-программы используют кооперативную многозадачность, но виртуальные машины используют преимущественную многозадачность.
Что такое виртуальная машина? Виртуальная машина - это фикция, созданная полностью программным образом. Виртуальная машина реагирует на действия выполняющейся программы, также как и настоящая машина. Таким образом, программа не знает, что она выполняется в виртуальной машине и это не мешает ей. Пока виртуальная машина отвечает программе также, как настоящая машина, она должна pасцениваться как настоящая.
Вы можете думать об интерфейсе между настоящей машиной и ее программным обеспечением как о некоей разновидности API. Этот необычный API состоит из прерываний, вызовов BIOS и портов ввода/вывода. Если Windows может точно воспроизвести этот API, программы, выполняющиеся на виртуальной машине будут вести себя точно также, как и на настоящей.
Это тот момент, когда на сцену выступает VMM и VxD. Чтобы координировать и надзирать за виртуальными машинами, Windows требуется программа, специально предназначенная для этого. Эта программа называется менеджер виртуальных машин.