318.00K
Category: electronicselectronics

Мультизадачность. Процессор 80286

1.

МУЛЬТИЗАДАЧНОСТЬ
Процессор 80286 поддерживает несколько задач путем переключения с одной
задачи на другую. Для этого он ассоциирует с каждой задачей сегмент памяти,
содержащий всю информацию, необходимую для запуска и останова задачи. Этот
специальный сегмент называется сегментом состояния задачи TSS. Кроме того, в
процессоре имеется 16-битный регистр задачи, содержащий селектор GDT для
сегмента TSS текущей выполняющейся задачи. Для ускорения доступа к
выбранному TSS с регистром задачи ассоциирован теневой регистр, содержащий
выбранный дескриптор. Хотя регистр задачи можно загружать и запоминать с
помощью команд LTR (загрузить в регистр задачи) и STR (запомнить содержимое
регистра задачи), обычно процессор оперирует регистром задачи автоматически
в ходе переключения задач.
Основное назначение сегмента состояния задачи - сохранять содержимое
регистров задачи, когда процессор ее не выполняет. При переключении на
другую задачу процессор 80286 предпринимает следующие действия:
1) сохраняет все "видимые" программе регистры (за исключением регистра GDT)
в сегменте состояния задачи, на который показывает регистр задачи;
2) загружает в регистр задачи селектор для нового сегмента состояния задачи;
3) загружает свои регистры из нового сегмента состояния задачи и продолжает
выполнение новой задачи.

2.

МУЛЬТИЗАДАЧНОСТЬ 2
Сегменты состояния задач, как и сегменты LDT, имеют свои специальные
дескрипторы. В регистр задачи можно загружать только селекторы дескрипторов TSS.
Нам уже знакомы все его поля за исключением бита занятости В. Процессор
80286 устанавливает в 1 бит занятости в дескрипторе TSS для текущей
выполняющейся задачи и сбрасывает его в 0, когда переключается на другую
задачу. Бит занятости используется в системах с несколькими процессорами
80286, чтобы предотвратить выполнение одной и той же задачи двумя
процессорами одновременно. Переключение на задачу с установленным битом
занятости вызывает особый случай защиты.
Формат первых 44 байт сегмента состояния задачи показан на след. слайде. При
необходимости сегмент состояния задачи можно расширить для дополнительной
информации, требуемой программами ОС (владелец задачи, учетная информация, ...).

3.

МУЛЬТИЗАДАЧНОСТЬ 3
Регистры, которые не показаны на рисунке (регистр GDT, регистр
задачи, теневые регистры и др.), не запоминаются при
переключении задач: они либо остаются неизменными, либо
определяются вновь.
Селектор для дескриптора TSS нельзя
использовать для
считывания или записи в сегмент состояния задачи. Он
предназначен только для переключения задач. Специальной
команды для переключения задач в 80286 нет. Вместо этого
команда межсегментного перехода (JMP), которая адресует
сегмент TSS, вызывает не переход, а переключение на
соответствующую задачу. В этом случае смещение в адресе
перехода команды JMP игнорируется.
Переключение задач настолько отличается от перехода, что
невозможно представить себе подстановку "перехода к сегменту
состояние задачи" вместо "перехода к сегменту кода" (или
наоборот) и заставить программу все же сделать что-то
осмысленное. Функции команды перехода и команды
переключения задач были объединены в один код операции
просто для экономии кодов операций.

4.

МУЛЬТИЗАДАЧНОСТЬ. Шлюз задачи
Обычные правила защиты сегментов применимы и к TSS. Сегмент состояния
задачи можно использовать только внутри кольца, определяемого его уровнем
DPL, или кольцом с меньшим номером (более привилегированным). Однако
шлюз задачи позволяет программе переключиться на задачу, соответствующую
сегменту TSS, в кольце с меньшим номером.
Шлюзы задач, в отличие от шлюзов вызовов, не накладывают ограничений на
точку входа, но их все же можно использовать для обеспечения защиты.
Предположим, что конкретная задача выполняет обслуживание, которое мы
хотим ограничить выбранными пользовательскими задачами. Можно разместить
сегмент TSS для задачи обслуживания в таблице GDT кольца 0. Задачам, которым
разрешено пользоваться обслуживанием, можно задать шлюзы задачи
обслуживания в их таблицах LDT. Тогда задачи без шлюза получить обслуживание
не смогут.

