Студопедия — В защищенном режиме работы процессоров Х86
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

В защищенном режиме работы процессоров Х86






 

Дескрипторы сегментов кода и данных.

Общий вид этих дескрипторов приведен на рисунке III.2.

 

63 Байт 7 55 52 Байт 6 48 47 Байт 5 Байт 4 32

Базовый адрес сегмента (биты 31…24)   G D 0 U Предел сегмента (биты 19…16)   Байт прав доступа Базовый адрес сегмента (биты 23…16)
  Базовый адрес сегмента (биты 15…0)     Размер (предел) сегмента (биты 15…0)

31 Байт 3 Байт 2 16 15 Байт 1 Байт 0 0

 

Рис III.2 Формат дескриптора кода и данных МП семейства х86

 

Здесь:

G (Granularity) - гранулярность размера сегмента (G = 0 ® в байтах, G = 1 ® в страницах по 4К).

D (Default size) – разрядность, по умолчанию, адресов, операндов и указателя стека (D = 0 ® 16 бит, D = 1 ® 32 бита). Благодаря этому биту процессоры i386+, без специальных дополнительных мер, могут переключаться с выполнения 16 битного кода на 32 битный код и обратно. Для сегментов данных и стека справедлива аналогичная интерпретация. Когда бит D = 0, стековые операции производятся с 16 битными элементами и в качестве указателя стека привлекается регистр SP. Кроме того, максимальный размер стека ограничен 64 Кбайт. Когда бит D = 1, стековые операции производятся с 32 битными элементами и в качестве указателя стека привлекается регистр ESP, при этом максимальный размер стека может быть увеличен до 4 Гбайт.

U (Users) – бит пользователя, используется по его усмотрению. Процессор этот бит игнорирует.

AR (Access rights byte) – байт прав доступа.

Байт прав доступа у дескрипторов кодового сегмента имеет структуру, приведенную на рисунке III.3, а у дескрипторов сегментов данных и стека структуру, приведенную на рисунке III.4.

7 6 5 4 3 2 1 0

P DPL S E C R A

Рис.IV.3 Байт прав доступа дескрипторов сегментов кода.

 

7 6 5 4 3 2 1 0

P DPL S E ED W A

Рис.III.4 Байт прав доступа дескрипторов сегментов данных и

стека.

 

Здесь:

DPL (Descriptor Privilege Level) – уровень привилегий сегмента: (00, 01, 10, 11: при этом уровень 00 является высшим уровнем, а уровень 11- низшим).

S (System) – признак системного сегмента: (S=0 характеризует системный сегмент, а S=1 - сегмент кода, стека, или сегмент данных).

E (Executable) – признак исполняемости сегмента. (Для сегмента кода E=1, для сегментов данных или стека E = 0).

C (Conforming) – признак подчиненности сегмента: (При С=1 код запрашиваемого сегмента будет исполняться, если текущий уровень привилегий процессора (CPL) не выше уровня привилегий дескриптора запрашиваемого сегмента (DPL); При С=0 (неподчиненный сегмент), управление на данный сегмент может передаваться, только, если CPL=DPL).

R (Readable) – признак читаемости кодового сегмента. При R=1, можно считать, т.е. скопировать содержимое кодового сегмента. Если же R=0, то содержимое кодового сегмента считать нельзя, что является защитой от несанкционированного (случайного или умышленного) копирования программ.

A (Accessed) – признак обращения к данному сегменту. Если A=0, то это означает, что к моменту контрольного обращения к этому биту, обращения процессора к данному сегменту (кода, данных или стека) не было. Если же A=1, то это означает, что к данному моменту селектор этого сегмента уже загружался в сегментный регистр или для него выполнялась команда тестирования. Обычно, операционная система привлекает бит A для того, чтобы выбрать нечасто используемые сегменты, которые при необходимости можно передать на жесткий диск (при P = 0) в процессе свопинга (swapping). Биты A у дескрипторов всех сегментов первоначально должны находиться в состоянии 0. Через регулярные интервалы времени ОС сканирует все дескрипторы и сбрасывает их биты A в нуль. Если в некоторый момент времени у дескриптора определялся бит A=1, то это означает, что к нему после предыдущего сканирования были обращения. При этом ОС производит инкремент времени последнего использования таких сегментов. Когда появляется необходимость выбирать сегмент в оперативной памяти для передачи его на жесткий диск, то этим сегментом будет сегмент неиспользованный за интервал сканирования, т.е. тот у которого бит A=0. Если к этому моменту у всех сегментов A=1, то будет выбран сегмент, к которому дольше всего не было обращения, т.е. интервал времени от последнего обращения к нему до момента принятия решения о свопинге было максимальным. Описанный принцип, по которому из оперативной памяти выбирается сегмент, подлежащий передаче во внешнюю память, носит название алгоритма LRU (Least Recently Used – наименее используемый к настоящему моменту времени).

