Средства поддержки сегментной организации памяти в процессорах Пентиум

(собственно ответ на билет)

 

Процессор Пентиум – 32 разрядный, поэтому максимальный размер физической ОП, на которую он может отображать ВАП – 4 гига.

 

Процессор Пентиум может поддерживать как сегментную, так и сегментно-страничную организацию памяти.

· Сегментные средства работают всегда (верхний уровень);

· Страничные средства могут быть вкл/выкл (это нижний уровень);

Это делается в управляющем регистре CR0 – путем установки однобитного признака PE (Paging Enabling) в 0/1.

 

Итак, Пентиум работает в сегментном режиме.

1. У него есть ВАП, поделенный на СЕГМЕНТЫ.

2. У каждого сегмента есть описание – ДЕСКРИПТОР СЕГМЕНТА.

Формат дескриптора сегмента (размер – 8 байт)

Структура у дескриптора немного странная, это все пережитки истории.

Но в целом основные поля:

3. База – занимает 32 бита (4 байта) – содержит базовый адрес сегмента.

На рисунке желтая, видно, что состоит из 3 частей

4. Размер – занимает 24 бита (3 байта)

§ Поле G – единица измерения:

- 0 – байты (максимальный р-р сегмента – 64 кб)

- 1 – страницы по 4 кб

5. 5-й байт дескриптора (в красной рамке – байт доступа). – 8 бит (1 байт)

Он содержит:

§ Бит присутствия Р (1 бит):

o - 0 – сегмент не в памяти,

o - 1 – в памяти

§ DPL (Descriptor Privilege Level) – уровень привилегий для доступа к дескриптору (2 бит)

§ 5 бит – поля типа сегмента:

o - сегмент данных

o - сегмент кода

o - системный сегмент (GDT, TSS)

o И способ использования сегмента (чтение, запись, выполнение)

 

3. Дескрипторы объединяются в ТАБЛИЦЫ ДЕСКРИПТОРОВ (2 типа):

· Глобальная таблица дескрипторов(GDT) – сегменты межпроцессного взаимодействия, сегменты ОС, общие сегменты для всех процессов

· Локальная таблица дескрипторов (LDT) – у каждого процесса своя.

· (IDT – Interrupt Descriptor Table –таблица дескрипторов прерываний – используется системой прерываний для их обработки)

GDT – одна

LDT – столько, сколько процессов, при этом в каждый момент времени используется только одна.

Таблицы GDT и LDT размещены в памяти в виде отдельных сегментов.

Таблица GDT кроме всего прочего, хранит в себе данные о себе самой и обо всех LDT.

 

Адреса GDT и LDT хранятся в регистрах системных адресов GDTR и LDTR соответственно.

В GDTR хранится 32 разрядный физический адрес

В LDTR – индекс дескриптора в таблице GDT, а уже адрес нужной LDT берется из этой записи.

 

Итак, процесс обратился за памятью. Что происходит?

У него есть СЕЛЕКТОР и СМЕЩЕНИЕ.

· Селектор определяет ВИРТУАЛЬНЫЙ СЕГМЕНТ.

· Смещение – понятно.

 

· Селектор помещается в один из СЕГМЕНТНЫХ РЕГИСТРОВ процесса

Структура этого селектора:

А) Индекс(номер в таблице) (13 бит) – всего сегментов может быть 2 13 (8 килобайт) каждого типа, т.е. 16 килобайт (2 16). 16Кбайт * 4 Гбайта = 64 Тбайт – максимальный размер ВАП. До фига, в общем.

Б) Таблица, где его искать: глобальная или локальная (1 бит)

В) Требуемый уровень привилегий, чтобы с ним работать RPL (2 бита)

 

· Смещение задается МАШИННОЙ ИНСТРУКЦИЕЙ (под него отведено 32 бита – отсюда максимальный размер сегмента – 4 Гига)

 

Вариант 1: оказалось, что нужный сегмент – в GDT:

· Адрес GDT взят из регистра GDTR

· Сложили базовый адрес с индексом сегмента, сдвинутым на 3 разряда влево (зачем, я не въехала, но не суть)

· Получили ФИЗИЧЕСКИЙ АДРЕС ДЕСКРИПТОРА СЕГМЕНТА

· Извлекли дескриптор из памяти:

o - проверили, не больше ли смещение величины сегмента (если чего - прерывание)

o - проверили права доступа – (если чего, прерывание)

o - проверили, есть ли он в памяти (бит присутствия Р) – если чего, ну, вы поняли.

· Если все хорошо – приплюсовали смещение и радуемся.

 

Вариант 2: оказалось, что нужный сегмент – в LDT:

· Добываем базовый адрес таблицы LDT из GDT и LDTR

· Ну а дальше все по накатанной.

 

Таким образом, ОС, работая на Пентиуме должна всего лишь:

- сформировать таблицы GDT и LDT

- загрузить GDT в оперативу

- загрузить указатели на них в регистры GDTR и LDTR

- выключить поддержку страничной адресации

 

Все. Все остальное делает процессор САМ:

· быстро аппаратно преобразует виртуальные адреса в физические

· гарантирует защиту данных

А вот про защиту – это уже другая история, а именно - следующий вопрос.