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

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

Термин 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, роль сегментации была существенно уменьшена, а управление базовым адресом и размером диапазонов памяти, перемещено на уровень трансляции страниц.