Очевидно, каждому сегменту должен соответствовать свой счетчик, подсчитывающий время от последнего обращения к сегменту. Тогда, при использовании, например, 16 сегментов, необходимо 16 счетчиков. Если же сегментов значительно больше, то и счетчиков соответственно должно быть больше. Поэтому иногда делают так, что биты A сбрасываются все после того, как они у всех дескрипторов стали равными 1 (при этом дескриптор, к которому было последнее обращение, остается с битом A=1) и все начинается сначала. Такой способ особенно широко применяется при свопинге страниц, при использовании страничной организации памяти.

ED (Expansion Direction или Expand Down) – признак направления изменения адресов при обращении к данному сегменту. Этот признак является признаком отличия сегмента стека (ED = 1) от сегмента собственно данных (ED = 0). Он управляет интерпретацией поля предела. В сегменте данных адресация в процессе изменения начинается с базового адреса сегмента (зафиксированного в сегментном регистре), и границей сегмента будет адрес равный сумме базового адреса и предела сегмента. Поэтому для сегмента данных допустимыми будут все смещения меньшие или равные указанному пределу.

В сегменте стека, адреса ячеек стека, при его использовании, изменяются в сторону уменьшения адресов. Поэтому начальным адресом стековой памяти будет являться сумма базового адреса и константы 0FFFFh (64К-1), в случае, когда бит D = 0, т.е. в случае 16 разрядной адресации, либо суммой базового адреса и константы 0FFFFFFFFh (4Г-1), в случае, когда бит D = 1, т.е. в случае 32 разрядной адресации. Минимальный же адрес стековой памяти определяется значением предела. Так как все смещения в сегменте должны быть больше предела, максимальный размер стека получается, когда предел равен 0. Минимальный же размер стека получается, когда предел равен либо 0FFFFh (при D=0), либо 0FFFFFFFFh (при D = 1), что соответствует пустому сегменту с нулевым размером.

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

На рис III.5 иллюстрировано различие между интерпретацией поля предела для сегментов данных и сегментов стека в случае, когда они оба имеют предел 1FFFh (G = 0). Отметим, что в процессорах i386+ при бите D = 1, бит гранулярности G также должен находиться в состоянии 1. Если же бит D = 0, то и бит G должен находиться в состоянии 0. Следовательно, необходимо не только определить 32 битный сегмент стека с максимальным адресом 4Г-1, но и установить предел в единицах 4К байт (т.е. в страницах).

Рис III.5. Интерпретация поля предела для сегментов данных и

сегментов стека

 

W (Writable) – признак того, что в данный сегмент данных информация может быть записана и модифицирована (W = 1). Если же W =0, то этот сегмент является сегментом, для которого разрешено только считывание информации. Запись же информации в него или ее модифицирование – запрещена. Таким образом, память сегмента данных в этом случае работает в режиме ROM – памяти. Этот режим работы сегмента бывает очень важным в случае, если в сегменте размещены некоторые данные, таблицы, константы, которые широко используются многими программами и изменение, в которых может быть осуществлено только на системном уровне.

Кроме того, сегмент с запрещенной записью не нужно передавать на диск (если его все же нужно удалить из памяти), так как после передачи его с диска в оперативную память он не изменялся. Следовательно, ограничения на доступ по записи повышает эффективность системы виртуальной памяти, сокращая дисковые передачи.

