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

В отличие от реального режима, когда в сегментном регистре находится базовый адрес сегмента, в защищенном режиме в нем находится более сложная информация, которая называется селектором. Селектор служит для поиска дескриптора (описателя) сегмента в таблице. Относительный номер дескриптора в таблице называется INDEX. Его значение указывается в селекторе с 3 по 15 разряд. Остальные разряды используются следующим образом.

RPL – уровень прав доступа вызывающей программы.TI – тип дескрипторной таблицы: 0 — глобальная дескрипторная таблица, 1 — локальная дескрипторная таблица.

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

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

Источник



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

Возможности 80386 используются полностью, если он работает в режиме ВА. В этом режиме пространство исполнительных адресов расширяется до 4 Гбайт (2**32 байт), а область виртуальных адресов — до 64 Тбайт (2**64 байт), т.е. практически не ограничена. Режим ВА позволяет использовать дополнительные команды, специально оптимизированные для поддержки многозадачных операционных систем.

Механизм (схема) адресации

В формировании исполнительного адреса участвуют два компонента: 16-ти битовый селектор, используемый для определения адреса базы сегмента и 32-х битовый эффективный адрес.

Сформированный исполнительный адрес является физическим адресом, если не используется механизм страничной адресации. В противном случае, он преобразуется в физический. В режиме ВА селектор используется, как индекс, указывающий операционной системе на определенный элемент специальной таблицы, в которую помещен 32-х битовый адрес базы данного сегмента. Физический адрес формируется сложением базового адреса с 32-х битовым смещением.

Страничная адресация памяти является дополнительным механизмом управления памятью, используемым только в режиме ВА. Этот механизм позволяет преобразовывать исполнительные адреса в физические.

Сегментация

Сегментация — это один из методов управления памятью. Он является основой защиты памяти. Сегменты — самостоятельные области памяти, имеющие собственные атрибуты. Например, в сегменте могут размещаться коды программ или таблицы операционной системы. Вся информация о сегменте запоминается в 8-ми байтовой структуре, называемой дескриптором. Все дескрипторы храняться в аппаратно реализуемых таблицах.

  • PL. Уровень привилегированности — один из 4-х уровней привилегированности. Наиболее привилегированный уровень 0, наименее — 3.
  • RPL. Запрашиваемый уровень привилегированности — уровень привилегированности конкретного подключаемого селектора. RPL определяется двумя младшими битами селектора.
  • DPL. Уровень привилегированности дескриптора — это младший уровень привилегированности, который имеет задача, обращающаяся к дескриптору (и к связанному с ним сегменту). DPL определяется битами 6 и 5 байта.
  • CPL. Текущий уровень привилегированности — уровень привилегированности, который имеет текущая выполняемая задача. Он равен уровню привилегированности выполняемого кодового сегмента. CPL может быть также определен проверкой двух младших битов CS регистра, получаемых для соответствующих кодовых сегментов.
  • EPL. Эффективный привилегированный уровень — наименьший уровень из RPL и DPL, т.е. цифровой максимум из RPL и DPL.

Задача (процесс) — совокупность выполняемых программ.

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

Таблицы дескрипторов определяют все сегменты, которые используются в системе на базе 80386.

Каждая из таблиц храниться в своей области памяти и имеет размер от 8 байт до 64 кбайт. Каждая таблица может содержать до 8к 8-ми байтных дескрипторов. Старшие 13 бит селектора используются в качестве индекса дескрипторной таблицы. Для обращения к таблицам имеются специальные регистры, хранящие 32-х битовый исполнительный адрес и 16 битовую границу данной таблицы.

Эти регистры GDTR, LDTR и IDTR загружаются командами LGDT, LLDT, LIDT и сохраняются командами SGDT, SLDT и SIDT. Манипуляция таблицами осуществляется операционной системой при помощи привилегированных команд.

Таблица глобальных дескрипторов (GDT)
Таблица локальных дескрипторов (LDT)

Таблица LDT содержит дескрипторы, используемые в данной задаче. Обычно ОС разрабатываются таким образом, чтобы каждая задача имела отдельную LDT. LDT может содержать только дескрипторы команд, данных, стека, номера задачи и вызова номера. Таблицы LDT служат механизмом для изоляции сегментов команд и данных отдельных задач от ОС, в то время, как GDT хранит дескрипторы сегментов, являющихся общими для всех задач. Сегмент не может быть доступен задаче, если его дескриптор отсутствует внутри текущей LDT или GTR. Это обеспечивает защиту сегментов задач и в то же время, совместное использование глобальных данных различными задачами. В отличие от 6-ти байтовых GDT и IDT регистров, которые хранят базовый адрес и ограничитель, видимая часть регистра LDT хранит только 16 битовый селектор. Этот селектор определяет дескриптор LDT в GDT.

