Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MPT_otvety_na_ekzamen.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
416.51 Кб
Скачать
  1. Принцип формирования линейных адресов в защищенном режиме работы мп в семействе х86:

Основное отличие модели сегментации памяти в процессорах, функционирующих в защищенном режиме работы, от процессора 8086 заключается в том, что теперь пользовательская программа не может свободно обращаться по любому адресу в адресном пространстве памяти. Каждая программа, независимо от уровня ее привилегий, не может обращаться к сегменту до тех пор, пока он не «описан» для программы. Программе не разрешается обращаться по любому адресу, который она может сформировать. Кроме того, в задании атрибутов сегментов, которые зафиксированы в их дескрипторах, предоставляется довольно большая свобода. Например, базовый адрес может быть любым (не требуется его выравнивания на границу параграфа т.е. с градацией 16 байт), а размер сегмента варьируется от одного байта до всего адресуемого пространства в 4Гбайт (при страничной грануляции). Размер сегмента в 4Гбайта говорит о том, что с помощью эффективного 32 разрядного адреса инструкции, можно «пройти» все адресное пространство, не модифицируя содержимое сегментного регистра. Такая свобода определения сегментов предоставляет программисту полное управление использованием памяти и позволяет удовлетворить практически любые запросы памяти.

Схема формирования линейного адреса в защищенном режиме работы МП семейства х86 с привлечением селектора и смещения в сегменте (эффективного адреса), получаемого из текущей инструкции, приведена на рисунке III.12. Как уже упоминалось, совокупность селектора и эффективного адреса, которую иногда называют, также, указателем адреса, определяет логический или виртуальный адрес операнда. Селектор представляет собой 16 разрядный двоичный код, заносимый специальной инструкцией в соответствующий сегментный регистр. Селектор состоит из трех полей (см. рис.III.11).

15 2 1 0

Index

TI

RPL

Рис. III.11 Формат селектора сегмента в МП 80286+

Младшие два бита образуют поле RPL (Requested Privilege Level) – уровень привилегий запросчика. Они используются при организации системы защиты от несанкционированного доступа к сегментам памяти. Следующий бит–TI (Table Indicator) - определяет тип дескрипторной таблицы, из которой должен выбираться дескриптор (TI = 0  из таблицы GDT, TI = 1 из таблицы LDT). Остальные 13 бит определяют номер запрашиваемого дескриптора в соответствующей дескрипторной таблице.

Базовый адрес LDT(из дескриптора LDT)

Рис.III.12. Формирование линейного адреса в МП семейства Х86

Физический же адрес дескриптора в общем адресном пространстве определяется путем суммирования базового (начального) адреса дескрипторной таблицы с номером этого дескриптора, умноженным на 8 (поскольку каждый дескриптор занимает адресное пространство, равное 8 байтам). Базовый же адрес дескрипторной таблицы извлекается из соответствующего системного регистра. При TI = 0, используется системный регистр GDTR, а именно, содержимое его поля базового адреса.

Выбрав из оперативной памяти по полученному физическому адресу дескриптор, процессор выделяет из него базовый адрес запрашиваемого сегмента, и суммирует его со смещением (эффективным адресом, либо значением IP, SP, SI или DI), получаемым непосредственно из инструкции (команды) выполняемой программы. Полученное значение адреса является линейным а, в случае выключенного режима страничного преобразования, одновременно и физическим адресом, выдаваемым процессором непосредственно на адресную шину компьютера.

Если TI = 1, то это означает, что запрашиваемый дескриптор находится в локальной дескрипторной таблице LDT. В этом случае надо предварительно определить, где находится сегмент самой LDT. Для этого процессор обращается к 16 разрядному системному регистру LDTR. В нем находится селектор, определяющий тот дескриптор в GDT, который описывает данный сегмент LDT. Выбрав по этому селектору, описанным выше способом, из GDT дескриптор сегмента LDT, процессор извлекает из него базовый адрес таблицы LDT. Затем он возвращается и анализирует селектор, который занесен в сегментный регистр. Считывает с него значение индекса, умножает на 8 и, суммируя его с базовым адресом таблицы LDT, находит базовый адрес сегмента, где находится адресуемый операнд. Нахождение искомого адреса самого операнда осуществляется так же, как и в случае нахождения сегмента в таблице GDT.

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

  1. Взять селектор из сегментного регистра.

  2. Если бит TI показывает на GDT (TI = 0), взять из GDTR адрес дескрипторной таблицы и перейти к шагу 4.

  3. Если бит TI показывает на LDT (TI = 1), то:

а) взять селектор сегмента LDT из регистра LDTR;

б) выделить в селекторе поле индекса (старшие 13 разрядов) и умножить индекс на 8 (сдвинуть на 3 разряда влево);

в) прибавить результат к базовому адресу из регистра GDTR;

г) считать из памяти адресуемый дескриптор;

д) выделить из этого дескриптора базовый адрес сегмента,

содержащего таблицу LDT. Полученный базовый адрес является

адресом дескрипторной таблицы LDT. Перейти к шагу 4.

4. Выделить в селекторе сегментного регистра поле индекса (старшие 13

разрядов), умножить на 8 содержащийся в нем код, и прибавить к

базовому адресу соответствующей дескрипторной таблицы. Считать

из памяти дескриптор по этому адресу.

5.Выделить из дескриптора базовый адрес искомого сегмента.

6. Прибавить значение смещения в сегменте (из инструкции) к

базовому адресу искомого сегмента. Это и будет требуемый линейный

адрес. Он же является и физическим адресом, если не включено

страничное преобразование.

7. Осуществить обращение к памяти по полученному адресу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]