Обработка прерываний в контексте текущей задачи
Обработку прерывания в контексте текущей задачи поясняет рис. 4.12.
Рис. 4.12. Схема передачи управления при прерывании в контексте текущей задачи
При возникновении прерывания процессор по номеру прерывания индексирует таблицу IDT, то есть адрес соответствующего коммутатора определяется путем сложения содержимого поля адреса в регистре IDTR и номера прерывания, умноженного на 8 (справа к номеру прерывания добавляется три нуля). Полученный дескриптор анализируется, и если его тип соответствует коммутатору перехвата или коммутатору прерывания, то выполняются следующие действия.
1. В стек на уровне привилегий текущего сегмента кода помещаются:
- значения SS и SP, если уровень привилегий в коммутаторе выше уровня привилегий ранее исполнявшегося кода;
- регистр флагов EFLAGS; - регистры CS и IP.
2. Если рассматриваемому прерыванию соответствовал коммутатор прерывания,
то запрещаются прерывания (устанавливается флаг IF = 0 в регистре EFLAGS).
В случае коммутатора перехвата флаг прерываний не сбрасывается, и обработ
ка новых прерываний на период обработки текущего прерывания тем самым не
запрещается.
Система прерываний 32-разрядных микропроцессоров j80x86______________ 127
3. Поле селектора из дескриптора прерывания используется для индексирования таблицы дескрипторов задачи. Дескриптор сегмента заносится в теневой регистр, а смещение относительно начала нового сегмента кода определяется полем смещения из дескриптора прерывания.
Таким образом, в случае обработки прерываний, когда дескриптором прерывания является коммутатор перехвата или коммутатор прерывания, мы остаемся в том же виртуальном адресном пространстве, и полной смены контекста текущей задачи не происходит. Просто мы переключаемся на исполнение другого (как правило, более привилегированного) кода, доступного исполняемой задаче. Этот код создается системными программистами, и прикладные программисты его просто используют. В то же время механизмы защиты микропроцессора позволяют обеспечить недоступность этого кода для его исправления (со стороны приложений, его вызывающих) и недоступность самой таблицы дескрипторов прерываний. Удобнее всего код обработчиков прерываний располагать в общем адресном пространстве, то есть селекторы, указывающие на такой код, должны располагаться в глобальной таблице дескрипторов.
Обработка прерываний с переключением на новую задачу
Совершенно иначе осуществляется обработка прерываний в случае, если дескриптором прерываний является коммутатор задачи. Формат коммутатора задачи отличается от формата коммутаторов перехвата и прерывания прежде всего тем, что в нем вместо селектора сегмента кода, на который передается управление, указывается селектор сегмента состояния задачи (рис. 4.13). В результате осуществляется процедура перехода на новую задачу с полной сменой контекста, ибо сегмент состояния задачи полностью определяет новое виртуальное пространство и адрес начала программы, а текущее состояние прерываемой задачи аппаратно (по микропрограмме микропроцессора) сохраняется в ее собственном сегменте TSS.
При этом происходит полное переключение на новую задачу с вложением, то есть выполняются следующие действия.
1. Сохраняются все рабочие регистры процессора в текущем сегменте TSS, базовый
адрес этого сегмента берется в регистре TR (см. раздел «Адресация в 32-раз
рядных микропроцессорах i80x86 при работе в защищенном режиме»).
2. Текущая задача отмечается как занятая.
3. По селектору из коммутатора задачи выбирается новый сегмент TSS (поле се
лектора помещается в регистр TR) и загружается состояние новой задачи. На
помним, что загружаются значения регистров LDTR, EFLAGS, восьми регист
ров общего назначения, регистра EIP и шести сегментных регистров.
4. Устанавливается бит NT (Next Task).
5. В поле обратной связи TSS помещается селектор прерванной задачи..
6. С помощью значений CS:IP, взятых из нового сегмента TSS, обнаруживается
и выполняется первая команда обработчика прерывания.
Таким образом, коммутатор задачи дает указание процессору произвести переключение задачи, и обработка прерывания осуществляется под контролем отдельной внешней задачи. В каждом сегменте TSS имеется селектор локальной таблицы деск-
128 Глава 4. Особенности архитектуры микропроцессоров i80x86
рипторов (LDT), поэтому при переключении задачи процессор загружает в регистр LDTR новое значение. Это позволяет обратиться к сегментам кода, которые абсолютно не пересекаются с сегментами кода любых других задач, поскольку именно локальные таблицы дескрипторов обеспечивают эффективную изоляцию виртуальных адресных пространств. Новая задача начинает свое выполнение на уровне привилегий, определяемом полем RPL нового содержимого регистра CS, которое загружается из сегмента TSS. Достоинством этого коммутатора является то, что он позволяет сохранить все регистры процессора с помощью механизма переключения задач, тогда как коммутаторы перехвата и прерываний сохраняют только содержимое регистров IFLAGS, CS и IP, а сохранение других регистров возлагается на программиста, разрабатывающего соответствующую программу обработки прерывания.
Рис. 4.13. Схема передачи управления при прерывании с переключением на новую задачу
Справедливости ради следует признать, что несмотря на возможности коммутатора задачи, разработчики современных операционных систем достаточно редко его используют, поскольку переключение на другую задачу требует существенно больших затрат времени, а полное сохранение всех рабочих регистров часто не требуется. В основном обработку прерываний осуществляют в контексте текущей задачи, так как это приводит к меньшим накладным расходам и повышает быстродействие системы.
Контрольные вопросы и задачи
1. Как в реальном режиме работы микропроцессоров i80x86 осуществляется преобразование виртуального адреса в физический?
Контрольные вопросы и задачи_________________________________________ 129
2. Какие механизмы виртуальной памяти используются в защищенном режиме
работы микропроцессоров i80x86?
3. Для чего в микропроцессоры i80x86 введен регистр-указатель задачи TR? Ка
кой он разрядности?
4. Как в микропроцессорах i80x86 реализована поддержка сегментного способа
организации виртуальной памяти?
5. Что понимается под термином «линейный адрес»? Как осуществляется пре
образование линейного адреса в физический? Может ли линейный адрес быть
равным физическому?
6. Что дало введение двухэтапной страничной трансляции в механизме странич
ного способа реализации виртуальной памяти? Как разработчики микропро
цессора i80386 решили проблему замедления доступа к памяти, которое при
двухэтапном преобразовании адресов очень существенно?
7. Что означает термин «плоская модель памяти»? В чем заключаются достоин
ства (и недостатки, если они есть) этой модели?
8. Что дало введение виртуального режима? Как в этом режиме осуществляется
вычисление физического адреса?
9. Что имеется в микропроцессорах i80x86 для обеспечения защиты адресного
пространства задач?
10. Что такое «уровень привилегий»? Сколько уровней привилегий в микропро
цессорах i80x86? Для каких целей введено такое количество уровней привиле
гий?
11. Что такое текущий уровень привилегий? Как узнать, чему он равен? Что та
кое эффективный уровень привилегий?
12. Объясните правила работы с уровнями привилегий для различных типов сег
ментов.
13. Поясните работу механизма шлюзов. Для чего он предназначен, как осуществ
ляется передача управления на сегменты кода с другими уровнями привиле
гий?
14. Опишите работу системы прерываний микропроцессоров i80x86 в реальном
режиме.
15. В чем заключаются принципиальные отличия работы системы прерываний
микропроцессоров i80x86 в защищенном режиме по сравнению с реальным
режимом?
16. Как осуществляется переход на программу обработки прерываний, если де
скриптор прерываний является коммутатором прерываний?
17. Как осуществляется переход на программу обработки прерываний, если де
скриптор прерываний является коммутатором перехвата?
18. Как осуществляется переход на программу обработки прерываний, если дес
криптор прерываний является коммутаторам задачи?
Дата добавления: 2016-09-20; просмотров: 956;