5.

Пример: разделение времени
Рассмотрим, как команда переключения задач позволяет реализовать простой
вариант разделения времени.
Будем полагать, что все сегменты TSS содержат в их необязательных частях 4-байтное
программное поле связи. Это позволяет нам связать сегменты состояний задач в
списки, размещая в полях связи виртуального адреса (фактически используется
только селектор виртуального адреса) - см. рис. Регистр задачи адресует сегмент TSS
той задачи, которая сейчас выполняется. Поле связи в каждом TSS адресует сегмент
состояния следующей задачи, а поле связи последнего TSS показывает на первый.
Так как дескрипторы
сегментов TSS нельзя
использовать
для
обращений по записи
и считыванию, мы
предположим, что
сразу за каждым дескриптором TSS находится дескриптор сегмента данных для того
же самого сегмента. Такая форма альтернативного именования относительно проста,
так как дескриптор можно проверить на альтернативные имена, просто контролируя
дескрипторы, которые в дескрипторной таблице находятся сразу перед ним и после
него. Мы можем получить селектор альтернативного дескриптора сегмента данных,
прибавляя 8 к селектору для дескриптора TSS .

6.

Пример: разделение времени 2
После сохранения содержимого некоторых регистров и получения доступа по
считыванию из текущего сегмента TSS; процедура dispatch выполняет косвенный
переход JMP (фраза DWORD PTR заставляет ассемблер образовать косвенный
межсегментный переход) через виртуальный адрес, находящийся в поле связи
текущего сегмента состояния задачи. Так как этот виртуальный адрес показывает на
TSS, команда JMP осуществляет переключение задачи, а не переход.

7.

Переключение численных задач
При переключении 80286 должны сохраняться и восстанавливаться всего 30
байт регистров. Но для 80287 состояние всех регистров сопроцессора занимает
94 байта. Сохранение и восстановление этой дополнительной информации может
существенно замедлить переключение задач.
Было бы хорошо, если бы ОС могла избежать сохранения и восстановления
содержимого регистров 80287 за исключением только тех случаев, в которых это
необходимо. Хитрость состоит в том, чтобы запомнить последнюю задачу,
которая выполняла команду сопроцессора 80287, и задержать сохранение
содержимого его регистров для этой задачи до тех пор, пока другая задача не
будет выполнять команду сопроцессора. Для реализации этого в 80286
предусмотрен регистр, называемый словом состояния машины MSW; его нет в
микропроцессоре 8086.
Слово состояния машины можно загружать и запоминать с помощью команд
LMSW (загрузить слово состояния машины) и SMSW (запомнить слово состояния
машины).
Слово состояния машины

8.

Переключение численных задач 2
Если к 80286 подключен сопроцессор, ОС во время инициализации должна
сбросить в нуль бит режима эмуляции ЕМ в слове состояния машины. Если бит
ЕМ равен 1, то процессор 80286 при встрече команды ESC генерирует особый
случай отсутствия сопроцессора. Поэтому при ЕМ = 1 процедура обработки
особого случая отсутствия сопроцессора может эмулировать команды
сопроцессора программно. Далее, если сопроцессор 80287 эмулируется
программно, его моделируемые регистры должны храниться в памяти как часть
логического адресного пространства задачи. Это делает ненужным сохранение и
восстановление моделируемых регистров при переключениях задач.
Бит задача переключена TS слова состояния машины автоматически
устанавливается в 1, когда 80286 осуществляет переключение задач. Он остается
установленным в 1 до явного сброса командой CLTS (сбросить бит задача
переключена). Если 80286 встречает команду ESC и обнаруживает TS = 1, то он
генерирует особый случай отсутствия сопроцессора независимо от состояния бита
ЕМ. Процедура обработки особого случая отсутствия сопроцессора должна
вначале проверить бит ЕМ. Если он находится в состоянии 1, необходимо
эмулировать команду.

9.

