Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ КСУ 1.doc
Скачиваний:
0
Добавлен:
18.09.2019
Размер:
604.16 Кб
Скачать

Определение физического адреса, формируемого I 80286, в реальном режиме

Физический адрес состоит из двух компонентов: 16-бит значения регистра сегментов и 16-бит значения смещения. Эти компоненты обрабатываются по-разному в зависимости от того, в каком из режимов – реальном или защищенном, находится МП. В реальном режиме он формирует физические адреса также как i 8088 или i 8086 и должен выполнять следующие действия:

1) Взять 16-бит значение регистра сегментов (диапазон от 0 до 65535 в десятичной или от 0000H до FFFFH в шестнадцатеричной записи) и умножить его на 16, т.е. сделать 20-бит (добавить справа к значению регистра четыре нулевых бита).

2) Полученное после выполнения первого шага значение будет находиться в диапазоне от 00000H до FFFF0H, т.е. от 0 до 1048650 в десятичной записи. Поскольку четыре младших бита всегда остаются нулевыми, это значение всегда кратно 16 в десятичной системе счисления (!).

3) Добавить к полученному 20-бит значению регистра сегментов 16-бит смещение.

4) После выполнения указанных действий формируется окончательный 20-бит физический адрес в диапазоне от 00000H до FFFFFH (переполнения не учитываются).

Схема формирования физического адреса представлена на рис. 2.

Регистр сегмента

а) 16-бит значение регистра

0000

б) 20-бит представление

Смещение

+

в) 16-бит значение смещение

Физический адрес

г) 20-бит физический адрес

Рисунок 2 – Формирование физического адреса в реальном режиме

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

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

При такой схеме организации адресации может показаться, что увеличение на единицу значения регистра сегментов для пе­рехода к следующему сегменту памяти оказывается эквивалент­ным обращению к тому же сегменту при увеличении значения смещения на 16 (предполагая, что переполнения не будет!). Та­кие коллизии постоянно возникают при выполнении программ, написанных для среды DOS. Поэтому програм­мы DOS не могут выполняться в среде защищенного режима микропроцессора 80286.

Определение физического адреса в защищенном режиме

При формировании адресов в защищенном режиме микро­процессора 80286 учитываются следующие моменты: система может адресоваться к памяти объемом до 16 Мбайт; виртуальные адреса не эквивалентны реальным (физическим) адресам памя­ти; программы могут работать с разделами, которые в момент обращения к ним не находятся в физической оперативной памяти (для этого их необходимо перебросить в память); различные прикладные программы могут обращаться к различным виртуальным адрес­ным пространствам; существует защита памяти между опера­ционной системой и прикладными программами.

Сущность организации памяти в защищенном режиме состо­ит в том, что содержимое регистра сегментов не определяет базовое значение физического адреса сегмента памяти, как это было в реальном режиме работы микропроцессора 80286.

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

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

Регистр сегментов (селектор)

15 3 2 1 0

16-бит значение селектора

2 бита приоритета (уровень приоритета запроса-RPL)

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

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

13-бит значение, которое служит для выбора одного из 8 Кbyte (8192) различных дескрипторов сегментов в соответствующей таблице дескрипторов (GDT или LDT)

Рисунок 3 – Cтруктура селектора

В системе имеются две различные таблицы для дескрипто­ров сегментов. Это таблица глобальных дескрипторов (GDT) и таблица локальных дескрипторов (LDT). Второй бит селектора определяет ту таблицу, к которой система должна обращаться по значению дескриптора сегмента. Напомним, что дескриптор сегмента содержит всю необходимую информацию для указания раздела физической памяти, к которому система будет обра­щаться.

На рис. 4 показано, как отыскивается дескриптор сегмента.

Индекс в таблице дескрипторов Второй бит значения селектора

Биты 15 ÷3: значение селектора ооо

Выбор соответствующей

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

32

32 }элемент таблицы дескрипторов сегментов

24 (длина каждого элемента – 8 байт) –

24 дескриптор сегмента

16

16

8

8

0 0

GDT LDT

Таблица глобальных Таблица локальных

Дескрипторов дескрипторов

Рисунок 4 – Схема обращения к дескриптору сегмента

После того как выбрана соответствующая таблица, по значению 3÷15 бит селектора выбирается один из 8192 возможных дескрипторов сегментов. Длина дескриптора сегмента составляет 8 байт.

