Механизм переключения задач. Формат сегмента TSS.
⇐ ПредыдущаяСтр 2 из 2 Как отмечалось ранее, размер сегмента 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|