Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MPT_otvety_na_ekzamen.docx
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
416.51 Кб
Скачать
  1. Сегмент состояния задачи, его структура и назначение:

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

Область памяти, где хранится контекст задачи и носит название сегмента состояния данной задачи TSS (Task State Segment). Эта область памяти оформлена как самостоятельный сегмент и, как и все сегменты, описывается соответствующим дескриптором – системным дескриптором TSS. Структура сегмента состояния задачи и его связь с параметрами его дескриптора, для процессоров i386+, приведена на рис.VII.7. Сегмент TSS является небольшим сегментом данных с разрешенными операциями записи и считывания. Его особенностью является то, что доступ к нему не разрешается никаким программам, даже на самом привилегированном, нулевом уровне. К нему может обращаться только сам процессор. Минимальный объем этого сегмента – 104 (68h) байт. Если при обращении к сегменту TSS процессор обнаружит, что значение в поле предела его дескриптора меньше 67h, немедленно срабатывает система защиты, и процессор уходит на прерывание (возникает особый случай). Этот объем сегмента носит название обязательной части TSS. Однако сегмент TSS, как и любой сегмент может быть расширен вплоть до 4 Гбайт. Практически сегменты TSS такого размера, конечно, никогда не используются, но сегменты, объемом превосходящие обязательные 68h байт делаются очень часто, особенно, когда используется битовая карта ввода/вывода (БКВВ). БКВВ служит для разрешения операций обмена информацией с периферийными устройствами тем программам, которые расположены на непривилегированных для этого уровнях. Следует заметить, что ряд авторов рассматривают карту разрешения ввода/вывода БКВВ как область памяти, независимую от TSS. Они считают, что в TSS, мол, только указывается на местоположение этой карты (в последних двух байтах TSS приводится смещение начального адреса БКВВ относительно начала сегмента TSS).

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

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

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

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

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

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

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

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

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

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

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

  • содержимое полей 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 и заканчивается перед нулевым битом БКВВ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]