Организация ЭВМ и систем: Курс лекций (Позиционные системы счисления. Процессоры семейства IA-32. Лазерные принтеры), страница 10

В защищённом режиме работают такие операционные системы, как MS Windows, UNIX, Linux.

Режим эмуляции процессора 8086 (Virtual-8086 mode) является разновидностью защищённого режима. При работе в данном режиме процессор может непосредственно выполнять программы, написанные для режима реальной адресации процессора Intel 8086.

Для каждой задачи создаётся собственная виртуальная машина, которой выделяется изолированная область памяти размером 1 Мбайт, и полностью эмулируется работа процессора 80x86 в режиме реальной адресации. Например, в операционной системе MS Windows виртуальная машина процессора 8086 создаётся каждый раз при запуске пользователем окна командного интерпретатора (сеанса MS DOS). Таким образом, становится возможным запуск программ, написанных для MS DOS, в безопасном многозадачном окружении. Программа, выполняющаяся в данном режиме не может повредить другие программы, выполняющиеся на ЭВМ одновременно с ней.

Режим управления системой (System Management mode) предоставляет операционной системе механизм выполнения таких функций, как перевод ПЭВМ в режим энергосбережения и восстановления системы после этого.

4.1.2. Режим реальной адресации

Процессор 8086 имел 16-разрядные регистры и потому не мог непосредственно работать с 20-разрядными адресами оперативной памяти. Для преодоления затруднения была разработана схема адресации, называемая сегментацией памяти, суть которой состоит в следующем.

Всё доступное адресное пространство разделялось на блоки размером 64 Кбайт, называемые сегментами. Адрес начала сегмента мог быть любым, кратным 16. Соответственно, последние четыре бита в адресе сегмента можно опустить. Таким образом, если, например, указан 16-разрядный адрес сегмента A000, то сегмент начинается с адреса A0000.

Для обращения к любому байту в пределах сегмента используется 16-разрядное смещение, значение которого находится в пределах от 0 до 216-1. Для вычисления линейного адреса значение смещения нужно прибавить к адресу сегмента. Адрес сегмента и смещения в нём принято записывать парой четырёхзначных шестнадцатеричных чисел, разделённых двоеточием. При этом в адресе сегмента последняя цифра, всегда равная нулю, не пишется. Например, адрес байта, лежащего в сегменте, начинающемуся по адресу A0000, со смещением 25 записывается следующим образом: A000:0025. Линейный адрес этого байта равен A0025.

Как уже указывалось, ввиду отсутствия в процессоре 8086 20-разрядных регистров, в 16-разрядных программах непосредственно оперировать линейными адресами нельзя. Вместо этого адреса ячеек памяти задаются адресом сегмента и смещения. Для этого 16-разрядный адрес сегмента помещается в один из сегментных регистров, который явным или неявным образом указывается при выполнении команды, а программа непосредственно оперирует 16-разрядным смещением относительно начала сегмента. Адрес, заданный парой «сегмент:смещение», процессор автоматически преобразует в 20-разрядный линейный адрес в процессе выполнения команды.

В типичной программе, написанной для процессоров семейства IA-32, есть три сегмента: кода, данных и стека. При запуске программы базовые адреса перечисленных сегментов загружаются в регистры CS, DS и SS соответственно. В остальных сегментных регистрах программист может хранить указатели на дополнительные сегменты.

4.1.3. Защищённый режим

В данном режиме используется линейная модель памяти (flat memory model), которая при 32-разрядных регистрах позволяет адресовать до 4 Гбайт. Каждой программе выделяется линейное адресное пространство (flat address space).

С точки зрения программиста, линейная модель наиболее проста в использовании, поскольку для адресации любой переменной или команды достаточно одного 32-разрядного целого числа. Простота эта во многом иллюзорна, поскольку значительная часть работы здесь перекладывается на операционную систему.

В защищённом режиме в сегментных регистрах помещаются не базовые 16-разрядные адреса сегментов, а селекторы, которые суть указатели на дескрипторы сегмента, расположенные в одной из таблиц дескрипторов. По информации, находящейся в дескрипторе, определяется линейный адрес сегмента.