P (Present) – бит присутствия сегмента в оперативной памяти: (P = 1 ® присутствует, P = 0 ® отсутствует).

В первом случае проверяются: условие нахождения задаваемого адреса в пределах выбираемого сегмента, т.е., что бы смещение в сегменте (эффективный адрес) было меньше значения предела сегмента, указанного в дескрипторе, а также соответствие выбранного сегмента (исполнительный, исполнительный считываемый, данных только считывания, данных считывания и записи, стека) запрашиваемому сегменту. Так, например, при загрузке селектора в сегментный регистр данных (т.е. в DS, ES, FS, и GS) тип дескриптора должен разрешать считывание из сегмента. Только исполняемые сегменты для этих регистров не допускаются, но сегменты с разрешенными операциями исполнения и считывания допустимы. В случае загрузки селектора в сегментный регистр SS в дескрипторе соответствующего сегмента должны быть разрешены операции считывания и записи. При загрузке регистра CS сегмент должен быть обязательно исполняемым. Кроме этого проверяются и некоторые другие условия. Если же хотя бы одна из этих проверок не удовлетворяется, то формируется запрос прерывания (особый случай) и загрузка селектора не производится.

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

Если же P = 0, в дескрипторе выделяется базовый адрес сегмента и вызывается внешняя память (винчестер). Затем, по этому базовому адресу выбирается требуемый сегмент, расположенный на винчестере, и перезаписывается на свободное место в оперативной памяти. После этого адрес, по которому этот сегмент записан в оперативную память, заносится в дескриптор на место, предназначенное для хранения базового адреса, атрибуту P присваивается значение 1 и этот дескриптор инициируется заново. Если же свободного места в оперативной памяти в данное время нет, то по атрибуту А определяется сегмент, к которому было меньше всего обращений, и он передается во внешнюю память (винчестер) на свободное место. После этой передачи, адрес, по которому данный сегмент записался на винчестер, заносится в дескриптор данного сегмента на место размещения базового адреса сегмента, а его атрибут P устанавливается в нулевое состояние. Затем на освободившееся место оперативной памяти считывается с диска требуемый сегмент по алгоритму, описанному выше.

При включенной страничной организации памяти, линейный адрес формируется аналогично, но свопинга (т.е. обмена информацией между ОЗУ и внешней памятью) на уровне сегментов не происходит. В элементе таблицы страниц также есть бит P, который определяет наличие страницы в оперативной физической памяти. При обращении к странице, в элементе которой P = 0, реализуется особый случай (исключение) страничного нарушения, при котором операционная система осуществляет:

- Копирование в ОЗУ запрашиваемой страницы из внешней

памяти (винчестера);

- Установку P = 1 и запись в элемент таблицы страниц нового адреса

страницы в ОЗУ;

- Стирание копии старого элемента в таблице страниц в буфере TLB;

- Рестарт команды, вызвавший особый случай.

Таким образом, байт прав доступа сегментов кодовых отличается от байта прав доступа сегментов данных и стека 1 и 2 битом, которые имеют для того и другого типов сегментов принципиально различное значение. Остальные же биты байта прав доступа сегментов этого типа выполняют одинаковые функции.

Дескрипторы системных сегментов.

К этому типу дескрипторов относятся:

· Дескрипторы LDT (Local Descriptor Table – локальные таблицы дескрипторов).

· Дескрипторы TSS (Task State Segment) – сегменты состояния задач.

Общий вид структуры дескрипторов этого типа представлен на рисунке III.6.

 

63 Байт 7 Байт 6 48 47 Байт 5 Байт 4 32

Базовый адрес сегмента (биты 31…24)   G D 0 U   Предел сегмента (биты 19…16)   Байт прав доступа (AR) Базовый адрес сегмента (биты 23…16)
  Базовый адрес сегмента (биты 15…0)       Размер (предел) сегмента (биты 15…0)

31 Байт 3 Байт 2 16 15 Байт 1 Байт 0 0

 

Рис.III.6 Формат дескриптора системных сегментов МП семейства х86

 

Дескрипторы системных сегментов отличаются от дескрипторов кода и данных только байтом прав доступа, а именно, его четырьмя младшими битами. Остальные биты выполняют те же функции. Формат байта прав доступа этих дескрипторов приведен на рисунке III.7.

 