Таблица глобальных дескрипторов (GDT) обычно содержит информацию о сегментах памяти, которые используются всей системой вне зависимости от того, какая программа выполняется. Программные сегменты (сегменты, содержащие последовательность команд) операционной системы и сегменты данных операционной системы отыскиваются с помощью GDT. Дескрипторы тех программных сегментов, которые должны быть защищены друг от друга, обычно содержатся в различных таблицах локальных дескрипторов (LDT). МОС (например, операционная си­стема OS/2) обычно создает отдельные элементы таблицы локальных дескрипторов для каждого набора программных сегментов, кото­рый необходимо изолировать от других наборов программных сегментов. В МОС для каждого процесса создается своя таблица локальных дескрипторов (LDT).

В защищенном режиме OS формируется 24-бит физический базовый адрес. Это 24-бит значение указывает адрес начала сегмента в физической памяти (???034 + жесткий диск) и содержит следующую информацию:

1. 24-битовое значение, определяющее базовый адрес физического сегмента и дающее возможность доступа к 16 Мбайт реальной физической памяти.

2. 16 бит значение, задающее смещение в сегменте (вплоть до 64 Кбайт).

3. Наличие или отсутствие в данный момент сегмента в физической памяти.

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

5. Указание на вид сегмента, т.е. на программный сегмент, сегмент данных или специальный сегмент.

6. Если это программный сегмент (содержащий выполняемые команды), то содержится информация:

- может ли процессор считывать содержимое этого сегмента;

- является ли этот программный сегмент подчиненным.

7. Если это сегмент данных, то:

- может ли процессор записывать в него информацию;

- является ли его размер возрастающим или убывающим.

8. Информация о приоритете (DPL – уровень приоритета дескриптора).

Значение 16-бит смещения, являющегося второй со­ставляющей полного 24-бит физического адреса, формируемого из текущего 24-бит значения дескрипторов, служит для определения окончательного реального (физического) адреса информа­ции в памяти. Если считать, что размер сегмента увеличивается (в отличие от уменьшения размера сегмента, что характерно для стека), когда значение смещения превышает текущий размер сегмента, то процессор будет обращаться к области памяти, которая на самом деле не является частью данного сегмен­та. Так возникает особая ситуация, указывающая на то, что в программе возникла ошибка. В операционной системе есть воз­можность защиты от особой ситуации при обращении из про­граммы к памяти.

Для этого в селекторе и дескрипторе сегмен­та содержится необходимая защитная информация. Для повышения эффективности работы системы необходимо сделать так, чтобы адресация выполнялась по упрощенной схеме. Для этого служат кэш-регистры (рис. ?) Процессор запоминает в своей вспомогательной памяти значе­ние дескриптора текущего сегмента, выбранное с помощью се­лектора из соответствующей таблицы дескрипторов (GDT или LDT)). При такой организации адресации к памяти процессору не надо каждый раз обращаться к таблицам дескрипторов до тех пор, пока не изменится значение регистра сегментов, т. е. не произойдет смена текущего сегмента памяти.

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

Каждому процессу, ра­ботающему со своим виртуальным адресным пространством, операционная система OS/2 в защищенном режиме выделяет свою часть таблицы локальных дескрипторов (LDT). Адрес, по кото­рому программа обращается к памяти через регистр сегментов, в данном случае не имеет абсолютно никакого соответствия с реальным адресом используемых данных.

Если необходимый сегмент отсутствует в памяти, то система может узнать об этом по содержимому дескриптора этого сегмента. В том слу­чае, когда программа использует регистр сегментов, значение селектора которого указывает на отсутствующий в памяти сег­мент, процессор обрабатывает это событие как особую ситуа­цию с помощью операционной системы. При этом система оп­ределяет, где на диске находится необходимый сегмент, пере­писывает его в реальную память и изменяет содержимое дес­криптора данного сегмента, чтобы система знала, что теперь этот сегмент находится в реальной памяти. Если процессору требуется освободить место в памяти для размещения сегмента, то он может перебросить некоторые сегменты на диск. Выбор сегмента, подлежащего удалению из реальной памяти, осуще­ствляется операционной системой, как правило, по алгоритму LRU (Least Recently Used). При поиске наиболее долго не используемого сегмента операционная система исполь­зует информацию, содержащуюся в таблице дескрипторов.

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