Адресация сегментов. Селекторы сегментов, загрузка селектора

В рамках сегментированной модели адресации для программы память представляется группой независимых адресных блоков, называемых сегментами. Для адресации байта памяти программа должна использовать логический адрес, состоящий из селектора сегмента (16-битной структуры) и смещения. Селектор сегмента выбирает определенный сегмент, а смещение указывает на конкретный байт в адресном пространстве выбранного сегмента. Селектор сегмента может находиться либо непосредственно в коде команды, либо в одном из сегментных регистров. Смещение также может либо непосредственно находиться в коде команды, либо вычисляться на основе значений регистров общего назначения.

Селектор (selector) — это номер дескриптора из таблицы дескрипторов (т.е указатель на описание сегмента).

15      3 2 1    0
Index TI RPL

Поле индекса определяет номер дескриптора в глобальной дескрипторной табл. (от 0 до 8191, т.к. поле индекса состоит из 13 бит, то максимальное число дескрипторов, одновременно существующих в системе равно 2 13= 8192), а этот дескриптор содержит и определяет место нахождения локальной дескрипторной табл.

TI – бит индексации табл. Определяет табл, из которой выбирается нужный дескриптор. (0 – глобальная, 1- локальная деск. табл.)

RPL – (2 бита) поле запрашиваемого уровня привилегий. Содержит номер уровня привилегий, которое имеет текущая программа. Значение этого поля МП использует для защиты по привилегиям. К одному и тому же дескриптору можно обращаться, используя селекторы с разными значениями RPL.

Уровень привилегий запроса — это число от 0 до 3, указывающее уровень защиты сегмента, для доступа к которому используется данный селектор. Если программа имеет более высокий уровень привилегий, при использовании этого сегмента привилегии понизятся до RPL.

 

Селекторы такого формата находятся в сегментных регистрах процессора (cs, ss, es, ds, gs), которые адресуют сегмент ч/з дескриптор. 

Адрес памяти можно указывать не только через пару регистров, но и в переменных, через пару значений селектор: смещение.

В момент загрузки в сегментный регистр нового селектора МП производит обращение к дескрипторной табл. 

Первый элемент GDT не используется, а соответствующий ему селектор наз нуль-селектор (0000-0003). Нуль-селектор нельзя загружать в регистры CS или SS. Загрузка нуль-селектора в регистры DS, ES, FS, GS не приводит к нарушению общей защиты, однако обращаться к памяти ч/з сегментный регистр, в который загружен нуль-селектор, нельзя.

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

В сегментные регистры НЕЛЬЗЯ загружать селекторы системных дескрипторов (S=0).

В регистр CS можно загрузить только селектор сегмента кода (S=1, типы 4-7).

В регистр SS можно загрузить только селектор сегмента данных с разрешением записи (S=1, типы 1 и 3).

В регистры DS, ES, FS, GS НЕЛЬЗЯ загружать селекторы сегментов, не доступных для чтения (S=1, типы 4 и 6).

При загрузке селектора в LDTR или регистр задачи.

В LDTR можно загрузить только селектор LDT (S=0, тип 2).

В регистр задачи можно загрузить только селектор сегмента состояния задачи TSS (S=0, типы 1 и 9).

 


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



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