Переключение численных задач 3
Если же ЕМ = 0, предпринимаются следующие действия:
1. Сбросить бит TS в 0.
2. Проверить, является ли текущая задача последней задачей, вызвавшей этот
особый случай. Если да, осуществить возврат в программу. Если нет, необходимо
сохранить содержимое регистров сопроцессора в TSS последней задачи,
вызвавшей особый случай.
3. Восстановить содержимое регистров сопроцессора из текущего TSS.
4. Отметить тот факт, что текущая задача стала последней задачей, вызвавшей
этот особый случай.
5. Осуществить возврат в программу.
После возврата в программу на шаге 2 или 5 процессоры 80286 и 80287
продолжают выполнение с команды ESC, вызвавшей особый случай. Поскольку
бит TS теперь сброшен, эта команда выполняется, не вызывая еще одного особого
случая отсутствия сопроцессора.
Если сопроцессор подключен к процессору, то во время инициализации ОС
должна установить в 1 бит присутствия сопроцессора MP в слове состояния
машины. Тогда процессор 80286 будет учитывать команды WAIT, а также команды
ESC, когда бит TS содержит 1.
Микропроцессор 8086 не имеет особого случая отсутствия сопроцессора и не
может переключать задачи, поэтому для совместимости с ним в реальном
режиме биты TS, MP и ЕМ должны быть сброшены в нуль.

10.

Переключение численных задач 4
Поскольку в реальном режиме переключения задач быть не может, бит TS будет
оставаться в состоянии 0 и особый случай отсутствия сопроцессора никогда не
возникнет. Использование бит MP и ЕМ показано в табл.
Последний бит в слове состояния машины - это бит защита разрешена РЕ. Он
установлен в состояние 1, если процессор 80286 работает в виртуальном режиме, и в
состояние 0 при работе в реальном режиме.

11.

Вызов задачи
Многие операционные системы поддерживают такое взаимодействие с пользователем, которое можно
проиллюстрировать на следующем примере. Пользователь отлаживает свою программу с помощью
интерактивного отладчика. Он обнаруживает, что должен модифицировать входной файл, поэтому он дает
команду отладчику, которая приостанавливает отладчик и инициирует новую задачу, содержащую
интерактивный редактор текста. Работая с редактором текста, пользователь решает уничтожить файл и дает
команду редактору текста инициировать программу удаления файла. Редактор текста инициирует новую
задачу, содержащую программу удаления файла, и приостанавливает себя. Когда программа удаления файла
закончена, редактор текста возобновляется в той точке, где пользователь запрашивал удаление файла. Когда
пользователь, наконец, завершает редактирование файла, он заканчивает редактор текста, который переводит
его в ту точку отладчика, из которой он вышел. После этого пользователь продолжает отладку.
В любой момент времени выполняется только одна задача, а дисциплина
переключения задач напоминает стек. Процессор 80286 поддерживает
рассмотренный механизм аппаратно. Аналогично тому, как команде JMP
разрешено обращаться к сегменту состояния задачи, так и команде вызова CALL
разрешено обращаться к сегменту состояния задачи или шлюзу задачи. Команда
CALL, адресующая сегмент состояния задачи или шлюз задачи, вызывает
переключение на выбранную задачу, как и команда JMP. Но, кроме того,
процессор 80286 помещает селектор вызывающей задачи (старое содержимое
регистра задачи) в поле обратной связи сегмента состояния вызываемой задачи.
Он также устанавливает в 1 флажок вложенной задачи NT в вызываемой задаче.
На рис. (сл. слайд) показано, что происходит, когда задача А (инициированная
командой JMP) вызывает задачу В, вызывающую задачу С, а эта задача в свою
очередь вызывает задачу D.

12.

Вызов задачи 2
Команда JMP перехода к
задаче
сбрасывает
флажок NT в нуль,
поэтому он сообщает,
инициирована ли зада-ча
командами JMP или CALL.
Ещё
одно
разли-чие
между командами JMP и
CALL
заключается
в
интерпретации
бита
занятости В в дескрипторе TSS.
Напомним, что у выполняющейся программы бит В установлен в 1, поэтому попытка
второго процессора 80286 одновременно выполнить эту же задачу вызывает особый
случай. Команда JMP сбрасывает в 0 бит В в "покидаемой" задаче и устанавливает в 1
бит В в инициируемой задаче. С другой стороны, команда CALL не модифицирует бит
В вызывающей задачи, но устанавливает в 1 бит В в вызываемой задаче.
Следовательно, у каждой задачи в цепи вызовов бит В будет установлен в 1. Такое
действие эквивалентно запрещению реентрантных и рекурсивных вызовов задач.
Команда IRET в задаче с битом NT, содержащим 1, производит переключение на
задачу, адресуемую полем обратной связи текущего сегмента TSS. Если NT = 0, то
команда IRET действует как обычный выход из прерывания.

