Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л07_Мультипрограммный режим работы МП_Прерывани...docx
Скачиваний:
11
Добавлен:
13.11.2019
Размер:
369.21 Кб
Скачать

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

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

Шлюз задачи имеет формат (рис. 5).

Рис. 5.  Формат шлюза задачи

Он имеет статус системного объекта, его тип в байте доступа с значением 0101.

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

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

► При переключении задач проверяются привилегии, установленные для доступа к данным: DPL max (CPL, RPL), т. е. допускается переключение на задачи, чья степень защиты меньше или равна уровню привилегий текущей программы и запроса.

Как правило, поле DPL дескриптора TSS равно 0, поэтому переключение задач могут производить только привилегированные программы.

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

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

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

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

Рассмотрим теперь переключение задач более подробно на примере механизма прямого переключения (рис. 6).

В общем случае команда межсегментного перехода содержит 3 поля:

  • поле кода операции (JMP - безусловный переход, CALL - переход с возвратом),

  • селектор нового сегмента команд, который заносится в сегментный регистр CS, и

  • Рис. 6.  Механизм прямого переключения задач

    поле смещения, содержи-мое которого заносится в регистр-указатель команд EIP.

При переключении задач выполняется последовательность действий:

  1. В случае, когда тип дескриптора, определяемого вторым полем команды перехода, указывает, что данный дескриптор является дескриптором TSS и новая задача не занята (В = 0), запускается механизм переключения задач. В этом случае поле смещения в команде игнорируется.

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

  3. Дескриптор TSS новой задачи переписывается из глобальной таблицы дескрипторов в теневой регистр регистра задач МП. Этот дескриптор определяет положение в памяти сегмента состояния новой задачи.

  4. Информация о новой задаче переписывается из своего TSS в регистры микропроцессора.

  5. Если команда, вызвавшая переключение задач, предполагает последующий возврат к старой задаче (CALL), то в поле селектора возврата TSS входящей задачи заносится содержимое регистра TR снимаемой с обработки задачи. При этом устанавливается значение бита вложенной задачи NT = 1 в регистре флагов EFLAGS.

  6. В регистр TR МП из второго поля команды заносится селектор дескриптора TSS новой задачи.

● Использование флага вложенной задачи NT и бита занятости B позволяет организовать корректную обработку вложенных задач. Порядок установки этих бит в зависимости от типа команды, вызвавшей переключение задач, указан в табл. 3.

Таблица 3. Модификация флагов занятости и вложенности при переключении задач

Тип команды

Входящая задача

Выходящая задача

Флаг NT в EFLAGS

Бит в дескрипторе TSS

Флаг NT в EFLAGS

Бит в дескрипторе TSS

CALL

1

1

X

1

JMP

0

1

X

0

◊ Команда CALL устанавливает B = 1 для новой задачи и сохраняет B = 1 для предыдущей. Таким образом, каждая задача в цепи вызовов оказывается занятой, что запрещает применение рекурсивных процедур и реентерабельных программ.

◊ Команда JMP при переключении на новую задачу не сохраняет в TSS селектор возврата и устанавливает NT = 0, а также B = 0 в дескрипторе старой задачи и B = 1 в дескрипторе новой задачи.

● Возврат из задачи осуществляется по команде IRET, которая анализирует флаг NT и при NT = 1 осуществляет переключение на задачу, задаваемую селектором возврата в TSS текущей задачи.

При NT = 0 осуществляется обычная процедура возврата из процедуры с восстановлением из стека содержимого CS, EIP, EFLAGS.

● Обычная команда RET возврата из подпрограммы не учитывает вложения задач.

Краткие итоги.

  • Рассмотрены принципы организации мультипрограммного режима обработки информации,

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

  • Разобран механизм переключения задач.

Лекция 7, часть 2