October 16 2017 22:55:53
Навигация
Авторизация
Логин

Пароль



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

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

При использовании команды CALL возможно обращение к задачам с более высокой степенью защиты, чем уровень привилегий текущей программы, с помощью шлюза задачи. Использование шлюзов задачи аналогично шлюзам вызова. Дескриптор шлюза задачи, формат которого показан на рис. 2.54, может размещаться в любой из дескрипторных таблиц: GDT, LDT или IDТ. Содержащийся в этом дескрипторе селектор сегмента TSS обращается к дескриптору TSS, располагаемому в таблице GDT.

Обращение к шлюзу разрешается, если для текущей программы значение CPL, RPL <= gDPL, указанному в дескрипторе шлюза задачи. Селектор TSS из дескриптора шлюза должен иметь значение бита TI = 1. Селектор загружается в регистр TR и выбирает из GDT дескриптор TSS, при этом значение уровня DPL, указанное в выбранном дескрипторе, не учитывается. При нарушении указанных правил обращения возникает исключение типа #TS («ошибка обращения к TSS»).

При использовании шлюзов задачи с меньшим уровнем привилегий могут вызывать более привилегированные (защищенные) задачи, поэтому в данном случае встает задача обеспечения сохранности содержимого стеков. Эта проблема решается путем использования трех отдельных начальных адресов стеков, которые задаются тремя парами полей 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 текущей задачи. В этом случае из TSS возвращаемой задачи загружается сохранившееся содержимое основных регистров. При NT = 0 команда IRET осуществляет обычную процедуру возврата из подпрограммы с восстановлением из стека содержимого регистров CS, EIP, EFLAGS.

Команда JUMP при переключении задач не сохраняет в TSS селектор возврата и устанавливает значение NT = 0. Кроме того, команды JUMP и CALL по-разному влияют на значение бита занятости. Команда JUMP при переключении устанавливает в дескрипторе старой задачи значение бита занятости В = 0, а в дескрипторе новой задачи - В = 1. Команда CALL также устанавливает В = 1 для новой задачи, но сохраняет В = 1 и для предыдущей задачи. Таким образом, каждая задача в цепи вызовов с помощью команды CALL оказывается занятой, что запрещает применение рекурсивных процедур и реентерабельных программ.

2.7.5. РЕАЛИЗАЦИЯ РЕЖИМА ВИРТУАЛЬНОГО 8086 (V86)

Процессоры Р6, как и более младшие модели 386, 486, Pentium, могут выполнять в защищенном режиме все программы, написанные для микропроцессора 8086, обеспечивая при этом ряд средств защиты и возможность страничной организации памяти. Такой вариант защищенного режима называется режимом виртуального процессора 8086 (сокращенно V86) и реализуется при установке в регистре EFLAGS значения признака VM = 1. Таким образом, в режиме V86 микропроцессор работает как виртуальный процессор, состоящий из аппаратных средств процессора Р6, прикладного программного обеспече­ния, написанного для 8086, и системного программного обеспечения (монитор V86).

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

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

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

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