7 6 5 4 3 2 1 0

P DPL S T Y P E

 

Рис.III.7 Формат байта прав доступа системных сегментов.

 

Заметим сразу же, что поскольку описываются системные сегменты, то бит S (System), всегда будет равен нулю. Отметим также, что поскольку все системные объекты должны всегда находиться в физической оперативной памяти, то бит A у них отсутствует.

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

Код в поле TYPE, определяет тип системного сегмента:

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

0001 – доступный сегмент состояния задачи МП i80286 (Available

TSS);

0011 – занятый сегмент состояния задачи МП i80286 (Busy TSS);

1001 – доступный сегмент состояния задачи МП i386+ (Available

TSS);

1011 – занятый сегмент состояния задачи МП i386+ (Busy TSS).

Остальные коды поля TYPE не используются. Анализируя коды поля TYPE можно видеть, что нулевое значение его старшего бита определяет то обстоятельство, что задача запрограммирована для решения на МП 80286, а единичное – то, что задача запрограммирована для решения на 32 разрядных МП i386+. Значение же первого бита (младший бит – нулевой), определяет либо то, что задача свободна (значение бита равно 0), либо то, что задача находится в процессе выполнения, или прервана другой задачей, и ждет своей очереди, чтобы закончить выполнение (значение бита равно 1).

 

Дескрипторы шлюзов.

Межсегментная передача управления, которая осуществляется командами JMP, CALL, INT, RET, IRET, возможна только в сегменты кода с тем же уровнем привилегий, либо в так называемые подчиненные сегменты. Для переходов с изменением уровней привилегий, в общем случае, используются специальные структуры данных – шлюзы или вентили (Gates), размер и состав которых несколько напоминает рассмотренные выше дескрипторы. Кроме того, их удобно располагать в дескрипторных таблицах GDT, IDT или LDT. Поэтому их принято называть дескрипторами шлюзов, и относят к системным дескрипторам. Однако они имеют существенное отличие от дескрипторов кода и данных, а также дескрипторов системных сегментов, поскольку, если те описывают некоторые области адресного пространства, называемые сегментами, то дескрипторы шлюзов определяют конкретный адрес передачи управления в адресном пространстве. Для каждого способа косвенной межсегментной передачи управления имеются соответствующие шлюзы, использование которых позволяет процессору автоматически выполнять контроль защиты информации.

В процессорах семейства х86 используется четыре типа шлюзов для передачи управления со сменой уровня привилегий:

· Шлюзы вызова (Call Gates) – используются для вызовов процедур.

· Шлюзы задач (Task Gates) – используются при переключении задач.

· Шлюзы прерываний (Interrupt Gates).

· Шлюзы ловушек (Trap Gates).

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

Селекторы, которые выбирают дескрипторы шлюзов вызова, нельзя загружать в сегментные регистры данных DS, ES, FS, GS и стека SS. Они могут загружаться только в кодовый сегментный регистр CS для передачи управления сегменту кода на другом уровне привилегий. Поскольку дескрипторы шлюзов относятся к классу системных дескрипторов, их бит S в байте прав доступа всегда равен 0.

Формат дескриптора шлюза вызова приведен на рисунке III.8.

 

 

63 Байт 7 Байт 6 48 47 Байт 5 Байт 4 16

Смещение в сегменте (биты 31…16) Байт прав доступа   WС (биты 4..0)
Селектор Смещение в сегменте (биты 15…0)

31 Байт 3 Байт 2 16 15 Байт 1 Байт 0 0

 

Рис.III.8. Формат дескриптора шлюза вызова

 

Пятибитное поле WC (Word count – число передаваемых слов) указывает количество параметров, которые переносятся из стека текущей программы в стек новой программы. Параметры представляют собой 16 разрядные (для задач i80286) или 32 разрядные (для задач i80386+) слова. Таким образом, число передаваемых параметров из старого стека в новый стек, может составлять от 0 до 31.

