10.9. Режим виртуального 8086

Режим V86 - это задача, исполняющаяся в защищенном режиме, в которой флаг VM регистра EFLAGS равен единице. Внутри задачи процессор ведет себя так, как если бы он находился в реальном режиме, за исключением того, что пре­рывания и исключения передаются обработчикам защищенного режима вне ее (кроме случая, когда используется карта перенаправления прерываний).

Программы могут изменить флаг VM. Его допускается указать, только за­писав образ EFLAGS с установленным VM при создании TSS новой задачи и за­тем переключившись на нее. Кроме этой задачи для нормальной реализации V86 требуется монитор режима (VMM) - модуль, который выполняется с CPL = О и обрабатывает прерывания, исключения и обращения к портам ввода-вывода из задачи V86, осуществляя фактически эмуляцию всего компьютера.

Чтобы выполнять в системе сразу несколько У86-задач, применяется странич­ная адресация. Каждая У86-задача использует ровно один мегабайт линейного ад­ресного пространства, который можно отобразить на любую область физического.

Процессор переключается в V86 в трех ситуациях:

при переключении в задачу, TSS которой содержит установленный флаг

□ при выполнении команды IRET, если NT = 0 и копия EFLAGS в стеке содер ­жит установленный флаг VM;

□ при выполнении команды IRET, если NT = 1 и копия EFLAGS в TSS содер­жит установленный флаг VM.