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

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

3.12. Механизм переключения задач. Формат сегмента TSS

Как отмечалось ранее, размер сегмента TSS должен быть не менее 104 байт. При обращении к дескриптору TSS МП проверяет записанный в дескрипторе размер, и если он меньше 104 байт, то генерируется прерывание. Однако сегмент TSS может иметь больший размер.

В этой дополнительной области сегмента TSS может, например, располагаться битовая карта ввода-вывода ‑ input-output map (см. ниже). Эту дополнительную область может использовать в своих целях системный программист. Например, в этой области системный программист может сохранять содержимое регистров арифметического сопроцессора. Переключая задачи, МП, для экономии времени, не сохраняет контекст сопроцессора. Если задача А переключилась на задачу В и обе они работают с сопроцессором, то очевидно, что задача В (если не принять мер) испортит контекст задачи А. Поэтому, переключаясь на новую задачу, МП автоматически устанавливает бит TS (задача переключена) в регистре CR0. При выполнении любой команды сопроцессора МП проверяет бит TS, и, если он установлен, то будет прерывание. Обработчик этого прерывания должен сохранить контекст сопроцессора, сбросить бит TS и обеспечить рестарт команды.

Далее рассмотрим формат сегмента TSS (рис. 3.19).

Дадим необходимые пояснения к рис. 3.19. Формат рисунка ‑ 4 байта по горизонтали. Слева от полей приведено смещение (0h, 4h и.т.д) относительно начала сегмента TSS. Назначение таких полей как EIP EDI и ES GS очевидно и их рассматривать не будем. Остальные поля либо неочевидны, либо имеют свою специфику.

Поле «обратной связи» (previous task link). Пусть задача А вызвала задачу В в качестве подпрограммы (командой call far). Естественно предполагать, что когда-нибудь потребуется возврат в задачу А. Чтобы куда-нибудь вернуться, нам потребуется адрес возврата. Адресом возв-рата будет селектор дескриптора сегмента TSS задачи А.

Однако задачи А и В ничем между собой не связаны и в общем случае задаче В этот селектор неизвестен. Поэтому, когда задача А вызывает задачу В командой call far, то МП автоматически загружает в поле обратной связи задачи В (входящей задачи) селектор дескриптора TSS задачи А.

 

31                             16

15                             0

0h

 

Поле обратной связи

4h

esp0

8h

  ss0

0ch

esp1

10h

 

ss1

14h

esp2

18h

 

ss2

1ch

cr3

20h

Eip

24h

Ef

28h

eax

2ch

ecx

30h

edx

34h

ebx

38h

esp

3ch

ebp

40h

esi

44h

edi

48h

 

es

4ch

 

cs

50h

 

ss

54h

 

ds

58h

 

fs

5ch

 

gs

60h

 

ldtr

64h

База битовой карты ввода-вывода

 

T

 

Рис. 3.19

Этот селектор МП берет из видимой части регистра tr. Тем самым обеспечивается возможность возврата в задачу А. Если переключение задач идет по команде jmp far, поле обратной связи входящей задачи заполняется нулями, так как возврат куда-либо не предполагается.

CR3. Наличие этого поля показывает что при переключении задач меняется содержимое регистра cr3, а следовательно, происходит переход к новому каталогу таблиц (если конечно, страничный механизм включен).

LDTR. Из поля LDTR TSS входящей задачи загружается видимая часть регистра ldtr. Происходит пере-ключение на новую таблицу LDT. Старое содержимое видимой части регистра ldtr в поле LDTR TSS выходящей задачи не сохраняется (для экономии времени), поскольку подразумевается, что задача работает с одной и той же LDT.

Бит Т (trap – ловушка). Если в TSS задачи В этот бит установлен в единицу, то при переключении на задачу В будет прерывание типа 1. Этот бит используется для отладки.

SSi ESPi. Каждая пара такого вида задает вершину стека для одного из уровней привилегий. Всего в TSS задаются три такие пары для уровней привилегий 2, 1 и 0. Для 3-го уровня привилегий вершина стека в TSS не задается. Содержимое этих полей при переключении задач не меняется. Эти поля используются не в процессе переключения задач, а в процессе выполнения задач. Существует правило, согласно которому уровень привилегий текущего сегмента стека (DPL стека) должен быть всегда равен CPL. Пусть мы работаем на уровне привилегий i (CPL = i). Пусть затем через шлюз вызова вызвали подпрограмму с более высоким уровнем привилегий (теперь CPL<i). Согласно рассмотренному правилу, мы обязаны сменить стек (на более привилегированный). В этом случае МП и возьмет вершину стека соответствующего уровня из TSS текущей задачи и автоматически сохранит вершину старого стека в новом стеке, чтобы ее можно было восстановить при возврате из подпрограммы. Поскольку никаким способом мы не можем перейти к менее привилегированной программе, то на 3-й уровень можем попасть только с 3-го уровня. Именно поэтому в TSS отсутствуют поля SS3:ESP3.

Поле битовой карты ввода-вывода задает смещение этой карты (если она есть) относительно начала TSS.

Процессор может работать с сегментами TSS микропроцессора i286. Формат сегмента отличается от рассмотренного хотя бы потому, что регистры МП 286 16-разрядные. TSS МП 286 содержит следующую последо-вательность полей (полей, заполненных нулями в нем нет и по объему он меньше рассмотренного TSS): поле обратной связи, sp0, ss0, sp1, ss1, sp2, ss2, ip, f, ax, ..., ds, ldtr.



*****
© Банк лекций Siblec.ru
Формальные, технические, естественные, общественные, гуманитарные, и другие науки.