7.4.6.3.3. Переключение задач

 

Процессор составляет расписание задач и выполняет задачи на основе набора приоритетов операционной системы. Для этого МП 80386 использует регистр задачи TR, в котором содержит селектор и дескриптор для сегмента TSS текущей задачи. Регистр TR содержит как видимую, так и невидимую части. Его видимая и изменяемая части могут быть прочитаны и модифицированы командами. Невидимая часть обслуживается процессором с тем, чтобы соответствовать изменяемой части, и не может быть считана ни одной командой.

Две команды (загрузка регистра задачи LTR и сохранение регистра задачи STR) позволяют считывать и модифицировать изменяемую часть регистра TR. Обе команды требуют одного операнда, которым является 16-разрядный селектор, расположенный в памяти или регистре общего назначения.

Команда LTR загружает изменяемую часть регистра задачи селектором-оператором, который должен выбрать дескриптор TSS в таблице GDT. При исполнении команды LTR загружается также невидимая часть регистра информацией из дескриптора TSS, выбранного операндом. Команда LTR является привилегированной, т. е. может исполняться только тогда, когда уровень CPL равен нулю. Обычно команда LTR используется во время инициализации системы для установки начального значения регистра задачи. После этого содержимое регистра TR изменяется операциями переключения задачи.

Команда STR сохраняет изменяемую часть регистра TR в регистре общего назначения или в слове памяти, она не является привилегированной.

Дескриптор вентиля задачи дает косвенную, защищенную ссылку на сегмент TSS. В дополнение к дескрипторам TSS МП 80386 использует вентили задачи для достижения следующих трех целей.

Поскольку бит занятости хранится в дескрипторе TSS, то каждая задача должна иметь только один такой дескриптор. Однако вентилей задачи может быть несколько, они выбирают единственный дескриптор TSS.

С помощью вентилей задачи системные программы могут ограничивать право вызывать переключения на специфичные задачи.

Вентили задачи могут также располагаться и в таблице IDT, что позволяет вызывать переключение задачи прерываниями и исключениями.

Для переключения задач операционная система выдает команды перехода JMP или вызова CALL, операндом которых является селектор для сегмента TSS или для вентиля задачи новой задачи.

Процессор сначала проверяет, возможно ли переключение текущей задачи на другую задачу. В случаях команд JMP или CALL применяются правила привилегий доступа к данным. Уровень DPL дескриптора TSS или вентиля задачи должен быть меньше или равен максимальному из уровней CPL и RPL селектора вентиля.

Затем проверяется дескриптор TSS с целью выяснения, является ли этот сегмент

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

Потом процессор исполняет команду JMP перехода к новому сегменту TSS, запоминая сначала текущее содержимое регистров в текущем сегменте TSS. Указатель команд EIP загружается адресом команды, следующей за той, которая вызвала переключение задачи. Затем он загружает регистр TR селектором, определенным в команде JMP, отмечает занятым дескриптор TSS включаемой задачи и устанавливает бит переключения задачи TS в слове состояния машины MSW. Так как теперь действует новый сегмент TSS, то МП 80386 загружает свои регистры значениями из этого нового сегмента TSS. Исполнение продолжается с команды, на которую показывает указатель команд новой задачи. Любая обнаруживаемая на этом шаге ошибка возникает в контексте включаемой задачи.

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

Каждое переключение задачи устанавливает бит TS в слове MSW. Флаг TS полезен, когда используется сопроцессор, например арифметический. Бит TS показывает, что контекст сопроцессора может не соответствовать текущей задаче МП 80386.

Для возобновления выполнения старой задачи операционная система выдает команду JMP перехода к сегменту TSS старой задачи. Процесс запоминания текущего содержимого регистров, загрузки регистров новым содержимым и продолжения выполнения повторяется. Переключение задачи занимает по времени около 17 мкс.

Уровень привилегий, на котором осуществляется рестарт во включаемой задаче, не ограничен уровнем привилегий прекращаемой задачи. Задачи изолированы своими отдельными адресными пространствами и сегментами TSS, а для предотвращения неправильного доступа к сегментам TSS используются правила привилегий доступа. Таким образом, для поддержания определенных отношений между уровнями CPL отдельных задач не требуется никаких специальных правил привилегий. Новая задача просто начинает исполнение на уровне привилегий, определенном значением поля RPL селектора программного сегмента, загружаемого из сегмента TSS.

Команды JMP, CALL, IRET, а также прерывания и исключения - это все обычные механизмы, которые могут быть использованы, когда не требуется переключение задачи. Стандартный механизм отличается от механизма, который вызывает переключение задачи, либо типом ссылки дескриптора, либо битом вложенной задачи NT в слове флагов.

 

 

HotLog

Заказчику web дизайна и программирования - каталог сайтов, обзор дизайн студий