Эта глава содержит описание возможностей многозадачной
работы процессора, которые включают способность обслуживания
одновременно нескольких задач и переключения между ними с
использованием обычных инструкций, таких, как переходы, вызовы
подпрограмм, прерывания и возвраты из них. В процессоре 80386
каждая из задач имеет свой блок состояния задачи и свое
виртуальное адресное пространство.
Хотя в архитектуре процессора однозначно определено, что
составляет задачу, это слово часто используется в значительно
более общем смысле. В компьютерной терминологии слово "задача"
часто ассоциируется со словами "работа" или "пользователь".
Такое определение может соответствовать определению задачи для
процессора 80386. В понимании 80386 задача - это вполне
определенная единица, тесно связанная с архитектурой процессора.
Каждая задача процессора 80386 имеет свое адесное пространство и
блок состояния задачи.
Система 80386 присваивает или не присваивает каждой "работе"
или "пользователю" реальную задачу процессора взависимости от
необходимости выделения отдельного виртуального адресного
пространства и блока статуса задачи. Если разделение необходимо,
то архитектура 80386 поддерживает его с помощью своих
многозадачных возможностью. Если не все задачи требуют реальной
индивидуальности, то распределение ресурсов может взять на себя
операционная система.
Даже если не присваивать каждой программе отдельную задачу,
типичная система состоит из нескольких задач всвязи с тенденцией
повышения надежности ситстемы по сравнению однозадачной.
Например, программы обслуживания исключительных ситуаций,
сообщающие о серьезных неполадках системы, должны составлять
отдельную задачу.
Полный виртуальный адрес включает селектор сегмента и
смещение. В защищенном режиме селектор (рис.15.1) содержит бит
TI (индикатор таблицы), определяющем где располагается
дескриптор - в GDT (ТI=0) или в активной в данный момент
(связанной с выполняющейся задачей) LDТ (ТI=1).
Возможность доступа к GDТ и к своей LDТ позволяет каждой
задаче обращаться к глобальным об`ектам (сегменты,задачи,и др.)
виртуального адресного пространства и к своему адресному
пространству. Выбор между таблицами осуществляется с помощью
бита ТI селектора.
В системе 80386 каждая задача имеет сегмент состояния задачи
- область памяти, содержащая состояние регистра задачи и другую
информацию. Без сегмента состояния задачи задача не существует,
так как не определено адресное пространство и ее состояние. ТSS,
в фиксированном формате, содержит состояние регистра задачи и
другую информацию, такую как начальные значения указателей стека
для уровней привилегии 2, 1, 0, значение для LDТR и таблицу
разрешенного ввода/вывода.
32-разрядная ТSS содержит не только 32-битное расширение всех
восьми регистров общего назначения, но и два новых сегмента данных
FS и GS. Она также включает указатель на массив бит - карту
разрешенного ввода/вывода. Каждая ТSS имеет бит Т, служащий для
отладочных целей - он позволяет генерировать трэп сразу при входе
в задачу (см. гл. 17 для более подробного описания встроенных
отладочных средств процессора 80386).
Для сравнения, на рис. 8.11 приведена структура ТSS при
минимальном использовании ее возможностей. В случае простой
системы, не использующей многозадачный режим, ТSS содержит лищь
начальное значение указателя стека нулевого уровня привилегии, а
остальные поля заполнены нулями.
На рис. 15.3 показана 16-битная ТSS, совместимая с ТSS
процессора 80286. Она содержит только набор 16-битных регистров и
в ней отсутствует таблица разрешенного ввода/вывода.
Новая ТSS вводится путем записи дескриптора в GDТ.
Подробное описание полей дескрипторов приведены в главе 14.
Поля дескриптора ТSS во многом аналогичны полям дескриптора
кодового сегмента, за исключением одного бита:
В (busy), показывает занята ли в данный момент задача (1 - да,
0 - нет). В простых системах с защитой бит В должен всегда быть
установлен в 1. Более полное описание функций этого бита
приведено на стр. 186-187.
Дескрипторы ТSS могут располагаться только в GDТ. Их
количество однозначно определяет количество задач в системе: по
одному дескриптору на задачу.
Они могут быть помещены в любую из таблиц дескрипторов:GDТ,
LDТ, или IDТ. Ловушка содержит селектор дескриптора ТSS в GDТ и
поэтому используется в качестве перенацеливающего механизма на
пути к задаче.
Ловушка задачи имеет только один формат, показанный на
рис. 15.5. Она может относится и к 16-, и к 32-битной ТSS, так
как ловушка взаимодействует лишь с дескриптором. Ловушка задачи
не содержит смещения, как ловушки 16- и 32-битных вызовов.
Смещение для нее определяется начальным значением ЕIР, как и в
самой ТSS, поэтому необходимость в смещении отпадает.
Одной из наиболее мощных возможностей 80386 является
возможность перехода от задачи к задаче с помощью обычных
инструкций. Такой переход обычно называют переключением задач.
80386 позволяет переключать задачи с помощью инструкций
межсегментной передачи управления: межсегментный переход,
межсегментный вызов, инструкции прерываний INТ 3, INТ n, INТО и
ВОUND, IRЕТ. Сами инструкции ничем не отличаются от обычных.
Переключение задач происходит если указать селектор ТSS или
ловушки задачи в поле операнда-приемника инструкции.
Задачи,участвующие в переключении называются уходящая и
приходящая. ТSS текущей задачи указан в регистре задачи (ТR)
80386. ТSS приходящей задачи указан в инструкции, инициирующей
переключение задач.
Процессор записывает состояние регистров уходящей задачи в
текущей ТSS, указанную в регистре ТR, а новое состояние регистров
считывает из ТSS приходящей задачи, указанной в инструкции.
Записывамая информация 32-битной ТSS уходящей задачи:
Восемь 32-битных регистров общ. назначения
Шесть сегментных регистров
32-битный регистр флагов
Записывамая информация 16-битной ТSS уходящей задачи:
Восемь 16-битных регистров общ. назначения
Четыре сегментных регистра
16-битный регистр флагов
Считываемая информация 32-битной ТSS приходящей задачи:
Восемь 32-битных регистров общ. назначения
Шесть сегментных регистров
32-битный регистр флагов
Содержимое LDТR для создания LDТ (свое адресное пространство)
СR3, для создания страничного директория (свои страничные
таблицы)
Т-бит, проверка необходимости отладочного прерывания
Считываемая информация 16-битной ТSS приходящей задачи:
Восемь 16-битных регистров общ. назначения
Четыре сегментных регистра
16-битный регистр флагов
Содержимое LDТR для создания LDТ (свое адресное пространство)
Приходящая задача использует новые значения для LDТR и СR3,
то есть каждая задача может использовать свою LDТ и директорий
таблиц страниц. Однако, предполагается, что задача не будет
менять эти значения, поэтому изменения не записываются по
окончанию задачи.
Переключение задач через ТSS является наиболее простым
способом переключения, так как селектор в таблице указан
непосредственно. Однако программа, производящая переключение,
должна иметь соответствующий уровень привилегии для доступа к
сегменту состояния задачи.
Результат переключения с помощью ловушек такой же,как и в
предыдущем случае. Передача управления производится путем
указания селектора ловушки задачи, который, в свою очередь,
содержит селектор ТSS. Такой косвенный метод переключения требует
дополнительно около 15 тактов, но архитектурные преимущества
этого метода делают его предпочтительным. Среди этих преимуществ
возможность использования большого DРL и переключения из задачи с
низким уровнем приоритета. Кроме того в отличие от ТSS , ловушки
могут располагаться не только в GDТ. Размещение ловушки в IDТ
позволяет прерываниям и исключительным ситуациям производить
переключение задач. Если ловушка размещена в LDТ, то переключать
задачи будут только использующие его программы. Ограничить
использование ТSS в GDТ,доступной всем задачам, можно путем
задания очень малого размера DРL, обычно 0, так что только
программы нулевого упровня привилегии смогут обращаться к нему.
В каждый момент времени активизирована только одна задача и
задачи, вызванные ей. Активные задачи отмечаются битом В в каждом
из дескрипторов ТSS. Таблица 15.1 иллюстрирует изменение бита В
при переключении задач.
Межзадачный вызов и инструкции программных прерываний
поддерживаются наличием поля обратной связи в ТSS. При этом
селектор вызвавшей задачи записывается в поле обратной связи
ТSS вызванной задачи.
Таблица 15.1
Изменение бита активности задачи
Инструкция, исп. для перекл. задач | Влияние на бит В уходящей задачи | Влияние на бит В приходящей задачи |
Межсегментный переход | Сброс в 0. Переход не приводит к вложенности задач, поэтому уходящая задача становится неактивной | Устанавливается в 1. Приходящая задача всегда активна |
Межсегментный вызов | Остается в 1. Вызов приводит к вложенности задач. Уходящая задача остается активной и ждет инструкции IRET | Устанавливается в 1. Приходящая задача всегда активна |
Программные и аппаратные прерывания | Также как и для вызова | Также как и для вызова |
Инструкция IRET | Сбрасывается в 0. Инструкция означает окончание работы задачи и возврат в вызвавшую задачу | Остается в 1. Вызвавшая задача была и остается активной |
Таблица 15.2
Взаимодействие поля обратной связи ТSS и бита NТ ЕFLАG
Инструкция,производящая переключение | Влияние на поле обратной связи уходящей задачи | Влияние на поле обратной связи приходящей задачи | Влияние на бит NT регистра EFlags |
Межсегментный переход | Не влияет | Уст. на нулевой сектор. Задача не вызывалась - возвращаться некуда | Сбрасывается в 0. Задача не вложена |
Межсегментный вызов | Не влияет | Уст. по селектору ТSS вызвавшей задачи. Это позволяет организовать вложенность задач и возможность возврата | Устанавливается в 1. Приходящая задача является вложенной |
Программные и аппаратные прерывания | Не влияет | Также, как и для вызова | Также, как и для вызова |
Инструкция IRET | Не влияет | Не влияет. Если приходящая задача вложенная, существующее соответствие сохраняется | Устанавливается по флаговому региструв ТSS приходящей задачи |
Инструкция IRЕТ производит возврат в вызвавшую задачу.
Возврат производится в случае установленного флага вложенной
задачи (NТ) регистра ЕFLАG по информации поля обратной связи.
Отметим, что инструкция работает нормально в случае, когда NТ
равен 0. Состояние бита может быть изменено только программой с
уровнем привилегии 0 (см. табл. 15.2).
Содержание
Вперед