Interested Article - Защищённый режим

Микропроцессор Intel 80386
Пример использования кольца привилегий в операционной системе с использованием всех колец
Виртуальные сегменты 80286
Общий метод использования подкачки для создания виртуального адресного пространства
Пейджинг (на Intel 80386) с размером страницы 4K

Защищённый режим (режим защищённой виртуальной адресации) — режим работы x86-совместимых процессоров . Частично был реализован уже в процессоре 80286 , но там существенно отличался способ работы с памятью, так как процессоры ещё были 16-битными и не была реализована страничная организация памяти . Первая 32-битная реализация защищённого режима — процессор Intel 80386 . Применяется в совместимых процессорах других производителей. Данный режим используется в современных многозадачных операционных системах, Windows , Linux , macOS .

Похожий режим применялся фирмой Digital Equipment (DEC) для 32-разрядных компьютеров: VAX-11 .

Особенности процессора 80286

В процессоре 80286 , помимо реального режима , был реализован также защищённый режим. В защищённом режиме процессор может адресовать до 16 Мбайт физической памяти и 1 Гбайт виртуальной (16384 сегмента по 64 кбайт) за счёт изменения механизма адресации. Переключение из реального режима в защищённый происходит программно и относительно просто, однако для обратного перехода необходим аппаратный сброс процессора. Для отслеживания текущего режима работы процессора используется регистр слова состояния машины (MSW). Программы реального режима без модификаций в защищённом режиме исполняться не могут, так же как и программы BIOS машины.

Суть защищённого режима в следующем: программист и разрабатываемые им программы используют логическое адресное пространство, размер которого может составлять 1 гигабайт. Логический адрес преобразуется в физический адрес автоматически с помощью схемы управления памятью (MMU). При этом содержимое сегментного регистра не связано напрямую с физическим адресом, а является номером сегмента в соответствующей таблице. Благодаря защищённому режиму, в памяти может храниться только та часть программы, которая необходима в данный момент, а остальная часть может храниться во внешней памяти (например, на жёстком диске). В случае обращения к той части программы, которой нет в памяти в данный момент, операционная система может приостановить программу, загрузить требуемую секцию кода из внешней памяти и возобновить выполнение программы. Следовательно, становятся допустимыми программы, размер которых больше объёма имеющейся памяти, и пользователю кажется, что он работает с большей памятью, чем на самом деле.

Физический адрес формируется следующим образом. В сегментных регистрах хранится , содержащий индекс дескриптора в таблице дескрипторов (13 бит), 1 бит, определяющий к какой таблице дескрипторов будет производиться обращение (к локальной или к глобальной) и 2 бита запрашиваемого уровня привилегий. Далее происходит обращение к соответствующей таблице дескрипторов и соответствующему дескриптору, который содержит начальный 24-битный адрес сегмента , размер сегмента и права доступа, после чего вычисляется необходимый физический адрес путём сложения адреса сегмента со смещением из 16-разрядного регистра.

Особенности процессоров 80386 — 80486

С появлением 32-разрядных процессоров 80386 фирмы Intel процессоры могут работать в трёх режимах: реальном , защищённом и виртуального процессора 8086.

В защищённом режиме используются полные возможности 32-разрядного процессора — обеспечивается непосредственный доступ к 4 Гбайт физического адресного пространства и многозадачный режим с параллельным выполнением нескольких программ ( процессов ). Собственно говоря, многозадачный режим организует многозадачная операционная система, однако микропроцессор предоставляет необходимый для этого режима надежный механизм защиты задач друг от друга с помощью четырёхуровневой системы привилегий . Также в этом режиме доступна страничная организация памяти, повышающая уровень защиты задач друг от друга и эффективность их выполнения.

В процессоре i386 компания Intel учла необходимость лучшей поддержки реального режима, потому что программное обеспечение к времени его появления не было готово полностью работать в защищённом режиме. Поэтому, например, в i386, возможно переключение из защищённого режима обратно в реальный (при разработке 80286 считалось, что это не потребуется, поэтому на компьютерах с процессором 80286 возврат в реальный режим осуществляется схемно — через сброс процессора).

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

Страничная организация памяти

Вся физическая память делится на страницы фиксированного размера (4 К Байт , 2 МБ или 4 МБ, в x86_64 также 1 ГБ). Каждая страница, независимо от размера, выравнена по границе 4 К Байт .

Основная мысль сводится к формированию таблиц описания памяти, которые определяют состояние её отдельных сегментов/страниц и т. п. При нехватке памяти операционная система может выгрузить часть данных из оперативной памяти на диск, а в таблицу описаний внести указание на отсутствие этих данных в памяти. При попытке обращения к отсутствующим данным процессор сформирует исключение #PF (разновидность прерывания) и отдаст управление операционной системе, которая вернёт данные в память, а затем вернёт управление программе. Таким образом для программ процесс подкачки данных с дисков происходит незаметно.

Линейная адресация

Линейная адресация памяти — схема адресации памяти компьютера в защищённом режиме (начиная с Intel 80386 и других совместимых x86-процессорах). Используется большинством современных многозадачных ОС.