Таблица дескрипторов прерываний (IDT)

IDT содержит дескрипторы, указывающие расположение 256 подпрограмм обслуживания прерываний. IDT может хранить только вектора задач, вектора прерываний и вектора трассировок. IDT должна быть не менее, чем 256 байтовой, чтобы хранить дескрипторы 32 прерываний, зарезервированных ф. Intel. Каждое прерывание, используемое в системе, должно быть описано в IDT. IDT используется при выполнении команд INT, внешних запросов прерываний в особых ситуациях.

Дескрипторы

Биты атрибутов дескриптора

Объект, на который указывает селектор сегмента, называется дескриптором. Дескриптор — это 8-ми байтная величина, определяющая атрибуты данной области исполнительных адресов, т.е. сегмента. Эти атрибуты включают 32-х битовую базу исполнительного адреса сегмента, 20-ти битовую длину, а также единицу, в которых задается длина сегмента (страница или байт), уровень защиты, уровни чтения, записи и выполнения, тип сегмента и длина операндов (16 или 32). Вся информация об атрибутах сегмента заключена в 12 битах дескриптора сегмента.

Все сегменты 80386 имеют 3 единых поля: P, DPL, S.

Дескрипторы команд и данных (S=1)

Формат такого дескриптора и байт прав доступа приведены на рис.4-6 и табл.4-1 соответственно.

Дескрипторы сегментов команд и данных имеют несколько общих полей: A, G.

A — бит используется ОС для получения статистики по обращению к данному сегменту.

G — бит указывает величину, в которых указывается размер сегмента. Длина сегмента может быть 1 Мбайт (G=0, т. е. задан в байтах) или 4 Гбайт (G=1, т.е. задан в страницах — 2**20 страниц по 4 Кбайт каждая).

Система на базе 80386 может включать сегменты как байтовой размерностью, так и со страничной размерностью, если включен блок страничной адресации.

Бит Е указывает, какой из сегментов выполняется: командный (E=1, S=1) или данных (E=0, S=1).

Кодовый сегмент может находится в стадии только выполнения (бит R=0) или выполнения/чтения (R=1). Запись в кодовый сегмент не возможна.

Замечания.

Кодовые сегменты могут изменяться, через вымышленные имена (метки). Метки приписываются сегментам данных, которые располагаются в некотором пространстве исполнительных адресов, как сегменты команд.

Бит D указывает размерность операндов и эффективных адресов (32 бита при D=1, 16 бит при D=0). Это позволяет выполнять команды для 80286.

Другим атрибутом сегментов команд является бит согласования С. При С=1 согласованные сегменты могут выполняться в режиме разделения программами, имеющими различные уровни привилегированности.

Похожее:  Шины это специализированный процессор

Сегменты, определяемые как сегменты данных (E=0, S=1), могут быть двух типов: сегменты стека и сегменты данных. Бит направления расширения (ED) определяет тип сегмента. Если сегмент стековый, то смещение должно быть больше, чем граница сегмента. Для сегмента данных смещение должно быть меньше или равно границе сегмента. Другими словами, сегменты стека начинаются от базы исполнительного адреса + максимального размера сегмента и размещаются в сторону уменьшения до базы исполнительного адреса + граница. Сегмент данных начинается с базы исполнительного адреса и кончается границей сегмента.

Бит записи W управляет записью в сегменте. При W=0 сегменты данных работают только на чтение. Стековые сегменты должны иметь W=1.

Бит B указывает размерность регистра — указателя стека. Если В=1, то ESP работает как 32-х битовый регистр и верхняя граница стека FFFFFFFF. Если В=0 — все команды работы со стеком используют SP (16 битовый) и верхняя граница стека FFFF.

Форматы системных дескрипторов

Эти дескрипторы содержат информацию о системных таблицах, задачах и паролях. Системный дескриптор 80386 имеет 32 разрядную базу и 20 битовую границу, системный дескриптор 80286 соответствует 24 и 16 бит (старшие 16 бит равны 0).

Дескрипторы LDT (S=0, TYPE=2)

