11/18/94 08:31am
zr_mz.lek
А.В.Фролов, Г.В.Фролов "Защищенный
режим процессоров Intel 80286/80386/80486.
Практическое руководство по
использованию защищенного
режима" БСП том 6 М
"Диалог-МИФИ" 1993
В.Б.Бродин, И.И.Шагурин
"Микропоцессор i486. Архитектура,
программирование, интерфейс" М
"Диалог-МИФИ" 1993
--"i486tm микропроцессор" в 2-х
книгах Библиотека программиста
"И.В.К.-СОФТ" М 1993
Мультизадачность в процессоре i286
МУЛЬТИЗАДАЧНОСТЬ - такой способ организации работы вычислительной системы, при котором в ее памяти содержатся программы и данные для выполнения нескольких процессов обработки информации (задач). При этом должна обеспечиваться взаимная защита программ и данных, относящихся к разным задачам, а также возможность перехода от выполнения одной задачи к другой.
При работе процессора в реальном режиме многозадачность в полном объеме реализовать достаточно сложно. Наличие большего числа резидентных в памяти задач как правило не реализуют настоящую многозадачность, эти программы посуществу являются подзадачами основного алгоритма.
Некотрым подобием многозадачности является возможность переключения задач, реализованная в диалоговой оболочке DOSSHELL. Но здесь многозадачность мнимая, т.к. из множества одновременно запущенных задач выполняется только та, которая объявлена активной в данный момент.
Основная идея истинной многозадачности сводится к повышению производительности ВС путем снижения потерь времени центрального процессора на выполнение операции ввода/вывода информации. При необходимости выполнения такой операции процессор автоматически переключается на выполнение другой задачи до окончания операции в/в. Помимо этого ОС имеет механизм при котором все ресурсы ВС доступны всем выполняемым задачам ОДНОВРЕМЕННО.
Основные моменты реализации многозадачного режима:
1 РАЗМЕЩЕНИЕ ИНФОРМАЦИИ В ОП - В мультизадачной среде одновременно работают несколько программ. Эти программы должны постоянно находиться в ОП или должен существовать эффективный механизм загрузки модулей в память и выгрузки измененой информации при переключении задач. Если памяти достаточно для размещения всей информации, то должен существовать механизм защиты; если памяти мало, то на диске отводится непрерывная область для временного хранения "ненужной" информации.
2 ПЕРЕКЛЮЧЕНИЕ ЗАДАЧ - Инициатором переключения может быть таймер, если истек отведенный интервал времени или сама программа при возникновении определенной ситуации (не подготовлены данные, требуется дополнительный сегмент памяти, ситуация оговоренная в условиях отладки...). При переключении должен быть сохранен контекст программы (регисты процессора, сопроцессора...), для обеспечения возможности дальнейшей работы.
3 ВЗАИМОДЕЙСТВИЕ ПРОГРАММ - Программы должны иметь возможность получать доступ к аппаратным ресурсам компьютера и обмениваться информацией между собой. Для решения вопроса синхронизации программ и использования ресурсов служит система семафоров и буферов устройств.
Все эти вопросы достаточно легко решаются в защищенном режиме, области доступные конкретной программе описываются при помощи LDT данной программы, а все системные ресурсы доступны ОС через GDT. Через глобальную таблицу пользовательские программы получают доступ только к специальнооговоренным ресурсам.
Процессор i286 и старшие модели имеют средства, облегчающие переключение программ и автоматическим сохранением их контекста в специальновыделенной для каждой программы области.
Сегмент состояния задачи.
Возможно не только паралленьное выполнение нескольких программ, но и каждая программа может состоять из нескольких частей, работающих параллельно.
Эти самостоятельные части и называются ЗАДАЧАМИ или процессами. По прерываниям от таймера процессор переключается от одной задачи к другой, и таким образом осуществляется параллельное выполнение программ.
Информация о состоянии процессора i286, необходимая для восстановления контекста задачи, хранится в специальной области памяти, называемой СЕГМЕНТОМ СОСТОЯНИЯ ЗАДАЧИ (Task State Segment). Сегмент TSS, выполняемой задачи, адресуется процессором при помощи 16-ти битного регистра Task Register (TR), содержащий селектор соответствующего дескриптора TSS.
Формат TSS (указаны смещения от начала области в байтах):
0h LINK - Поле обратной связи, используемое для организации вложенных вызовов задач (организуется цепочка ссылок на вызвавший TSS);
2h STACK 0 - Хранит логический адрес стека для кольца 0 при межсегментном вызове через шлюз;
6h STACK 1 - Аналогично для кольца 1;
Ah STACK 2 - Аналогично для кольца 2;
Eh IP - Указатель каманд;
10h FLAGS - Регистр флагов;
12h AX - Аккумулятор;
14h CX - Счетчик;
16h DX - Регистр данных;
18h BX - Базовый регистр;
1Ah SP - Указатель стека;
1Ch BP - Указатель базы;
1Eh SI - Индекс источника;
20h DI - Индекс приемника;
22h ES - Дополнительный сегмент;
24h CS - Сегмент кода;
26h SS - Сегмент стека;
28h DS - Сегмент данных;
2Ah LDTR - Регистр локальной таблицы дескрипторов данной задачи;
2Ch Дополнительная область, используется ОС. Процессором не считывается
и не модифицируется.
Переключение задач.
Переключить задачу можно тремя способами:
По команде JMP - В этом случае в качестве операнда указывается адрес сегмента TSS. Для возврата необходимо воспользоваться той же командой с адресам сегмента TSS исходной;
По
команде CALL - В качестве
операнда указывется адрес
сегмента TSS, при переключении в
регистре FLAGS устанавливается
бит вложенной задачиNT, а в поле
доступа дескриптора делается
пометка "занятый TSS" что
исключает возможность
рекурсивного вызова. Однако
возможен дальнейший вызов
других вложенных задач. При
возврате по команде IRET адрес
возврата берется из поля LINK.
В качестве операнда каманды CALL
может быть указан шлюз вызова
задачи:
16 бит - Не используется;
16 бит - Селектор TSS;
8 бит - Не используется;
8 бит - Доступ (тип вентиля
задачи);
16 бит - Резерв.
Вентили задач
могут располагаться в таблицах
GDT и LDT.
Отличие вызова задачи от
вызова подпрограммы
заключается в необходимости
переключения TSS, что связано с
большими временными затратами
и организацией возврата. При
возврате из подпрограммы
используется команда RET, а из
задачи IRET. Это отличие приводит
к тому, что повторный вход в
задачу осуществляется по
адресу следующему за IRET. При
переключении задач
привелигированность
проверяется только при
выполнении JMP или CALL, обратное
переключение по IRET и остальные
случаи (исключения, прерывания,
шлюзы в LDT) без проверки, т.к.
задачи работают в
изолированных адресных
пространствах.
Отличие шлюза задачи от шлюза
вызова заключается в
отсутствии возможности
передачи параметров.
Переключение задачи по прерыванию - В этом случае вентили задач располагаются в дескрипторной таблице прерываний IDT и используются для решения задач обслуживания устройств.
Синхронизация задач.
Для управления доступом к коллективным ресурсам используется система семафоров. В простейшем случе это ячейка памяти. Каждая задача перед обращением к ресурсу должна убедиться в его незанятости, занять его, а после использования освободить. Систему семафоров, обычно, ведет ОС а пользовательские программы не имеют доступа к ресурсу напрямую. Если программа пользователя обращается с требованием о выделении ресурса, то ОС если выделение в данный момент невозможно приостанавливает соответствующую задачу или организует буфер, освобождаемый при появлении соответствующей возможности.