Читайте также:
|
|
2.35. АПАРАТНІ ЗАСОБИ ПІДТРИМКИ БАГАТОЗАДАЧНОЇ РОБОТИ МІКРОПРОЦЕСОРА. СТРУКТУРА АБЛИЦІ СТАНУ ЗАДАЧ. АЛГОРИТМИ ТА МЕХАНІЗМИ ПЕРЕКЛЮЧЕННЯ ЗАДАЧ.
Многозадачность имеет следующие аппаратные средства поддержки:
1. Каждая задача должна иметь свой сегмент состояния TSS (Task State Segment):
31 16 | 15 0 | |
Селектор возврата | ||
ESP0 | ||
SS0 | ||
ESP1 | ||
SS1 | ||
ESP2 | ||
SS2 | ||
CR3 | ||
EIP | ||
EFLAGS | ||
EAX | ||
ECX | ||
EDX | ||
EBX | ||
ESP | ||
EBP | ||
ESI | ||
EDI | ||
ES | ||
CS | ||
SS | ||
DS | ||
FS | ||
GS | ||
Селектор LDT | ||
Относительный адрес БКВВ | T | |
Информация ОС | ||
Базовая карта ввода/вывода (БКВВ) |
Минимальный размер TSS – 104 байта.
Последние две строки – необязательная информация.
Бит Т – бит трассировки.
Селектор возврата содержит селектор той задачи, которая вызвала данную по команде CALL.
Содержимое регистров МП, которое хранится в TSS данной задачи, называется контекстом задачи.
2. Каждый TSS должен иметь свой дескриптор.
Формат байта доступа дескриптора TSS:
7 | |||||||
P | DPL | B |
Если задача была вызвана, то B(Busy)=1. Если B=1, то задачу вызвать нельзя. Поэтому рекурсивный вызов задач невозможен.
3. Регистр задач TR (Task Register): в нем хранится селектор TSS текущей задачи.
Механизм переключения задач:
Переключение задач осуществляется межсегментными командами JMP, CALL, IRET.
JMP <селектор> <смещение>
CALL <селектор> <смещение>
1. Микропроцессор (МП) из регистра TR определяет адрес TSS текущей задачи и переписывает в TSS содержимое регистров текущей задачи (контекст задачи).
2. Для команд JMP и CALL МП берет селектор из команды, а для команды IRET – селектор из поля возврата TSS. Селектор загружается в регистр TR => текущей становится новая задача.
3. По селектору МП находит в памяти TSS новой задачи. Из TSS МП загружает регистры новым содержимым. Это называется переключением контекста задачи.
4. Поле <смещение> не используется.
5. В новой задаче устанавливается бит B(Busy)=1. Если была команда JMP или IRET, то бит В предыдущей задачи сбрасывается. При CALL – не сбрасывается (т.к. задача не может вызвать саму себя). Рекурсия запрещена, т.к. каждая задача имеет только один TSS. При рекурсии мы потеряем старое содержимое TSS. Но внутри задачи рекурсия разрешена.
6. В регистре CR0 есть бит TS (Task Switched). При любом переключении задач бит TS устанавливается в 1. Если при этом встретится программа сопроцессора, то вызывается исключение №7 (FPU недоступен). Бит TS аппаратно не сбрасывается. Поэтому каждая задача должна сама сбрасывать бит TS.
7. При выполнении команды CALL устанавливается бит NT (Nesting Task) в поле регистра флагов TSS. Если NT=1, то команда IRET выполняет действия, описанные выше. Если NT=0, то IRET выполняется обычным образом.
Дата добавления: 2015-11-16; просмотров: 124 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Обработка прерываний в защищенном режиме. Виды исключений. Формирование дескриптивный таблице прерываний | | | Страничная организация памяти. Разработка указателей таблиц и страниц. Формирования физического адреса для 4К-, 2М-и 4М-байтных страниц |