Благодаря механизму линейной адресации можно создавать любое (ограниченное только размерами оперативной памяти ) количество независимых виртуальных адресных пространств . Причём каждая страница линейного адресного пространства может находиться по любому физическому адресу или даже быть выгруженной на диск.

При использовании линейной адресации 32- битный логический адрес делится на три части:

  • Номер записи в каталоге страниц (номер таблицы страниц) — биты 31-22 (10 бит). Одна запись из каталога страниц определяет отображение 4 М Байт адресного пространства.
  • Номер записи в таблице страниц (номер страницы в таблице страниц ) — биты 21-12 (10 бит). Одна запись из таблицы страниц определяет отображение 4 К Байт адресного пространства.
  • Смещение в рамках страницы — биты 11-0 (12 бит).

При использовании страниц по 4 М Байт вторая часть отсутствует. Смещение же в странице будут определять биты 21-0 (22 бита).

Для включения линейной адресации необходимо, находясь в защищённом режиме, установить бит PG в регистре . Предварительно необходимо создать в памяти ( англ. Page Directory , PD) и таблицы страниц ( англ. Page Table , PT), после чего в регистр загрузить физический адрес каталога страниц .

Схема образования линейного адресного пространства. (Все стрелки указывают на начало страниц)

Каталог и таблицы страниц

Обе эти структуры представляют собой таблицы элементов каталога и таблицы страниц ( англ. Page Directory Entry , PDE и англ. Page Table Entry , PTE) страницы памяти по 4 К Байт .

Оба элемента занимают по 4 байта (32 бита ) и имеют похожую структуру:

Элемент каталога страниц

Элемент таблицы страниц

В жёлтых полях (Page table address, Page address) записаны старшие 20 бит адреса таблицы страниц и страницы соответственно (младшие 12 бит физического адреса всегда равны нулю — не забывайте о выравнивании).

Три бита Avl — это биты , отданные системе. В них можно записать всё что угодно.

Описание флагов:

  • Бит P ( англ. Present ) определяет наличие данной страницы или таблицы страниц в физической памяти. Если он сброшен, то процессор записывает линейный адрес отсутствующей страницы в регистр и передаёт управление обработчику #PF , который должен загрузить страницу в память (или создать её) и установить этот бит .
  • Бит RW ( англ. Read/Write ) определяет, можно ли в эту страницу что-то писать (1 — можно, 0 — нельзя).
  • Бит US ( англ. User/Supervisor ) разрешает коду с CPL =3 (код пользователя) обращаться к этой странице (при US=1).
  • Бит PWT ( англ. Page write through ) — запрещение кэша записи (немедленная запись). Используется для управления кэшированием данной страницы. Если он установлен, то запись происходит непосредственно в оперативную память. Актуально обычно в многоядерных машинах.
  • Бит PCD ( англ. Page cache disable ) — запрещение кэширования этой страницы. При обращении к такой странице, она не заносится в кэш .
  • Бит A ( англ. Accessed ). Аналогично биту A в дескрипторе сегмента , этот бит никак не влияет на работу со страницей. Он просто устанавливается процессором при первом же обращении к этой странице (чтение, запись, выполнение).
  • Бит D ( англ. Dirty , букв. грязный ) используется только в элементах таблицы страниц (PTE) для отслеживания изменений страницы. Аналогично биту A, устанавливается процессором, но только при записи на эту страницу.
  • Бит PS ( англ. Page size , только каталог страниц ) определяет размер страницы. Если сброшен, то этот элемент указывает на таблицу страниц с размером страниц 4 К Байт . Если установлен, то элемент указывает на страницу размером 4 М Байт при 32- битной физической адресации или 2 М Байт при 36-битной. Важно! Работает только при установленном бите PSE в регистре .
  • Бит PAT ( англ. Page attribute table , только таблица страниц ). — Начиная с Pentium 3 может использоваться (совместно с PCD и PWT и MSR IA32_CR_PAT) для определения политики кеширования страницы (UC, WC, WT, WP, WB, UC-) наряду с MTRR
  • Бит G ( англ. Global ). Если этот бит установлен, то адрес страницы (или таблицы страниц) никогда не удаляется из TLB кэша .

См. также

Примечания

  1. Конкретнее, в записывается полный адрес (32 бита). Напр. если программа обратилась по адресу 00001543h (то есть ко второй странице (№ 1) при страницах по 4 Кбайт), то в запишется именно это число
  2. The Unabridged Pentium 4: IA32 Processor Genealogy ISBN 0-321-24656-X «PAT Feature (Page Attribute Table)» page 797
  3. kernel.org/doc/ols/2008/ols2008v2-pages-135-144.pdf
  4. Удалить из TLB кэша можно любую страницу привилегированной командой

Литература

  • Рудаков П. И., Финогенов К. Г. Программируем на языке Ассемблера IBM PC. — М. : Энтроп, 1996.

Ссылки

Источник —

Same as Защищённый режим