Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



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


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

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

привилегий ранее исполнявшегося кода; О регистр флагов EFLAGS; О регистры CS и IP.

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

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

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



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





Дата публикования: 2015-01-23; Прочитано: 358 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...