Дескрипторы LDT содержат информацию о таблицах локальных дескрипторов. Таблица локальных дескрипторов содержит дескрипторы сегментов, используемых конкретной задачей. Команда загрузки регистра LDT должна иметь нулевой уровень привилегированности (поле DPL игнорируется).

Дескрипторы TSS (S=0, TYPE = 1, 3, 9, B)

Дескриптор сегмента состояния задачи содержит информацию о местонахождении, размере и уровне привилегированности сегмента состояния задачи (TSS). TSS — сегмент специального формата, который содержит всю необходимую информацию о задаче и поле, обеспечивающее связь задач между собой. Поле TYPE указывает на текущую исполняемую задачу (из цепочки активных задач) или доступный TSS. Поле TYPE также указывает, используется ли TSS для МП 286 или 386. Регистр задач (TR) хранит селектор, который указывает текущий TSS.

Дескрипторы шлюзов (S=0, TYPE=4-7, C, F)

Шлюзы используются для управления доступом к определенным точкам внутри управляющего кодового сегмента.

  1. шлюзы вызовов;
  2. шлюзы задач;
  3. шлюзы прерываний;
  4. шлюзы трассировок.

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

Шлюз вызова, главным образом, используются для передачи управления программам с более высоким уровнем привилегированности.

  1. байт доступа;
  2. указатель длины (селектор и смещение), который указывает начало программы;
  3. счетчик слов, определяющий количество параметров, передаваемых из стека вызывающей программы в стек вызываемой программы.

Поле счетчика слов используется только в шлюзах вызыва, которые изменяют уровень привилегированности, в остальных типах это поле игнорируется.

Шлюзы прерываний и трассировок используют поля селектора назначения и смещения назначения дескриптора для указания начала программ управления прерыванием или трассировкой. Различия между шлюзами прерываний и шлюзами трассировок заключается в том, что шлюз прерывание выключает прерывания (сбрасывает бит IF) в то время, как шлюз трассировки нет.

Шлюзы задач используются при переключении задач. Шлюзы задач могут обращаться только к сегменту состояния задач (TSS), поэтому используется только селекторная часть а смещение игнорируется.

Прерывание 13 формируется, когда селектор назначения указывает на некорректный тип дескриптора.

Формат байта прав доступа одинаков для дескрипторов всех шлюзов. Р=1 — указывает на то, что шлюз открыт. Р=0 — шлюз закрыт, при этом, если необходимо, формируется прерывание 11. DPL указывает уровень привилегированности и указывает, в каких случаях данный дескриптор может использоваться задачей (см. 4.4). Бит 4 поля S должен быть равен 0 и тем самым указывать, что это дескриптор управления системой.

Поле селектора
  • индикатор LDT или GDT (TI);
  • смещение (индекс) внутри таблицы дескрипторов;
  • уровень привилегированности (RPL).
  • Бит TI указывает на одну из двух таблиц. Поле индекса выбирает один из 8к дескрипторов из таблицы дескрипторов. Биты RPL обеспечивают высокоскоростную проверку атрибутов привилегированности селектора.

КЭШ — ЗУ дескрипторов сегментов

В дополнение к величине селектора каждый сегментный регистр имеет связанный с ним регистр (КЭШ ЗУ) дескриптора сегмента. Когда происходит изменение содержимого сегментного регистра, 8-ми байтный дескриптор, связанный с этим селектором, автоматически переписывается в процессор. Эта информация используется до тех пор, пока не потребуется доступ к другому сегменту. Содержимое дескрипторных регистров программно недоступно (невидимо для программистов). При программном изменении дескрипторных таблиц, хранящихся в ЗУ, необходимо осуществлять перезагрузку дескрипторных регистров.

Форматы регистров дескрипторов

Содержимое этих регистров зависит от режима работы МП. Формат регистров для режима RM приведен на рис.4-11.

Для обеспечения совместимости с архитектурой 8086 база устанавливается в течение 16-ти тактов в соответствии со значением селектора, граница фиксирована и равна 0000FFFF, а атрибуты соответствуют наличию и полной доступности сегмента. В РМ внутренний уровень привилегированности всегда максимальный (=0), поэтому команды ввода — вывода и другие привилегированные команды могут выполняться.

Формат регистров в режиме РМ представлен на рис.4-12.

В РМ значения полей определяется содержимым дескриптора сегмента индексированного селектором.

Формат регистра для режима виртуального 8086 приведен на рис.4-13.

В отличие от режима RM виртуальная программа имеет минимальный уровень привилегированности (=3), обеспечивая трассировку всех команд IOPL и команд с нулевым уровнем привилегированности.

