Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Структура дескриптора таблицы IDT






 

 
 

 

 


63 47 39 36 32

 
 

 


31 15 0

Рис. 7.1

Поле type для шлюза ловушки – 1111, шлюза прерывания – 1110, шлюза задачи – 0101. Для шлюза задачи биты с 0 по 15 и с 48 по 63 не используются. Поле indicator представляет селектор одной из таблиц, GDT или LDT, в зависимости от состояния бита TI в нем. Поле offset определяет смещение в сегменте кода. Этот сегмент описывается дескриптором, на который указывает селектор в поле indicator. Если дескриптор описывает шлюз ловушки, то после того как управление будет передано обработчику прерывания, обработчик будет выполнять свою работу до тех пор, пока не встретит команду iret. Эта команда восстанавливает из стека состояние регистров eflags, cs и eip на момент возникновения прерывания, и работа приостановленной программы продолжается. При подготовке выхода из программы обработки, следует учитывать, что команда iret не извлекает, возможно сохраненный код ошибки из стека. Поэтому при возврате управления, необходимо удалить код ошибки из стека командой pop (если он там есть).

При возникновении прерывания, которому соответствует шлюз прерывания, микропроцессор выполняет те же действия, что и для шлюза ловушки, но с одним отличием. Когда микропроцессор передает управление обработчику прерывания через шлюз прерывания, то он сбрасывает флаг прерывания в регистре eflags в ноль, запрещая тем самым обработку аппаратных прерываний.

Когда микропроцессор при выполнении прерывания встречает в таблице IDT шлюз задачи, то это означает, что он должен осуществить переход на особый объект – задачу, которая будет осуществлять обработку прерывания. При этом состояние старой задачи, т.е. содержимое всех, связанных с этой задачей регистров сохраняется в сегменте состояния задачи – TSS. Поле indicator в шлюзе задачи содержит селектор, который определяет местонахождения дескриптора сегмента TSS – в таблице GDT или LDT (в зависимости от состояния бита TI селектора).

В общем случае для того, чтобы сделать возможным обработку прерываний в защищенном режиме, необходимо выполнить следующие действия:

- инициализировать таблицу IDT;

- составить процедуры обработчиков прерываний;

- запретить аппаратные прерывания;

- перепрограммировать контроллер прерываний i8259A;

- загрузить регистр idtr адресом и размером таблицы IDT;

- перейти в защищенный режим;

- разрешить обработку прерываний

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

- запретить аппаратные прерывания;

- выполнить обратное перепрограммирование контроллера прерываний;

- перейти в реальный режим работы микропроцессора;

- разрешить обработку аппаратных прерываний.

Для формирования таблицы IDT в целом, необходимо определиться с написанием отдельных ее дескрипторов – шлюзов. Для описания дескриптора таблицы IDT можно использовать шаблон в виде структуры:

Descr_idt struc

Offs_1 dw 0; - младшая часть адреса смещения обработчика прерывания

Sel dw 30h; селектор на сегмент команд в таблице GDT

No_use db 0

Type_attr db 8eh; по умолчанию шлюз прерывания

; для ловушки – 8fh

Offs_2 dw 0; старшая часть адреса смещения обработчика прерывания

Ends

 

После описания дескриптора таблицы IDT, можно приступать к формированию самой таблицы. Это можно делать как в отдельном сегменте, так и в сегменте данных. Но лучше, чтобы не загромождать сегмент данных, оформлять таблицу IDT в виде отдельного сегмента.

 

 

idt_seg segment para public 'data' use16

int00h descr_idt < dummy,,,, >

REPT 2

descr_idt < dummy,,,, >

ENDM

int03h descr_idt < int_03h,,,, >

descr_idt < dummy,,,, >

int05h descr_idt < int_05h,,,, >

REPT 7

descr_idt < dummy_err,,,, >

ENDM

int0dh descr_idt < int_0dh,,,, >

REPT 3

descr_idt < dummy,,,, >

ENDM

int11h descr_idt < dummy_err,,,, >

REPT 14

descr_idt < dummy,,,, >

ENDM

int20h descr_idt < new_08h,,,, >

int21h descr_idt < sirena, 38h,,, >

REPT 222

descr_idt < dummy,,,, >

ENDM

idt_size=$-int00h-1

idt_seg ends

В этом сегменте полностью описана таблица прерываний. При этом все дескрипторы инициализированы именем процедур обработки прерываний. Основная часть дескрипторов имеет в качестве обработчика процедуру dummy, т.е. они будут обрабатываться одной программой. Для некоторых прерываний введены уникальные имена; эти прерывания должны иметь свои процедуры обработки в программе.

Расположение и порядок следования процедур обработки прерывания в памяти может быть произвольным. Обязательным является только помещение их адресов в соответствующие дескрипторы. Аналогично таблице GDT, нужно сообщить микропроцессору, где располагается таблица IDT. Загрузка регистра idtr осуществляется по команде lidt.

7.3 Программа работы

Перейти в защищенный режим работы микропроцессора и выполнить в зависимости от варианта задания из 6 лабораторной работы.

 

Вопросы к защите

Формат регистра idtr. Виды исключений - отказ (fault), ловушка (trap), аварийное завершение (abort). Распределение исключений защищенного режима. Формат кода ошибки. Формат дескриптора шлюза. Упрощенная внутренняя структура ПКП i8259a. Режимы работы ПКП. Формат управляющих слов инициализации ICW1, ICW2, ICW3, ICW4. Формат операционных управляющих слов OCW1, OCW2, OCW3. Упрощенная схема обработки аппаратных прерываний в ВМ c процессорами Intel семейства х86.

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.