Организация мультизадачности в процессорах семейства Х86, страница 2

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

сегмент TSS.                                                            

Рис.VII.1. Формат сегмента состояния задачи TSS для процессоров i386+

К статической информации относится:

·  содержимое полей SS0, ESP0, SS1, ESP1, SS2, ESP2, которые определяют начальный адрес стека при переключении к задачам с более высоким уровнем привилегий;

·  содержимое поля CR3, которое используется только при страничной организации памяти и представляет начальный адрес каталога страниц;

·  содержимое поля LDT, которое соответствует содержимому регистра LDTR и определяет селектор локальной дескрипторной таблицы данной задачи;

·  содержимое поля базы БКВВ, которое определяет адрес начала карты ввода/вывода для данной задачи;

·  содержимое бита T (DebugTrapBit), который определяет (при T=1), что переключение на данную задачу приведет к возникновению особого случая, обработка которого заключается в отладке программного обеспечения.

Динамическая информация изменяется при каждом переключении задачи и включает в себя:

·  содержимое поля «обратной связи», которое содержит селектор предыдущей (выходящей) задачи, необходимый для возврата в нее снова;

·  содержимое полей EIP, EFLAGS, ECX…EDI, которые сохраняют содержимое соответствующих регистров на момент переключения задачи;

·  содержимое полей ES, CS…GS, которые сохраняют содержимое соответствующих сегментных регистров на момент переключения задачи.

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

Рассмотрим подробнее структуру  и назначение битовой карты разрешения ввода/вывода.

Система защиты процессоров семейства iAPХ86 предусматривает исполнение команд ввода/вывода только тех программ, уровень привилегий которых выше или равен коду IOPL, который занесен в 12 и 13 разряд регистра FLAGS. Т.е. если удовлетворяется условие: CPL ≤ IOPL.

Однако если в TSS данной задачи определена БКВВ, задаче представляется дополнительная возможность выполнения команд ввода/вывода. Если обычная защита по привилегиям запрещает выполнение команд ввода/вывода (CPL > IOPL), процессор обращается к БКВВ и просматривает состояние ее битов. Если биты, соответствующие запрашиваемым портам ввода/вывода, содержат нули, то операции ввода/вывода через данные конкретные порты разрешаются, несмотря на общий запрет системы защиты. Если же соответствующий бит находится в состоянии 1, то обращение к данному порту запрещается окончательно. В случае такого обращения  формируется особый случай нарушения общей защиты.  Адресное пространство ввода/вывода процессоров i386+ составляет 64 Кбайт. Поэтому, максимальный размер БКВВ может составлять 8 Кбайт памяти. Однако, практически, такой размер ее никогда не требуется, и она ограничивается по количеству используемых периферийных  устройств. Обычно это ограничение осуществляется по байтовой границе. Все отсутствующие биты считаются находящимися в единичном, т.е. запрещающем состоянии. 

За последним байтом БКВВ должен следовать байт, содержащий во всех разрядах единицы (FFh). Адрес этого байта является как бы границей сегмента TSS, размер которого не должен превышать предела, указанного в его дескрипторе.

Следует заметить, что при использовании так называемого расширенного виртуального режима работы процессора (режима EV86),  возможно формирование дополнительной карты перенаправления виртуальных прерываний (Interrupt redirection bitmap), по структуре напоминающую карту БКВВ. Эта карта служит для запрещения или разрешения, аналогичным же образом, реагирования процессора на программные прерывания, вызываемые командами INT n, в виртуальном режиме работы. Она располагается в TSS сразу же  после бита 68h и заканчивается перед нулевым битом БКВВ.

                                       3. Дескриптор TSS и его селектор.

Как и всякий сегмент памяти, сегмент TSS описывается соответствующим селектором. Напомним структуру дескриптора сегмента TSS (рис.VII.2).

Рис.VII.2. Структура дескриптора сегмента TSS.