Источник

Защищенный режим функционирования процессоров

Защищенный режим Protected Mode, точнее Protected Virtual Address Mode (защищенный режим виртуальной адресации), является основным режимом работы 32-разрядных процессоров. В этом режиме процессор позволяет адресовать до 4 Гбайт (до 64 Гбайт в Р6) физической памяти, посредством которой, при использовании механизма страничной адресации, могут отображаться до 64 Тбайт виртуальной памяти каждой задачи.

Режим виртуального процессора 8086 — Virtual 8086 Mode или V86 — является особым состоянием задачи защищенного режима, в котором процессор функционирую как 8086 с возможностью использования 32-разрядных адресов и операндов.

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

Основным защищаемым ресурсом является память.

Защита памяти основана на сегментации, атрибутах и привелегиях.

Сегмент – это блок пространства памяти. Максимальный размер сегмента — 4 Гбайт. Сегменты памяти выделяются задачам операционной системой, но в реальном режиме, любая задача может переопределить значение сегментных регистров, задающих положение сегмента в пространстве памяти, и «залезть» в чужую область данных или кода. В защищенном режиме сегменты тоже распределяются операционной системой, но прикладная программа сможет использовать только разрешенные для нее сегменты памяти, выбирая их с помощью селекторов из предварительно сформированных таблиц дескрипторов сегментов.

Защита памяти с помощью сегментации не позволяет:

Ÿ использовать сегменты не по назначению (например, пытаться трактовать область данных как коды инструкций);

Ÿ нарушать права доступа (пытаться модифицировать сегмент, предназначенный только для чтения, обращаться к сегменту, не имея достаточных привилегий и т. п.);

Ÿ адресоваться к элементам, выходящим за лимит сегмента;

Ÿ изменять содержимое таблиц дескрипторов (то есть параметров сегментов), не имея достаточных привилегий.

Четырехуровневая иерархическая система привилегий предназначена для управления использованием привилегированных инструкций и доступом к дескрипторам. Уровни привилегий нумеруются от 0 до 3, нулевой уровень соответствует максимальным (неограниченным) возможностям доступа и отводится для ядра операционной системы. Уровень 3 имеет самые ограниченные права и обычно предоставляется прикладным задачам.

Дескрипторы и таблицы

Дескрипторы представляет собой 8-байтные структуры данных, содержащих параметры сегментов. Дескриптор определяет положение сегмента в памяти, величину сегмента в байтах (лимит), его назначение и характеристики защиты. Все дескрипторы хранятся в таблицах, обращение к которым поддерживается процессором аппаратно. Число элементов в таблице колеблется от 1 до 8192. Каждую таблицу адресует соответствующий регистр. Команды загрузки регистров таблиц LGDT, LIDT и LLDT являются привилегированными (выполняются только на уровне привилегий 0).

Похожее:  Какой кулер для процессора амд лучше

Глобальная таблица (GDT) содержит дескрипторы, доступные всем задачам. Она может содержать дескрипторы любых типов, кроме дескрипторов прерываний и ловушек. Нулевой элемент этой таблицы процессором не используется.

Локальная таблица (LDT) может быть собственной для каждой задачи и содержит только дескрипторы сегментов, шлюзы задач и вызовов. Сегмент недоступен задаче, если его дескриптора нет в текущий момент ни в GDT, ни в LDT.

Таблица дескрипторов прерываний, используемая в защищенном режиме, может содержать описания до 256 прерываний. Ссылка на элементы IDT происходит по командам INT, аппаратным прерываниям и исключениям процессора.

Дескрипторы сегментов кода и данных определяют базовый адрес, размер сегмента, права доступа (чтение, чтение/запись, только исполнение кода или исполнение/ чтение), а для систем с виртуальной памятью еще и присутствие сегмента в физической памяти (рисунок 3.10 и 3. 11)

Базовый адрес сегмента данных
Размер сегмента G B AVL P DPL E W A

Рисунок 3.10– Дескриптор сегмента данных

В атрибутах сегментов поля имеют следующее назначение:

Ÿ A (Accessed) – обращение. А=0– к сегменту не было обращения, А=1– селектор данного сегмента загружался в регистр сегмента или для него выполнялась команда тестирования;

Ÿ W (Writeable) – разрешение (W=1) или запрет (W=0) записи данных в сегмент;

Ÿ Е (Expand Down) –направление расширения, Е=0– вверх, Е=1– расширение вниз (стек, у которого смещение должно превышать значение лимита);

