Научная литература
booksshare.net -> Добавить материал -> Физика -> Александров Е.К. -> "Микропроцессорные системы" -> 105

Микропроцессорные системы - Александров Е.К.

Александров Е.К., Грушвицкий Р.И., Купрянов М.С., Мартынов О.Е. Микропроцессорные системы — Спб.: Политехника, 2002. — 935 c.
ISBN 5-7325-0516-4
Скачать (прямая ссылка): mikroprocessorniesistemi2002.djvu
Предыдущая << 1 .. 99 100 101 102 103 104 < 105 > 106 107 108 109 110 111 .. 528 >> Следующая

Обращение к задаче, находящейся в процессе решения, которая имеет
значение бита В = 1, запрещено (вызовет исключение #GP). Если решение
данной задачи было прервано переключением на другую задачу, то возврат к
ее выполнению может быть реализован только командой IRET.
При переключении задач с помощью команд JUMP или CALL должны выполняться
правила доступа, установленные для обращения к сегментам данных: DPL >=
CPL, RPL, где значение DPL задается соответствующим полем в дескрипторе
сегмента TSS (см. рис. 2.52). Таким образом, допускается переключение на
решение задач, чья степень защиты меньше или равна уровню привилегий
текущей программы и запроса.
При использовании команды CALL возможно обращение к задачам с более
высокой степенью защиты, чем уровень привилегий текущей программы, с
помощью шлюза задачи. Использование шлюзов задачи аналогично шлюзам
вызова. Дескриптор шлюза задачи, формат которого показан на рис. 2.54,
может размещаться в любой из дескрипторных таблиц: GDT, LDT или ЮТ.
Содержащийся в этом дескрипторе селектор сегмента TSS обращается к
дескриптору TSS, располагаемому в таблице GDT.
Обращение к шлюзу разрешается, если для текущей программы значение CPL,
RPL <= gDPL, указанному в дескрипторе шлюза задачи. Селектор TSS из
дескриптора шлюза должен иметь значение бита TI = 1. Селектор загружается
в регистр TR и выбирает из GDT дескриптор TSS, при этом значение уровня
DPL, указанное в выбранном дескрипторе, не учитывается. При нарушении
указанных правил обращения возникает исключение типа #TS ("ошибка
обращения к TSS").
ПРОЦЕССОРЫ ОБЩЕГО НАЗНАЧЕНИЯ И СИСТЕМЫ НА ИХ ОСНОВЕ
15 О
Ах4 Ах + 2 Ах +4 Ах + 6 Ах + 8 Ах + А Ах + С Ах + Е Ах + 10 Ах + 12 Ах+
14 Ах + 16 Ах + 18 Ах+ 1А Ах+ 1C Ах + 1В Ах+ 20 Ах+ 22 Ах+ 24 Ах+ 26 Ах+
28 Ах + 2А
При использовании шлюзов задачи с меньшим уровнем привилегий могут
вызывать более привилегированные (защищенные) задачи, поэтому в данном
случае встает задача обеспечения сохранности содержимого стеков. Эта
проблема решается путем использования трех отдельных начальных адресов
стеков, которые задаются тремя парами полей TSS: SS0 и ESPO, SS1 и ESP1,
SS2 и ESP2. Если дескриптор вызываемого TSS имеет поле DPL = 0, то при
вызове задачи через шлюз в регистры SS и ESP процессора загружаются
значения SS и ESP0. При DPL = 1 загружается SSI и ESPI, при DPL = 2
загружается SS2 и ESP2. Если DPL = CPL = 3, то создание отдельного стека
не требуется, и вызванная задача продолжает заполнение и использование
стека, созданного в процессе выполнения старой (вызывающей) задачи. Таким
образом, для задач каждого уровня привилегий создается отдельный стек,
что исключает возможность нарушения его содержимого задачами с более
низким уровнем привилегий.
При переключении задач с помощью команды CALL содержимое TR заносится в
два младших байта сегмента TSS в качестве селектора, обеспечивающего
возврат к выполнявшейся задаче. В этом случае в регистре EFLAGS
устанавливается значение бита вложенной задачи NT = 1 .Такимобразом, при
последовательном использовании команды CALL можно реализовать
многократное вложение задач.
Возврат из текущей задачи к выполнению предыдущей осуществляется с
помощью команды IRET, которая анализирует значение NT. При NT = 1
осуществляется обратное переключение на задачу, задаваемую селектором
возврата в сегменте TSS текущей задачи. В этом случае H3TSS возвращаемой
задачи загружается сохранившееся содержимое основных регистров. При NT =
0 команда IRET осуществляет обычную процедуру возврата из подпрограммы с
восстановлением из стека содержимого регистров CS, EIP, EFLAGS.
Команда JUMP при переключении задач не сохраняет в TSS селектор возврата
и устанавливает значение NT = 0. Кроме того, команды JUMP и CALL по-
разному влияют на значение бита занятости. Команда JUMP при переключении
устанавливает в дескрипторе старой
_____________Селектор возврата_____________
____________________SP0_____________________
____________________SS0_____________________
____________________SP1_____________________
____________________SS1_____________________
SP2
_____________________SS2____________________
IP
___________________FLAGS____________________
АХ
GX
DX
ВХ
SP
____________________ВР______________________
SI
Dl
ES
GS
SS
_____________________DS_____________________
________________Селектор LDT_______________
Дополнительная информация для ОС
Рис. 2.54. Формат дескриптора шлюза задачи
РАБОТА ПРОЦЕССОРА В ЗАЩИЩЕННОМ И РЕАЛЬНОМ РЕЖИМАХ
задачи значение бита занятости В = 0, а в дескрипторе новой задачи - В =
1. Команда CALL также устанавливает В = 1 для новой задачи, но сохраняет
В = 1 и для предыдущей задачи. Таким образом, каждая задача в цепи
вызовов с помощью команды CALL оказывается занятой, что запрещает
применение рекурсивных процедур и реентерабельных программ.
2.7.5. РЕАЛИЗАЦИЯ РЕЖИМА ВИРТУАЛЬНОГО 8086 (V86) , -
Процессоры Р6, как и более младшие модели 386, 486, Pentium, могут
Предыдущая << 1 .. 99 100 101 102 103 104 < 105 > 106 107 108 109 110 111 .. 528 >> Следующая

Реклама

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed

Есть, чем поделиться? Отправьте
материал
нам
Авторские права © 2009 BooksShare.
Все права защищены.
Rambler's Top100

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed