Защищенный режим работы процессора

30 Дек 2017

Защищенный режим работы процессора

Термин Big Data должен был появиться в тот же день, когда очевидной стала несостоятельность сегментной организации оперативной памяти, реализованная в архитектуре x86. Ограничение адресного про­стран­ства, обслуживаемого 20-битной адресной шиной, вызвало к жиз­ни ряд новых подходов в работе процессоров Intel. Краеугольным камнем для них стала 32-битность в защищенном режиме. Пре­пят­ст­ви­ем — про­б­ле­ма совместимости с «реальной ад­ре­са­ци­ей». На какие компромиссы по­шли разработчики процессорной ар­хи­тек­ту­ры, на многие годы опре­де­лив­шей фи­ло­со­фию программного обеспечения персональных ком­пью­те­ров?

Защищенный режим или Protected Mode, появившийся в процессоре 80286, сохранив понятия сегмента и сме­ще­ния, и радикально модернизировал механизм сегментации, предложив концепцию логического (виртуального) адреса.

В защищенном режиме работы процессора содержимое сегментных регистров используется не как слагаемое при вычислении адреса, а как индекс или селектор, выбирающий дескриптор сегмента в специальной структуре, на­зы­ва­е­мой де­скрип­тор­ной таблицей и описывающей свойства каждого сегмента: базовый адрес, размер и ат­ри­бу­ты, связанные с уп­рав­ле­ни­ем привилегиями и защитой памяти. Изящность такой метаморфозы позволяет пред­по­ло­жить, что за­ду­ма­на она бы­ла ин­же­не­ра­ми Intel еще на момент создания архитектуры реального режима 8086.

Идея алгоритма по преобразованию логического адреса в физический
Рис 1. Идея алгоритма по преобразованию логического адреса в физический

О таблице дескрипторов

Программа, переключающая процессор в защищенный режим, должна подготовить в памяти управляющие струк­ту­ры, используемые процессором в этом режиме. Одна из таких структур — таблица дескрипторов сегментов, опи­сы­ва­ю­щая свойства адресуемых областей памяти.

  • При старте платформы и выполнении процедуры POST, обязанности по управлению контекстом процессора возлагаются на BIOS или UEFI, что подразумевает использование таблиц страниц и сегментов, построенных firmware.
  • При выполнении Legacy-boot, firmware передает управление загрузчику в 16-битном режиме Real Mode. Переключение процессора в Protected Mode и управление его контекстом входит в обязанности ОС, либо не выполняется, в случае 16-битной системы MS-DOS. Вместе с тем, до момента передачи управления от BIOS к загрузчику ОС, в частности во время инициализации и тестировании памяти, процессор может временно переводиться в Protected Mode процедурами POST.
  • При UEFI-boot, в момент передачи управления от firmware к загрузчику операционной системы, процессор уже работает в Protected Mode, тем не менее, ОС повторно инициализирует CPU, предварительно создав собственные таблицы дескрипторов и сегментов, прекращая полномочия контекста UEFI, вызовом функции ExitBootServices().

Функция ExitBootServices завершает выполнение UEFI BIOS
Рис 2. Функция ExitBootServices завершает выполнение UEFI BIOS

Еще со времен i386, инженеры Intel предусмотрели два вида дескрипторных таблиц: локальной (Local Description Table), ориентированной на поддержку пользовательских приложений, и глобальной (Global Description Table), пред­на­зна­чен­ной для управления сегментами операционной системы. Вид дескрипторной таблицы определяется битом #2 селектора сегмента. Как известно, разработчики многих операционных систем зачастую игнорировали данный вид гибкости.

Виртуальная память

В 32-битном процессоре 80386, сегментация была дополнена механизмом трансляции страниц или Paging, ле­жа­щим в основе организации виртуальной памяти.

Дескриптор сегмента кода, используемый в 32-битном режиме (IA32), определяет базовый адрес, размер и атрибуты сегмента
Дескриптор сегмента кода, используемый в 32-битном режиме (IA32),
определяет базовый адрес, размер и атрибуты сегмента

Дескриптор сегмента кода, используемый в 64-битном режиме (IA32e), поля базового адреса и размера не используются
Дескриптор сегмента кода, используемый в 64-битном режиме (IA32e),
поля базового адреса и размера не используются

Позднее, в реализации 64-битной версии x86, где первую скрипку играла компания AMD, роль сегментации была существенно уменьшена, а управление базовым адресом и размером диапазонов памяти, перемещено на уровень трансляции страниц.

Теги: