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

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

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

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

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

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

А) Индекс (номер в таблице) (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

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

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

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: