Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Механизм переключения задач. Формат сегмента 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, поле обратной связи входящей задачи заполняется нулями, так как возврат куда-либо не предполагается.

 

Назовите основные функциональные узлы АЛУ.

- регистры для временного хранения операндов;

- сдвигатели;

- преобразователи прямого кода в дополнительный и наобророт;

- сумматор, на котором реализуются арифметические и логические операции.

 

Форматы таблиц GDT, LDT, IDT

В архитектуре x86 есть три вида дескрипторных таблиц:

· Глобальная дескрипторная таблица (англ. Global Descriptor Table, GDT);

· Локальная дескрипторная таблица (англ. Local Descriptor Table, LDT);

· Таблица векторов прерываний (англ. Interrupt Descriptor Table, IDT);

Дескрипторэто символическое имя, которое используется в программе Perl для представления файла, устройства, сокета или программного канала.

 

Глобальная дескрипторная таблица является общей для всех процессов. Её размер и расположение в физической памяти определяются регистром GDTR.

 

В отличие от GDT, LDT может быть много (соответственно количеству задач (потоков), но не обязательно). Каждая задача может иметь свою. На расположение таблицы текущей задачи указывает регистр LDTR.

 

Таблица прерываний глобальна. Размещение в физической памяти определяется регистром IDTR.

 

Шлюзы

Шлюз ‑ структура, подобная дескриптору. Так же, как и дескрипторы, шлюзы занимают в памяти по 8 байт и располагаются в дескрипторных таблицах.

Шлюзы бывают четырех типов.

1. Шлюз вызова. Может располагаться в таблицах GDT и LDT. Предназначен для вызова привилегированных подпрограмм.

2. Шлюз задачи. Может располагаться в GDT, LDT и IDT (interrupt descriptor table) (дескрипторная таблица прерываний). Предназначен для переключения на привилегированную задачу.

3. Шлюз прерываний. Может располагаться только в IDT. Служит для вызова обработчика внешнего прерывания. При переходе через этот шлюз флаг if сбрасывается в ноль, т.е. запрещаются внешние прерывания.

4. Шлюз ловушки. Может располагаться только в IDT. Служит для вызова обработчика внутреннего прерывания (особого случая). Практически аналогичен шлюзу прерываний, только внешние прерывания не запрещаются.

 

TLB - буффер.

Буфер ассоциативной трансляции (англ. Translation lookaside buffer, TLB) — это специализированный кэш центрального процессора, используемый для ускорения трансляции адреса виртуальной памяти в адрес физической памяти. TLB используется всеми современными процессорами с поддержкой страничной организации памяти. TLB содержит фиксированный набор записей (от 8 до 4096) и является ассоциативной памятью. Каждая запись содержит соответствие адреса страницы виртуальной памяти адресу физической памяти. Если адрес отсутствует в TLB, процессор обходит таблицы страниц и сохраняет полученный адрес в TLB, что занимает в 10—60 раз больше времени, чем получение адреса из записи, уже закешированной TLB. Вероятность промаха TLB невысока и составляет в среднем от 0,01 % до 1 %.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...