Структура сегмента TSS. Задачи.


Переключение задач.
1. Выходная задача выполняет команду. far call, fast jump – косвенное переключение через шлюз задач.
2. Когда выходящая задача выполняет far call или fast jump и селектор выбирает дескриптор TSS – прямое переключение.
3. Когда выходящая задача выполняет команду iret для возврата в предыдущую задачу.
4. Когда возникает аппаратное или программное прерывание и в дескрипторной таблице прерываний выбирается шлюз задач.

1. Располагать в GDT – более просто, менее защищено.
2. Располагать в LDT.

В регистре флагов существует бит TS (Task Switched) NT (Nested Task) – тоже в регистре флагов – вложенность задач. 1 – вложена, 0 – не вложена.

Механизм переключения задач.

1. Регистр TR определяет дескриптор TSS выходящей задачи (задачу А описывает TSSА).
2. Процессор сохраняет своё состояние в TSS задачи А.
3. Из поля «селектор» команды jmp загружается регистр TR, теперь он указывает на TSS входящей задачи.
4. Состояние процессора заполняется из TSSB.
5. Бит занятости B в дескрипторе TSS устанавливается в 1.
6. Бит TS устанавливается в 1.
7. Выполняется старт 1-й команды находящейся по адресу CS IPB.

Вложение задач.

Если задача была вызвана при помощи : 1. Call 2. Int (прерывания). Она вложена и организуется список по полям LINK.
Бит NТ сообщает , что поле LINK содержит правильное значение. По команде iret происходит следующее:
1. Биты B и NТ очищаются.
2. Контекст задачи C сохраняется в TSSC.
3. Загружается регистр TR из поля LINK задачи С.
4. Восстанавливается контекст задачи В.
5. Выполняется рестарт новой задачи с адреса CS:IP.
При выполнении команды iret проверяется бит NТ. NТ=0- обычный возврат. NТ=1- возврат с переключением задач.
Двоичная карта разрешения ввода-вывода.
Выполнение команд ввода – вывода происходит на уровне привилегии 0. Это можно обойти с помощью карты разрешения ввода –вывода . В сегменте ТSS может присутствовать структура – битовая карта разрешений ввода – вывода , в которой каждый бит определяет разрешение или запрет доступа к каждому порту ввода – вывода.1- можно обратиться. 0- нельзя обратиться. Пункт BASE IO указывает смещение относительно начала сегмента TSS.
1. Разделение данных. Для передачи данных между задачами , в LDT этих задач создаётся псевдоним. Для разделяемого сегмента данных. Проблема состоит с отслеживании изменения дескриптора и в актуальности данных.
2. Разделение кода. Для избежания дублирования кода используется разделяемый код. Дескриптор помещается в GDT или в LDT, использующих задач. Если помещается в GDT, могут использовать код все задачи, если нужно ограничить круг, то -LDT . Недостатки: нужно отслеживать изменения дескриптора. Достоинства: Использовать могут только те задачи, в LDT которых помещён этот дескриптор. Разделяемый код должен быть реентерабельным.

Загрузка...