December 12 2017 08:22:29
Навигация
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации .

Забыли пароль?
Запросите новый здесь.
команды межсегментного перехода
ФОРМАТЫ ПРЕДСТАВЛЕНИЯ ДАННЫХ И ВЫПОЛНЕНИЕ ОПЕРАЦИЙ

При выполнении задач, запрограммированных для решения 16-разрядным процессором 80286, структура сегмента TSS изменяется (рис. 2.53). Объем обязательной части сегмента в этом случае составляет 44 байта, и его граница должна иметь значение не менее чем 2Ch.

Байт 7 Байт 6 Байт 5 Байт 4




31 24 23 22 21 20 19 16 15 14 13 12 11 10 9 8 7 0
Базовый адрес ВА31-24 G 0 0 AVL Граница L19-16 Р DPL 0 1 0 В 1 Базовый адрес ВА23-16
Базовый адрес А15 -0
31 16 15 0


Байт 3, 2 Байт 1, 0

Рис. 2.52. Формат дескриптора TSS

Байт 7, 6 Байт 5 Байт 4



31 16 15 14 13 12 11 8 7 0
Резервировано Р DPL 0 0101 Резервировано
Селектор сегмента TSS Резервировано
31 16 15 0


Байт 3, 2 Байт 1, 0

Рис. 2.53. Структура сегмента TSS для процессора 80286

Переключение задач осуществляется с помощью команд межсегментного перехода JUMP, вызова CALL и возврата IRET. Если селектор (sel 16) команды JUMP или CALL выбирает из таблицы GDT дескриптор, который содержит в поле TYPE байта доступа код 0001 (обра­щение к TSS для процессора 80286) или 1001 (обращение к TSS для процессоров 386,486, Pentium, P6), то выполняется переключение задач. При этом селектор sel 16 заносится в регистр TR, а в связанный с ним программно-недоступный регистр загружается дескриптор TSS. В соответствии с содержимым обязательной части TSS производится загрузка регистров процессора, после чего он начинает выполнение поступившей задачи. Следует отметить, что межсегментные команды JUMP и CALL содержат байты eip32, определяющие новое содержимое регистра EIP. Однако, если селектор выбирает дескриптор TSS, то эти байты игнорируются, а регистр EIP загружается содержимым соответствующего поля TSS. При переключении задачи устанавливается значение TS = 1 в регистре управления CR0, хранящем слово состояния машины MSW. Сброс этого бита в состояние TS = 0 может производиться командой CLTS или путем загрузки нового содержимого в CR0 командами LMSWwwMOV.

Переключение задач производится, если бит занятости В в байте доступа дескриптора TSS вызываемой задачи имеет значение «0» (задача свободна). При В = 1 выполняется исключение типа #GP (нарушение защиты). Установка значения В = 1 (задача занята) в дескрипторе TSS производится командами JUMP или CALL, переключающими процессор на выполнение данной задачи. Обращение к задаче, находящейся в процессе решения, которая имеет значение бита В = 1, запрещено (вызовет исключение #GP). Если решение данной задачи было прервано переключением на другую задачу, то возврат к ее выполнению может быть реализован только командой IRET.

15 0
Селектор возврата Ах4
SP0 Ах + 2
SS0 Ах + 4
SP1 Ах + 6
SS1 Ах + 8
SP2 Ах +А
SS2 Ах + С
IP Ах + Е
FLAGS Ах + 10
АХ Ах + 12
GX Ах + 14
DX Ах + 16
BX Ах + 18
SP Ах + 1А
BP Ах + 1С
SI Ах + 1В
Dl Ах + 20
ES Ах + 22
GS Ах + 24
SS Ах + 26
DS Ах + 28
Селектор LDT Ах + 2А
Дополнительная информация для ОС

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

При переключении задач с помощью команд JUMP или CALL должны выполняться правила доступа, установленные для обращения к сегментам данных: DPL >= CPL, RPL, где значение DPL задается соответствующим полем в дескрипторе сегмента TSS (см. рис. 2.52). Таким образом, допускается переключение на решение задач, чья степень защиты меньше или равна уровню привилегий текущей программы и запроса.

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.

Нет данных для оценки.

Время загрузки: 0.09 секунд 2,295,811 уникальных посетителей