Формат дескрипторов шлюзов прерываний и ловушек приведен на рисунке III.9. Они отличаются друг от друга только байтом прав доступа AR, а именно, кодом типа. А от дескрипторов шлюза вызова они отличаются еще и тем, что в них не используется поле WC.

 

63 Байт 7 Байт 6 48 47 Байт 5 Байт 4 16

Смещение в сегменте (биты 31…16) Байт прав доступа   Не использует
Селектор Смещение в сегменте (биты 15…0)

31 Байт 3 Байт 2 16 15 Байт 1 Байт 0 0

 

Рис.III.9. Формат дескрипторов шлюзов прерываний и ловушек.

 

По селектору, указанному в этом дескрипторе шлюза, пользуясь глобальной дескрипторной таблицей, определяется базовый адрес и предел сегмента кода, где располагается требуемая подпрограмма обработки прерывания. И, путем суммирования базового адреса сегмента со смещением, приведенном в этом же дескрипторе, определяется конкретный начальный адрес искомой подпрограммы обработки прерывания, на который и передается управление.

Формат дескриптора шлюза задач, который определяет селектор TSS, приведен на рисунке III.10. Селектор TSS из дескриптора шлюза задачи загружается только в регистр TR и выбирает из GDT дескриптор TSS.

 

63 Байт 7 Байт 6 48 47 Байт 5 Байт 4 16

Не используется Байт прав доступа Не используется
Селектор TSS Не используется

31 Байт 3 Байт 2 16 15 Байт 1 Байт 0 0

 

Рис. III.10 Формат дескриптора шлюза задачи.

 

Поскольку при переключении задач требуется информация, заключенная во всем сегменте TSS, то определяется только базовый адрес этого сегмента, и указывать смещение в сегменте не требуется.

Дескрипторы шлюзов различных типов отличаются друг от друга кодом типа в поле TYPE, расположенного в байте прав доступа на месте 0, 1, 2 и 3 битов.

0100 – шлюз вызова 80286 (Сall Gate).

1100 – шлюз вызова i386+ (Call Gate).

0101 – шлюз задачи 80286 (Task Gate).

1101 – шлюз задачи i386+ (Task Gate).

0110 – шлюз прерывания 80286 (Interrupt Gate).

1110 – шлюз прерывания i386+ (Interrupt Gate).

0111 – шлюз ловушки 80286 (Trap Gate).

1111 – шлюз ловушки i386+ (Trap Gate).

Остальные 4 бита байта прав доступа: P, DPL и S, имеют то же значение, что и в байте прав доступа дескрипторов любых сегментов.

В заключение, укажем возможное распределение дескрипторов различного вида по дескрипторным таблицам, используемых в МП семейства х86.

В глобальной дескрипторной таблице GDT могут находиться дескрипторы:

· сегментов кода и данных;

· системных сегментов LDT и TSS;

· шлюзов вызова;

· шлюзов задач.

 

В локальной дескрипторной таблице LDT могут находиться дескрипторы:

· сегментов кода и данных;

· шлюзов вызова;

· шлюзов задач.

 

В дескрипторной таблице прерываний IDT могут находиться дескрипторы:

· шлюзов задач;

· шлюзов прерываний;

· шлюзов ловушек.

 







Дата добавления: 2015-08-12; просмотров: 1126. Нарушение авторских прав; Мы поможем в написании вашей работы!



Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

СПИД: морально-этические проблемы Среди тысяч заболеваний совершенно особое, даже исключительное, место занимает ВИЧ-инфекция...

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

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

Классификация ИС по признаку структурированности задач Так как основное назначение ИС – автоматизировать информационные процессы для решения определенных задач, то одна из основных классификаций – это классификация ИС по степени структурированности задач...

Внешняя политика России 1894- 1917 гг. Внешнюю политику Николая II и первый период его царствования определяли, по меньшей мере три важных фактора...

Оценка качества Анализ документации. Имеющийся рецепт, паспорт письменного контроля и номер лекарственной формы соответствуют друг другу. Ингредиенты совместимы, расчеты сделаны верно, паспорт письменного контроля выписан верно. Правильность упаковки и оформления....

Studopedia.info - Студопедия - 2014-2024 год . (0.009 сек.) русская версия | украинская версия