Лекции по Вычислительным машинам, системам и сетям   

3. Тридцатидвухразрядные процессоры фирмы Intel

3.14. Действия процессора при переключении задач

Введем понятие занятой задачи. Задача называется занятой, если она в данный момент выполняется. Если одна задача вызвала другую задачу в качестве подпрограммы, то обе задачи будут занятыми. При обращении к занятой задаче генерируется прерывание. То есть задача не может переключиться сама на себя. В дескрипторе TSS в четырехбитовом поле TYPE есть бит В (формат поля TYPE для дескриптора TSS ‑ x x B x). Если этот бит установлен в единицу, то задача является занятой. С этим битом работает сам МП. Он этот бит и устанавливает и сбрасывает.

Для того чтобы переключиться на новую задачу, надо обратиться к дескриптору TSS этой задачи. Это можно сделать следующими четырьмя способами.

1. Команда jmp far или call far адресует дескриптор TSS в таблице GDT. В любой из этих команд присутствует селектор и смещение (например, jmp 0010:00222222h – здесь 0010 – селектор, 00222222 – смещение). Если при этом селектор адресует дескриптор TSS, то смещение, заданное в команде, игнорируется.

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

3. Прерывание через шлюз задачи. В принципе, подобен второму варианту.

4. Переключение задачи происходит при выполнении команды iret, если флаг NT (флаг вложенной задачи) в регистре флагов ef установлен в единицу (это возврат из вложенной задачи). Селектор дескриптора TSS входящей задачи при этом берется из поля обратной связи TSS текущей (выходящей) задачи.

Приведем несколько упрощенную последовательность действий процессора при переключении задач.

1. По известному селектору (взятому из команды, или из шлюза, или из поля обратной связи) процессор находит дескриптор TSS в таблице GDT.

2. Процессор производит ряд проверок:

- проверяет права доступа;

- проверяет размер TSS;

- проверяет входящую задачу на занятость, при этом входящая задача должна быть занята, если переключение инициировано командой iret, и свободна во всех остальных случаях.

- проверяет, присутствуют ли структуры, необходимые при переключении задач (TSS входящей и TSS выходящей задач), в ОП.

3. Если переключение инициировано командой call или прерыванием, то в поле обратной связи записывается селектор дескриптора TSS выходящей задачи (адрес возврата), который процессор берет из видимой части регистра tr.

4. В TSS выходящей задачи процессор копирует содержимое своих внутренних регистров.

5. Выходящая задача помечается как свободная, если переключение инициировано командой jmp или iret, если же переключение инициировано командой call или прерыванием, выходящая задача остается занятой. До этого момента любое прерывание воспринимается в контексте выходящей задачи, начиная со следующего пункта прерывания воспринимаются уже в контексте новой задачи.

6. Из TSS входящей задачи в регистры процессора загружается новая информация (контекст входящей задачи).

7. Входящая задача помечается занятой.

8. Если переключение инициировано командой call или прерыванием, то флаг NT в регистре флагов устанавливается в единицу.

9. Бит TS (задача переключена) в регистре cr0 устанавливается в единицу. Напомним, что этот бит связан с математическим сопроцессором (см. разд. 3.12).



*****
Новосибирск © 2009-2017 Банк лекций siblec.ru
Лекции для преподавателей и студентов. Формальные, технические, естественные, общественные, гуманитарные, и другие науки.