Ÿ DPL (Descriptor Privilege Level) –привилегии сегмента;

Ÿ Р (Present) – присутствие в памяти. При Р=1 сегмент отображен в физической памяти, при Р=0 отображения нет;

Ÿ В – определяет верхнюю границу сегмента, при В=0 – 64 Кбайт, при В=1 максимальный размер сегмента 4 Гбайт.

Дескриптор сегмента кода показан на рисунке 3.12. Лимит указывает на его последний байт, а биты атрибутов принимают следующие значения:

Ÿ С (Conforming, подчиненность или конформность). при С=1 команда может исполняться, если уровень привилегий (CPL) не ниже уровня привилегий дескриптора (DPL), при С=0 (неподчиненный сегмент) управление к данному сегменту может передаваться только, если CPL=DPL;

Ÿ R (Readable) – разрешение (R=1) или запрет (R=0) чтения сегмента.

Ÿ Бит D (Default Operation Size) в предпоследнем байте определяет разрядность адресов и операндов при D=0 – 16 бит, D=1 – 32 бит.

Переключение задач

Для многозадачных и многопользовательских операционных систем важна способность процессора к быстрому переключению выполняемых задач. Операция переключения задач процессора (Task Switch Operation) сохраняет состояние процессора и связь с предыдущей задачей, загружает состояние новой задачи и начинает ее выполнение.

Переключение задач выполняется по инструкции межсегментного перехода (JMP) или вызова (CALL), по аппаратным и программным прерываниям и исключениям.

Дескриптор TSS указывает на сегмент, содержащий полное состояние процессора (рисунок 3.12).

Дескриптор шлюза задачи содержит селектор, указывающий на дескриптор TSS.

Каждая задача имеет TSS. Сегменты TSS содержат образы регистров процессора, раздельные указатели стеков для уровней привилегий 0, 1 и 2, а также обратную ссылку на селектор TSS вызвавшей задачи. Свободное поле TSS может использоваться по усмотрению ОС. Последним элементом TSS должен быть байт OFFh

Карта разрешения ввода/вывода (I/O Permission Bit Map), расположенная в конце TSS имеет по одному биту на каждый адрес портов ввода/вывода. Разрешению обращения соответствует нулевое значение бита. Максимальный размер таблицы (2000h), соответствующий всем 64 Кбайт адресов. Порты с адресами, не попавшими в таблицу, считаются недоступными.

Текущий сегмент TSS идентифицируется специальным регистром задачи TR (Task Register). Этот регистр содержит селектор, ссылающийся на дескриптор текущего TSS. Программно-невидимые регистры базового адреса и лимита, связанные с TR, загружаются при загрузке в TR нового селектора.

Страничное управление памятью

Страничное управление (Paging) является средством организации виртуальной памяти с подкачкой страниц по запросу (Demand-Paged Virtual Memory) и оперирует с памятью, как с набором страниц одинакового размера. В момент обращения страница может присутствовать в физической оперативной памяти, а может быть выгруженной на внешнюю (дисковую) память. При обращении к выгруженной странице памяти процессор вырабатывает исключение #PF — отказ страницы, и программный обработчик исключений выполняет свопинга — «подкачку» отсутствующей страницы с диска. Страницы не имеют прямой связи с логической структурой данных или программ.

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

Рисунок 3.12 – Сегмент состояния задачи

В первых моделях 32-разрядных процессорах (начиная с 80386) размер страницы составлял 4 Кбайт, Начиная с Pentium, страницы увеличились до 2 Мбайт, а затем и до 4 Мбайт с 36-битной физической адресацией (режим PSE-36).

Базовый механизм страничного управления использует двухуровневую табличную трансляцию линейного адреса в физический (рисунок 3.13). и включается установкой бита PG=1 в регистре CRO. Механизм имеет три части: каталог страниц (Page Directory), таблицы страниц (Page Table) и собственно страницы (Page Frame).

Каталог страниц размером 4 Кбайт содержит 1024 32-битных строки PDE (Page Directory Entry), Каждая строка (рисунок 3.14, а) содержит 20 старших бит адреса таблицы следующего уровня (младшие биты этого адреса всегда нулевые) и признаки (атрибуты) этой таблицы. Индексом поиска в каталоге страниц являются 10 старших бит линейного адреса (А22-А31). Физический адрес каталога страниц (Page Directory Physical Base Address) хранит регистр CR3. Его младшие 12 бит всегда нулевые (каталог выравнивается по границе страницы) Каждая таблица страниц также имеет 1024 строки РТЕ (Page Table Entry) аналогичного формата (рисунок 3.14,б), содержащих базовый физический адрес (Page Frame Address) и атрибуты самих страниц. Индексом поиска в таблице являются биты А12-А21 линейного адреса.

