Студопедия

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

КАТЕГОРИИ:

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






Обработка прерываний микропроцессорами семейства x86 в защищенном режиме.






 

7.1. Цель работы: ознакомление с системой обработки прерываний микропроцессора в защищенном режиме.

 

7.2. Теоретические сведения.

Ключевыми элементами обработки прерываний в защищенном режиме являются таблица IDT и связанный с ней системный регистр idtr. При возникновении прерывания от источника с номером N микропроцессор, находясь в защищенном режиме, выполняет следующие действия (в самом общем виде):

1) Определяет местонахождение таблицы IDT, адрес и

размер которой содержатся в регистре idtr/

2) Складывает значение адреса, по которому размещена таблица IDT, и значение N× 8. По данному смещению в таблице IDT должен находиться 8-байтовый дескриптор, определяющий местоположение процедуры обработки прерывания.

3) Переключается на процедуру обработки прерывания.

Прерывания и исключения в защищенном режиме можно

разделить на три группы:

- сбои

- ловушки

- аварийные завершения

Сбой (ошибка) – прерывание или исключение, при возникновении которого в стек записываются содержимое регистров cs: ip, указывающее на команду, вызвавшую данное прерывание. Это позволяет получив доступ к сегменту кода, исправить ошибочную команду в обработчике прерывания и, вернув управление программе, выполнить команду, вызвавшую ошибку.

Ловушка – прерывание или исключение, при возникновении которого в стек записываются содержимое регистров cs: ip, указывающее на команду, следующую за командой, вызвавшей данное прерывание. Так же как и в случае ошибок возможен рестарт команды. Для этого необходимо лишь исправить в обработчике прерывания соответствующие код или данные, послужившие источником ошибки. После этого перед возвратом управления нужно скорректировать значение ip в стеке на длину команды, вызвавшей данное прерывание. Механизм ловушек похож на механизм прерываний, но не во всем. Если прерывание типа ловушки возникло в команде передачи управления jmp, то содержимое пары cs: ip в стеке будет отражать результат этого перехода, т.е. соответствовать команде назначения.

Аварийное завершение – прерывание, при котором информация о месте его возникновения недоступна или не полна, и поэтому рестарт практически не возможен, если только данная ситуация не была запланирована заранее.

Микропроцессор жестко определяет, какие прерывания являются ошибками, какие ловушками и авариями и соответствующие алгоритмы-обработчики будут отличаться алгоритмами работы. Некоторые прерывания при своем возникновении дополнительно генерируют и записывают в стек так называемый код ошибки. Этот код в дальнейшем может быть использован для установления источника прерывания. Код ошибки, если он генерируется записывается в стек вслед за содержимым регистров eflags, cs и eip.

Формат таблицы IDT подобен формату таблиц GDT и LDT, т.е. представляет собой совокупность 8-байтовых дескрипторов. Отличия таблицы IDT от указанных таблиц состоит в следующем:

- нулевой дескриптор в отличии от таблицы GDT используется; он описывает шлюз для программы обработки исключительной ситуации 0 (ошибка деления);

- дескрипторы в таблицы IDT строго упорядочены в соответствии с номерами прерываний;

- размерность таблицы IDT – не более 256 элементов размером по восемь байт, по числу возможных прерываний. В отдельных случаях есть смысл описывать все 256 дескрипторов этой таблицы, формируя для неиспользуемых номеров прерываний шлюзы-заглушки. Это позволяет корректно обрабатывать все прерывания, даже если они не планируются к использованию в данной задаче. Если этого не сделать, то при незапланированном прерывании с номером, превышающим пределы IDT для данной задачи, будет возникать исключительная ситуация нарушения общей защиты - #GP (с номером 13);

- при работе с прерываниями микропроцессор всегда определяет местоположение таблицы IDT по полю базового адреса в регистре idtr. Это он делает независимо от режима в котором работает. В реальном режиме содержимое поля базового адреса в регистре idtr равно нулю, поэтому работа с таблицами векторов прерываний выполняется без проблем. Из всего этого следует, что возможно произвольное размещение в памяти этой таблицы не только в защищенном, но и в реальном режиме.

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

Шлюз ловушки – элемент таблицы IDT, имеющий формат, показанный на рис. 7.1.


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

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал