КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Замечания.Для некоторых номеров прерываний в реальном режиме возможны 2 источника прерывания (развитие микропроцессоров). Некоторые прерывания при своем возникновении дополнительно генерируют и записывают в стек так называемый код ошибки. Этот код может впоследствии использоваться для установления источника прерывания. Код ошибки записывается в стек вслед за содержимым регистров eflags, cs и eip. Þ можно распознать истинный источник прерывания (если есть неоднозначность).
Таблица дескрипторов прерываний IDT
Вместо таблицы векторов прерываний система прерываний имеет дело с таблицей дескрипторов прерываний (IDT, interrupt descriptor table)
Таблица IDT связывает каждый вектор прерывания с дескриптором процедуры или задачи, которая будет обрабатывать это прерывание. Элементами таблицы IDT являются дескрипторы - Размер дескриптора = 8 байтам. (Т.е. формат таблицы IDT подобен формату GDT и LDT.) Дескрипторы в таблице прерываний обычно называются шлюзами (иногда коммутаторами). Шлюзы предназначены для указания точки входа в программу обработки прерывания. В дескрипторной таблице прерываний IDT могут содержаться шлюзы трех типов: · шлюз ловушки; · шлюз прерывания; · шлюз задачи. Физически микропроцессор отличает шлюзы по содержимому полей.
Особенности таблицы IDT: · нулевой дескриптор используется для описания шлюза для программы обработки исключительной ситуации 0 (ошибка деления); (в таблице GDT отсутствует) · дескрипторы в таблице IDT строго упорядочены в соответствии с номерами прерываний. В таблицах GDT и LDT порядок описания дескрипторов роли не играет, хотя и допускается наличие некоторых соглашений по их упорядоченности; · размерность таблицы IDT — не более 256 элементов размером по восемь байт, по числу возможных источников прерываний. В отдельных случаях есть смысл описывать все 256 дескрипторов этой таблицы, формируя для неиспользуемых номеров прерываний шлюзы-заглушки. Это позволит корректно обрабатывать все прерывания, даже если они и не планируются к использованию в данной задаче. Если этого не сделать, то при незапланированном прерывании с номером, превышающим пределы IDT для данной задачи, будет возникать исключительная ситуация общей защиты (с номером 13 (ODh)).
Адрес и длина таблицы IDT содержатся в регистре idtr. Заметим, что в реальном режиме регистр idtr также содержит адрес таблицы прерываний, но при этом каждый вектор занимает 4 байта и содержит 32-разрядный адрес в формате CS:IP. Начальное значение этого регистра равно нулю, но внего можно занести и другое значение.
Þ Возможно произвольное размещение в памяти этой таблицы не только в защищенном режиме, но и реальном.
В защищенном режиме произвести загрузку регистра idtr может только код с максимальным уровнем привилегий.
Доступ к таблице IDT со стороны пользовательских (прикладных) программ невозможен.
|