13.

Вызов задачи 3
Одна из причин использования команды IRET, а не команды RET для возврата из
вызванной задачи, заключается в том, чтобы внутри вызванной задачи пользоваться
обычными процедурами. Процессор 80286 автоматически сбрасывает флажок NT на
время работы любых процедур прерываний, поэтому они также действуют правильно.
Вторая причина применения команды IRET для возврата из задачи состоит в том, что
наиболее важное использование вызовов задач связано с обработкой прерываний.
Мы получаем много преимуществ, реагируя на прерывание вызовом задачи, а не
вызовом процедуры. Такие вызываемые задачи называются задачами прерываний, и
мы подробно обсудим их в следующем разделе.
Если мы вызовем процедуру, разрешим ей осуществить возврат, а затем вызовем ее
еще раз, то, очевидно, вход в процедуру произойдет в одном и том же месте в обоих
вызовах. Если же мы вызовем задачу, разрешим ей осуществить возврат, а затем
вызовем еще раз, то вход осуществится повторно на команде, находящейся за
командой IRET, которая производила возврат. По этой причине задачи, которые
рассчитаны на вызов, обычно имеют следующую форму:
start:

Выполнить обслуживание

IRET
JMP start

14.

Прерывания
В большинстве современных процессоров имеются средства прерывания их
внешними устройствами. Они освобождают процессор от периодической проверки
необходимости обслуживания устройств. Например, вместо того, чтобы заставить
процессор часто опрашивать клавиатуру, не нажата ли клавиша, и большую часть
времени получать отрицательные ответы, гораздо эффективнее разрешить
процессору игнорировать клавиатуру, но позволить клавиатуре привлекать внимание
процессора при нажатии клавиши. Первый способ называется опросом (полингом), а
второй - прерыванием.
Процессор 80286 имеет два входа, по которым внешние устройства могут привлечь
его внимание: вход NMI немаскируемого прерывания и вход INTR маскируемого
прерывания. Рассмотрим вначале вход NMI. Когда внешнее устройство формирует
сигнал на входе NMI, процессор прекращает свои действия (но не в середине
команды) и реагирует на прерывание. Однако процессор может выполнять очень
важную задачу, поэтому внешние устройства не должны прерывать процессор по
входу NMI за исключением появления катастрофических событий. Примером таких
событий служит сообщение о том, что напряжение сети упало до 100 В и продолжает
уменьшаться, т.е. возник "отказ сети". Ясно, что внешнее устройство должно известить
процессор о том, что ему осталось "недолго жить". За несколько оставшихся
миллисекунд процессор может привести "свои дела в порядок" (например, передать
важные результаты в безопасное место), прежде чем генератор синхронизации
остановится.

15.

Прерывания (02)
Внешнее устройство имеет возможность прервать процессор по входу INTR.
Процессор может проигнорировать этот входной сигнал. Реакция зависит от состояния
флажка разрешения прерываний IF: прерывания разрешены, если IF = 1, и запрещены,
если IF = 0 (процессор не реагирует на входные сигналы INTR).
Кроме сигнала на входе INTR, внешнее устройство должно сообщить процессору
причину прерывания. Причин прерываний по входу INTR может быть довольно много
(например, до 256), а причина прерывания по входу NMI всего одна (надвигающаяся
катастрофа). Поэтому по запросу процессора внешнее устройство сообщает число из
диапазона 0 255, соответствующее причине прерывания по входу INTR и называемое
типом прерывания. Для каждого типа прерывания у процессора есть программа,
которую он должен выполнить до возобновления прерванной задачи. Адреса этих
программ находятся в 256-элементной таблице. Каждый ее элемент состоит из
четырех байт и содержит значения регистров IP и CS, соответствующие началу
программ для конкретных типов прерываний.
Таблица начинается с адреса памяти 0. Программы, выполняющиеся при
возникновении прерываний, часто называются процедурами прерываний.
Рассмотрим действия процессора, когда он воспринимает сигнал INTR и прерывания
разрешены (IF = 1). После завершения текущей команды процессор прекращает свои
операции и готовится выполнить процедуру прерывания конкретного типа. Прежде
всего он сохраняет всю важную информацию о своих действиях, чтобы по завершении
процедуры прерывания их можно было возобновить. Удобно сохранить эту
информацию в стеке.