Физический адрес получается из адреса страницы, взятого из таблицы, и младших 12 бит линейного адреса. Как видно из схемы, обращение при каждой операции доступа к памяти к таблицам, расположенным в памяти, существенно снижает производительность процессора. Для компенсации этого замедления в

процессор введен буфер ассоциативной трансляции TLB (Translation Look aside Buffer) который хранит интенсивно используемых строк таблиц.

Рисунок 3.13 – Базовый механизм страничной переадресации

В процессорах TLB представляет собой четырехканальный наборно-ассоциативный кэш на 32 строки таблиц трансляции. Такой размер позволяет хранить информацию о трансляции 128 Кбайт памяти, что дает коэффициент кэш-попаданий 98%, то есть только 2% обращений к памяти требуют дополнительных обращений к таблицам. В процессоре Pentium имеются раздельные TLB для инструкций и данных, а в Р6 буферы разделены еще и по размеру обслуживаемых страниц (4 Кбайт и 2 Мбайт/4 Мбайт).

31 12 11 9 8 7 6 5 4 3 2 1 0

Базовый адрес таблицы страниц OS Rez G Р S А Р С D Р W Т U / S R / W Р

31 12 11 9 8 7 6 5 4 3 2 1 0

Базовый адрес страницы (PFA) OS Rez G D А Р С О Р W Т U / S R / W Р

Рисунок 3.14. – Структура 32-битных элементов страничного преобразования: а – строка каталога (РDЕ), б – строка таблицы (РТЕ)

При страничном режиме, блок страничной переадресации получает 32-битный линейный адрес от блока сегментации и сравнивает старшие 20 бит со значениями из TLB, и, в случае попадания, физический адрес вычисляется по начальному адресу страницы, полученному из TLB, а затем выводится на шину адреса. Если соответствующей строки в TLB нет, производится чтение строки из страничного каталога.

Похожее:  Текстовый редактор майкрософт ворд назначение основные возможности организация рабочего места

Обработчик исключения #PF, подкачивает страницы по запросу. Он копирует страницу с внешней памяти в оперативную, загружает адрес страницы в строку таблицы TLB и устанавливает бит присутствия Р.

Источник

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

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

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

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

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

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

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

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

  • При старте платформы и выполнении процедуры POST, обязанности по управлению контекстом процессора возлагаются на BIOS или UEFI, что подразумевает использование таблиц страниц и сегментов, построенных firmware.
  • При выполнении Legacyboot, firmware передает управление загрузчику в 16-битном режиме Real Mode. Переключение процессора в Protected Mode и управление его контекстом входит в обязанности ОС, либо не выполняется, в случае 16-битной системы MS-DOS. Вместе с тем, до момента передачи управления от BIOS к загрузчику ОС, в частности во время инициализации и тестировании памяти, процессор может временно переводиться в Protected Mode процедурами POST.
  • При UEFIboot, в момент передачи управления от 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, роль сегментации была существенно уменьшена, а управление базовым адресом и размером диапазонов памяти, перемещено на уровень трансляции страниц.

Источник

Защищенный режим

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

Суть защищённого режима заключается в следующем. Программист и разрабатываемые им программы используют логическое адресное пространство (виртуальное адресное пространство), размер которого может составлять 1024 Мбайт (для 80286). Логический адрес преобразуется в физический адрес автоматически с помощью схемы управления памятью (MMU). Благодаря защищённому режиму, в памяти можно хранить только ту часть программы, которая необходима в данный момент, а остальная часть могла храниться во внешней памяти (например, на жёстком диске). В случае обращения к той части программы, которой нет в памяти в данный момент, операционная система может приостановить программу, загрузить требуемую секцию кода из внешней памяти и возобновить выполнение программы. Следовательно, становятся допустимыми программы, размер которых больше объема имеющейся памяти. Другими словами, пользователю кажется, что он работает с большей памятью, чем на самом деле. Однако реализация системы виртуальной памяти была еще далека от совершенства. Для использования защищённого режима необходима многозадачная операционная система, например Microsoft Windows 3.0, IBM OS/2 или UNIX.

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

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

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

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

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

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

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

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

Источник