Обработка прерываний с переключением на новую задачу
Совершенно иначе осуществляется обработка прерываний в случае, если дескриптором прерываний является коммутатор задачи. Формат коммутатора задачи (task gate) отличается от коммутаторов interrupt gate и trap gate, прежде всего, тем, что в нем вместо селектора сегмента кода, на который передаётся управление, указывается селектор сегмента состояния задачи (TSS). Это иллюстрируется с помощью рис.3.14. В результате осуществляется процедура перехода на новую задачу с полной сменой контекста, ибо сегмент состояния задачи полностью определяет новое виртуальное пространство и адрес начала программы, а текущее состояние прерываемой задачи аппаратно (по микропрограмме микропроцессора) сохраняется в её собственном TSS.
При этом происходит полное переключение на новую задачу с вложением, то есть выполняются следующие действия:
1 Сохраняются все рабочие регистры процессора в текущем сегменте TSS, базовый адрес этого сегмента берется в регистре TR (см. раздел «Адресация в 32-разрядных микропроцессорах i80x86 при работе в защищённом режиме»).
2 Текущая задача отмечается как занятая.
3 По селектору из Task Gate выбирается новый TSS (поле селектора помещается в регистр TR) и загружается состояние новой задачи. Напомним, что загружаются значения регистра LDTR, EFLAGS, восемь регистров общего назначения, указатель команды регистр EIP и шесть сегментных регистров.
4 Устанавливается бит NT (next task).
5 В поле обратной связи TSS помещается селектор прерванной задачи.
6 Значения CS:IP, взятые из нового TSS, позволяют найти и выполнить первую команду обработчика прерывания.
Рис.3.14. Схема передачи управления при прерывании с переключением на новую задачу
Таким образом, коммутатор task gate даёт указание процессору произвести переключение задачи, и обработка прерывания осуществляется под контролем отдельной внешней задачи. В каждом сегменте TSS имеется селектор локальной дескрипторной таблицы LDT, поэтому при переключении задачи процессор загружает в регистр LDTR новое значение. Это позволяет обратиться к сегментам кода, которые абсолютно не пересекаются с сегментами кода любых других задач, поскольку именно локальные дескрипторные таблицы обеспечивают эффективное изолирование виртуальных адресных пространств. Новая задача начинает своё выполнение на уровне привилегий, определяемом полем RPL нового содержимого регистра CS, которое загружается из сегмента TSS. Достоинством этого коммутатора является то, что он позволяет сохранить все регистры процессора с помощью механизма переключения задач, тогда как коммутаторы trap gate и interrupt gate сохраняют только содержимое регистров IFLAGS, CS и IP и сохранение других регистров возлагается на программиста, разрабатывающего соответствующую программу обработки прерывания.
Справедливости ради следует признать, что, несмотря на возможности коммутатора task gate, разработчики современных операционных систем достаточно редко его используют, поскольку переключение на другую задачу требует существенно больших затрат времени, а полное сохранение всех рабочих регистров часто и не требуется. В основном обработку прерываний осуществляют в контексте текущей задачи, так как это приводит к меньшим накладным расходам и повышает быстродействие системы.
Контрольные вопросы и задачи
Вопросы для проверки
1 Как в реальном режиме работы микропроцессоров i80x86 осуществляется преобразование виртуального адреса в физический?
2 Какие механизмы виртуальной памяти используются в защищённом режиме работы микропроцессоров i80x86?
3 Для чего в микропроцессоры i80x86 введен регистр-указатель задачи TR? Какой он разрядности?
4 Как в микропроцессорах i80x86 реализована поддержка сегментного способа организации виртуальной памяти?
5 Что понимается под термином «линейный адрес»? Как осуществляется преобразование линейного адреса в физический? А может ли линейный адрес быть равным физическому?
6 Что дало введение двухшаговой страничной трансляции в механизме страничного способа реализации виртуальной памяти? Как разработчики микропроцессора i80386 решили проблему замедления доступа к памяти, которое при двухшаговом преобразовании адресов очень существенно?
7 Что дало введение виртуального режима? Как в этом режиме осуществляется вычисление физического адреса?
8 Что имеется в микропроцессорах i80x86 для обеспечения защиты адресного пространства задач?
9 Что такое «уровень привилегий»? Сколько уровней привилегий имеется в микропроцессорах i80x86? Для каких целей введено такое количество уровней привилегий?
10 Что такое текущий уровень привилегий? Что такое эффективный уровень привилегий?
11 Объясните правила работы с уровнями привилегий для различных типов сегментов.
12 Поясните механизм шлюзования: для чего он предназначен, как осуществляется передача управления на сегменты кода с другими уровнями привилегий.
13 Расскажите о работе системы прерываний микропроцессоров i80x86 в реальном режиме.
14 В чём заключаются основные принципиальные отличия работы системы прерываний микропроцессоров i80x86 в защищённом режиме по сравнению с реальным режимом?
15 Как осуществляется переход на программу обработки прерываний, если дескриптор прерываний является коммутатором прерываний?
16 Как осуществляется переход на программу обработки прерываний, если дескриптор прерываний является коммутатором перехвата?
17 Как осуществляется переход на программу обработки прерываний, если дескриптор прерываний является коммутатором задачи?
ГЛАВА 4 Управление
Дата добавления: 2022-02-05; просмотров: 306;