W A S M
В тази поредица от уроци предполагам, че вие, читателят, сте запознати с 80x86 операции в защитен режим като 8086 виртуален режим, пейджинг, GDT, LDT, IDT. Ако не знаете за тях, първо прочетете документацията на Intel на адрес http://developet.intel.com/design/pentium/manuals/
Windows 95 е операционна система с няколко клона, която работи на най-привилегированото ниво, пръстен 0. Всички приложения работят на пръстен 3, най-малко привилегированото ниво. По този начин приложенията са ограничени в това, което могат да правят в системата. Те не могат да изпълняват привилегированите инструкции на процесора, нямат достъп до I/O портове директно и т.н. Несъмнено сте запознати с трите страхотни системни компонента: gdi32, kernel32 и user32. Вероятно сте мислили, че такъв важен код трябва да бъде изпълнен в пръстен 0. Но всъщност те се изпълняват в пръстен 3, както всички други приложения. Ето защо те нямат повече привилегии от, да речем, калкулатор или „миньор“. Реалната мощност на системата под контрола на диспечера на виртуални машини (VMM) и драйвери за виртуални устройства.
Нищо от това нямаше да се случи, ако не беше DOS, усложняващ нещата. По време на ерата на Windows 3.x на пазара имаше много успешни DOS програми. Windows 3.x трябваше да може да ги изпълнява заедно с програми на Windows, в противен случай щеше да претърпи търговски пробив.
Тази дилема не е лесна за решаване. DOS- и Windows- програмите са много различни помежду си. DOS програмите са лоши в смисъл, че поемат контрола над всичко в системата: клавиатура, процесор, памет, диск и т.н.
Те не знаят как да си взаимодействат с други програми, докато програмите на Windows използват съвместна многозадачност, т.е. всяка програма на Windows трябва да предава контрол на други програми чрез GetMessage или PeekMessage.
Решението е да стартирате всяка програма DOS на виртуална машина 8086, докато другите програми на Windows работят на различна виртуална машина, наречена системна виртуална машина. Windows е отговорен за разпределението на процесорното време за всяка машина на кръгова основа. По този начин, под Windows 3.x програмите на Windows използват съвместна многозадачност, но виртуалните машини използват изгодна многозадачност.
Какво е виртуална машина? Виртуалната машина е измислица, създадена изцяло в софтуер. Виртуалната машина реагира на действията на работеща програма точно като реална машина. По този начин програмата не знае, че работи във виртуална машина и това не й пречи. Докато виртуалната машина реагира на програмата по същия начин като истинска машина, тя трябва да се третира като реална.
Можете да мислите за интерфейса между реална машина и нейния софтуер като някакъв API. Този необичаен API се състои от прекъсвания, извиквания на BIOS и I/O портове. Ако Windows може точно да възпроизведе този API, програмите, работещи на виртуална машина, ще се държат точно по същия начин, както на реална.
Тук влизат в игра VMM и VxD. За да координира и контролира виртуални машини, Windows изисква програма, специално разработена за това. Тази програма се нарича мениджър на виртуална машина.
Мениджър на виртуални машини
VMM е програма, която работи в 32-битов защитен режим. Основната му задача е да създаде и поддържа работна среда за виртуални машини. Тя отговаря за създаването, изпълнението и прекъсването на виртуални машини. VMM е един от многото системни VxD и се намира във файла VMM32.VXD във вашата системна директория. Нека да анализираме последователността на зареждане на Windows 95.
- io.sys се зарежда в паметта.
- обработени от config.sys и autoexec.bat
- win.com се нарича
- win.com стартира VMM32.VXD, който всъщност е прост DOS EXE файл.
- VMM32.VXD зарежда VMM в разширена памет с помощта на XMS драйвер.
- VMM инициализира себе си и други стандартни драйвери за виртуални устройства.
- VMM превключва машината в защитен режим и създава системна виртуална машина.
- Последното виртуално устройство на черупката, което стартира, стартира Windows на системната виртуална машина, като стартира krnl386.exe.
- krnl386.exe зарежда всички други файлове, като завършва обвивката на Windows 95.
Както можете да видите, VMM е първият VxD, който се зарежда в паметта. Той създава системна виртуална машина и инициализира други VxD. Той също така предоставя на тези VxD различни услуги.
Поведението на VMM и VxD е много различно от нормалните програми. Те в по-голямата си част са в латентно състояние. Докато приложенията се изпълняват в системата, тези VxD не са активни. Те ще се събудят, когато възникнат прекъсвания/грешки/събития, които изискват тяхното участие.
VxD трябва да синхронизират достъпа си до VMM услуги. Има някои ситуации, в които е опасно да се обаждате на VMM услуги, например, когато се обработва някакъв вид хардуерно прекъсване. Понастоящем VMM не може да гарантира отговор на вашата заявка. Като създател на VxD, вие трябва да бъдете изключително внимателни в това, което правите. Запомнете това, няма кой да се справи с вашата грешка. Вие сте напълно сами на ринг 0.