В рамках сегментированной модели адресации для программы память представляется группой независимых адресных блоков, называемых сегментами. Для адресации байта памяти программа должна использовать логический адрес, состоящий из селектора сегмента (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).