16.

Прерывания и особые случаи
Программа процессора 80286 может быть прервана по одной из трех причин:
1. Подключенное к процессору периферийное устройство посылает сигнал
прерывания.
2. Команда процессора 80286 (или 80287) вызывает особый случай.
3. Программа выполняет команду INT прерывания.
Каждой конкретной причине прерывания назначен номер от 0 до 255. Некоторые
номера прерываний уже назначены аппаратно процессором 80286 (например, для
всех его особых случаев), другие присваиваются аппаратной системой, в которую
встроен процессор (например, прерывания дискового накопителя), еще одни
зарезервированы для дальнейшего расширения, а все остальные могут
использоваться программами.
Когда возникает прерывание, процессор 80286 использует номер прерывания как
индекс в таблице. Из таблицы извлекается адрес обработчика прерывания; затем
обработчик вызывается для производства конкретной обработки, требуемой
прерыванием. Ситуация похожа на то, как будто в программе в точке прерывания
вставлена команда вызова.
В процессоре 80286 адреса возвратов для особых случаев адресуют первый байт
"виноватой " команды. Все префиксы считаются частью команды. Мы увидим
преимущества такого соглашения при обсуждении далее вопроса о возможностях
повторного запуска ("рестартируемости").

17.

Приоритеты прерываний
Прерывания от некоторых периферийных устройств являются более срочными или
важными, чем от других. Очевидно, потребуется как-то упорядочить прерывания в
системе, назначив важным из них более высокий приоритет. В самом процессоре
80286 схем для этого нет, поэтому обычно все прерывающие устройства
подключаются к микросхеме 8259А контроллера прерываний, а она подключается к
процессору 80286.
Контроллер прерываний 8259А имеет несколько режимов работы. В наиболее часто
используемом режиме каждому устройству назначается уникальный приоритет. Если
прерывания от двух устройств возникают одновременно, контроллер передает в
процессор прерывание с более высоким приоритетом, а менее приоритетное
прерывание запоминает. Как только процессор оканчивает обработку первого
прерывания, контроллер сообщает ему о втором прерывании.
Как же контроллер прерываний узнает о том, когда процессор заканчивает обработку
прерывания? Для этого программист вставляет в конце процедуры прерывания
каждого внешнего устройства специальные команды; эти команды выводят особый
код конца прерывания в порт, подключенный к контроллеру прерываний.
MOV DX,inportnum
MOV AL,eoicode
OUT DX,AL
Номер порта inportnum и код конца прерывания eoicode зависят от особенностей
конкретных схем и режима работы контроллера прерываний.

18.

Приоритеты прерываний 2
А что произойдет, если прерывание от устройства возникает в середине процедуры
прерывания? Если новое прерывание имеет приоритет, меньший или равный
приоритету обслуживаемого прерывания, контроллер задержит новое прерывание
до завершения процедуры прерывания. Если же новое прерывание имеет более
высокий приоритет, чем обслуживаемое, то возможны два случая:
1. Если прерывания разрешены (IF = 1), процедура прерывания будет сама прервана и
вызывается процедура прерывания с более высоким приоритетом. Такая ситуация
называется вложением прерываний и ее правильно обрабатывают и процессор, и
контроллер прерываний.
2. Если прерывания запрещены (IF = 0), новое прерывание задерживается до возврата
из текущей процедуры прерывания, несмотря на то, что новое прерывание имеет
более высокий приоритет.
По умолчанию процессор 80286 (в реальном режиме) при входе в процедуру
прерывания запрещает прерывания. Это допустимо, если она состоит всего из
нескольких команд, но длинная процедура должна сама разрешать прерывания,
чтобы избегать задержки обслуживания прерывания с более высоким приоритетом.
Разрешение прерываний осуществляет команда STI (установить флажок разрешения
прерываний).

