Обработка прерываний в контексте текущей задачи


Рассмотрим рис. 3.13, поясняющий обработку прерывания в контексте текущей задачи. При возникновении прерывания процессор по номеру прерывания индексирует таблицу IDT, то есть адрес соответствующего коммутатора определя­ется путем сложения содержимого поля адреса в регистре IDTR и номера преры­вания, умноженного на 8 (справа к номеру прерывания добавляются три нуля). Полученный дескриптор анализируется, и если его тип соответствует коммута­тору trap gate или коммутатору interrupt gate, то выполняются следующие дей­ствия.

1 В стек на уровне привилегий текущего сегмента кода помещаются:

¨ значения SS и SP, если уровень привилегий в коммутаторе выше уровня привилегий ранее исполнявшегося кода;

¨ регистр флагов EFLAGS;

¨ регистры CS и IP.

2 Если рассматриваемому прерыванию соответствовал коммутатор interrupt gate, то запрещаются прерывания (флаг IF=0 в регистре EFLAGS). В случае коммутатора trap gate флаг прерываний не сбрасывается и обработка новых прерываний на период обработки текущего прерывания тем самым не запре­щается.


3 Поле селектора из дескриптора прерываний используется для индексирова­ния таблицы дескрипторов задачи. Дескриптор сегмента заносится в теневой регистр, а смещение относительно начала нового сегмента кода определяется полем смещения из дескриптора прерывания.

Рис.3.13. Схема передачи управления при прерывании в контексте текущей задачи

Таким образом, в случае обработки прерываний, когда дескриптором прерыва­ний является коммутатор interrupt gate или trap gate, мы остаемся в том же вир­туальном адресном пространстве, и полной смены контекста текущей задачи не происходит. Просто мы переключаемся на исполнение другого (как правило, бо­лее привилегированного) кода, но также принадлежащего (или, правильнее сказать, доступного) исполняемой задаче. Этот код создается системными програм­мистами, и прикладные программисты его просто используют. В то же время механизмы защиты микропроцессора позволяют обеспечить недоступность этого кода для его исправления (со стороны приложений, его вызывающих) и недос­тупность самой таблицы дескрипторов прерываний. Удобнее всего код обработ­чиков прерываний располагать в общем адресном пространстве, то есть селекто­ры, указывающие на такой код, должны располагаться в глобальной таблице дескрипторов.



Дата добавления: 2022-02-05; просмотров: 246;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.