19.

Прерывания в виртуальном режиме
В виртуальном режиме таблица
прерываний содержит дескрипторы различных обработчиков
прерываний и называется дескрипторной таблицей прерываний IDT. Базовый адрес и предел
таблицы IDT хранятся в регистре
IDT. Регистр IDT можно загружать и
запоминать с помощью команд
LIDT и SIDT, действующих аналогично
рассмотренным
ранее
командам LGDT и SGDT. Таблица IDT,
как и таблица GDT, одна.
Содержимое регистра IDT не
изменяется при переключении
задач.
Регистр IDT обычно загружается при инициализации системы и в дальнейшем не
изменяется. Поскольку часть инициализации осуществляется при работе процессора
80286 в реальном режиме, команда LIDT в реальном режиме допустима. Ради
совместимости с микропроцессором 8086 регистр IDT инициализируется на базовый
адрес 0 и предел 256 х 4 - 1 = 1023 (каждый элемент в таблице прерываний имеет
длину четыре байта и всего существует 256 типов прерываний).

20.

Шлюзы в таблице IDT
Шлюзы специальных прерываний - это стандартный вид
шлюзов для особых случаев.
Процедуры обработки особых
случаев, адресуемые шлюзами специальных прерываний,
вызываются как в реальном
режиме, но при входе в них
a — формат дескрипторов прерываний и специальных
прерываний, б — байт доступа шлюза специального
прерывания,
в —байт доступа шлюза прерывания
флажок разрешения прерываний IF остается неизменным. Именно это и требуется в
процедуре обработки особого случая, так как нежелательно, чтобы особые случаи в
задаче выключали механизм разделения времени операционной системы путем
игнорирования прерываний таймера.
Шлюзы задач - это стандартный вид шлюзов для внешних прерываний. Обработчики
прерываний, адресуемые шлюзами задач, инициируются операцией вызова задачи,
как было описано выше. Это именно то, что требуется при обработке прерываний от
внешних устройств, так как обычно такие сигналы прерываний направляются не в
текущую выполняющуюся программу, а в операционную систему. Неважно, какая
пользовательская программа занимает процессор в момент появления сигнала
прерывания, поэтому нет основания в выполнении обработчика прерывания как
процедуры в некоторой пользовательской задаче.

21.

Шлюзы в таблице IDT
Если задача обработки прерывания выполняется с разрешенными прерываниями, она
сама может быть прервана устройством с более высоким приоритетом. Такую ситуацию
(вложенные вызовы задач) механизм вызова процессора 80286 обрабатывает правильно.
Фактически главная причина введения в процессор вызова задачи заключается в том,
чтобы обеспечить правильную и эффективную реализацию задач обработки прерываний.
Шлюзы задач необходимо также использовать для обработки особых случаев, которые
настолько разрушительны, что "поврежденная" задача не может осуществить вызов
процедуры (примером служит особый случай недействительного сегмента TSS). В этой
ситуации выполнение обработчика прерывания как отдельной задачи обеспечивает
изолирование задач, требуемое для производства эффективного действия.
Имеются ситуации, когда шлюзы задач нельзя использовать для внешних прерываний.
Если обработчик прерывания состоит всего из нескольких команд, более быструю
реакцию можно получить, применяя шлюз прерывания или шлюз специального
прерывания (см. далее), которые реализуют быстрый вызов процедуры, а не
переключение задач. Примером служит рассмотренная ранее процедура dispatch. Но если
обработчик прерывания содержит больше команд, то различие во времени между
вызовом процедуры и переключением задач становится незначительным по сравнению
со временем выполнения тела обработчика прерывания.
Последним типом шлюзов, разрешенных в IDT, являются шлюзы прерываний. Они
действуют также, как и шлюзы специальных прерываний, но перед вызовом адресуемой
процедуры они запрещают прерывания (сбрасывают флажок IF). Следовательно, переход
через шлюз прерывания действует так же, как прерывание в реальном режиме, поэтому
шлюзы прерываний можно применить для обеспечения совместимости с реальным
режимом. Они же применяются, когда шлюз задачи нежелателен (см. выше).
English     Русский Rules