Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
59
Добавлен:
20.03.2015
Размер:
273.92 Кб
Скачать

7.3. Механизм прерываний процессора Pentium

Примерами процессоров архитектуры IA-32, могут служить процессоры Pentium, в которых используются две линии запроса прерывания, а именно NMI (Non-Maskable Interrupt) — для немаскируемых прерываний и INTR — для маскируе­мых прерываний, также называемых пользовательскими. Запросы прерываний по линии NMI всегда принимаются процессором. Запросы по линии INTR прини­маются только в том случае, если они имеют более высокий уровень приоритета, чем текущая выполняемая программа (об этом речь пойдет чуть позже). Прерыва­ния INTR можно разрешать или запрещать, устанавливая разряд разрешения пре­рываний в регистре состояния процессора.

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

Любое из указанных событий заставляет процессор передать управление про­грамме обработки прерывания. Каждому прерыванию или исключению назначает­ся номер вектора. В случае прерываний по линии INTR номер вектора направляет­ся устройством ввода-вывода процессору по шине после подтверждения факта прерывания. Для остальных исключений номер вектора задается заранее. Зная номер вектора, процессор определяет начальный адрес программы обработки прерывания, для чего он обращается к таблице, называемой Interrupt Descriptor Table (таблица дескрипторов прерываний).

Процессор Pentium работает совместно с микросхемой, называемой APIC (Advanced Programmable Interrupt Controller — усовершенствованный програм­мируемый контроллер прерываний). Через нее различные устройства ввода-вы­вода соединяются с процессором. Контроллер прерываний определяет приорите­ты устройств и направляет процессору соответствующий каждому из них номер вектора прерывания.

На рис. 7.11 показаны восемь разрядов этого реги­стра EFLAGS, с 8 по 15, где содержатся флаг разрешения прерываний IF (Interrupt enable Flag), флаг трассировки TF (Trap Flag), а также уровень привилегий ввода-выво­да IOPL (I/O Privilege Level). Когда IF - 1, прерывания по линии INTR разреше­ны. Флаг трассировки разрешает прерывания трассировки после каждой коман­ды программы.

Рис. 7.11. Часть регистра состояния процессора Pentium

У процессора Pentium довольно сложная структура приоритетов, в соответствии с которой программы операционной системы условно делятся на четыре группы и каждой из них назначается один из четырех уровней приоритета. Для каждого из таких уровней выделяется свой сегмент адресного пространства процессора. При переключении от одного уровня привилегий к другому выполняется множество проверок, реализующих так называемый механизм блокировки. Такая архитекту­ра позволяет разрабатывать операционные системы с очень высокой степенью за­щиты. Но процессор Pentium может работать и в очень простом режиме, когда во­обще не существует никаких привилегий и все программы функционируют в од­ном сегменте памяти. Такой простой режим мы и рассмотрим в данном разделе.

При возникновении исключения, а также после получения запроса прерыва­ния процессор выполняет операции, перечисленные ниже.

1. Проталкивает в стек процессора, на который указывает регистр ESP, зна­чение регистра текущего сегмента CS (Code Segment) и указателя ко­манды EIP.

2. Если исключение вызвано нестандартной ситуацией при выполнении программы, помещает в стек код, определяющий причину исключения.

3. Если нужно, очищает флаг разрешения прерывания, чтобы дальнейшие прерывания от того же источника были запрещены.

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

5. Обслужив запрос (например, выполнив пересылку входных или выходных данных), программа обработки прерывания возвращает управление прерванной программе, для чего она выполняет команду возврата из прерывания IRET. Эта команда восстанавливает из стека значения регистров EIP и CS и регистра со­стояния процессора, восстанавливая тем самым состояние процессора.

Подобно любой подпрограмме программа обработки прерывания может соз­дать для себя временное рабочее пространство, сохранив в стеке значения регист­ров. В этом случае должна быть гарантия того, что перед выполнением команды IRET программы указатель стека ESP будет содержать адрес возврата.

Пример 7.4

На рис. 7.12 вы видите ту же программу, использующую процедуру прерывания для чтения строки символов с клавиатуры для процессора Pentium в реальном режиме работы (MS DOS). Для клавиатуры обрабатывается запрос прерывания с кодом 0А и что соответст­вующая запись в таблице дескрипторов прерываний содержит начальный адрес программы обработки прерывания READ. Для того чтобы разрешить прерыва­ния в процессоре, нужно выполнить команду STI, устанавливающую флаг IF в регистре состояния процессора в 1.

Пользовательская программа

MOV DX, offset String ;Область памяти для строки символов

MOV AH,0А ;Вызов функции ввода строки

INT 21h ;Вызов INTVEC

Программа обработки прерывания INT21h

… ;Инициализация, переход на обработку клавиатуры

start: MOV EOL,0

MOV BL,4

OR CONTROL,BL ;Установка разряда KEN для разрешения прерываний

;от клавиатуры

STI ;Установка флага прерываний в регистре процессора

READ: PUSH ЕАХ ;Сохранение регистра ЕАХ в стеке

PUSH ЕВХ ;Сохранение регистра ЕВХ в стеке

MOV EAX,PNTR ;Загрузка адреса буфера

BT STATUS,0 ;Проверка 0-бита STATUS (SIN=1?)

BNC RTRN

MOV BL,DATAIN ;Считывание введенного символа

MOV [EAX],BL ;Сохранение символа

INC DWORD PTR [EAX] ;Увеличение значения указателя

CMP BL,ODH ;Проверка того, введен ли символ возврата каретки

JNE Rtrn

MOV BL,4

XOR CONTROL,BL ;Очистка разряда KEN

MOV EOL,1 ;Установка флага EOL

RTRN POP ЕВХ ;Восстановление регистра ЕВХ

POP EAX ;Восстановление регистра ЕАХ

IRET ;Восстановление процессора

Рис. 7.12. Программа обработки прерывания для процессоров IA-32,

считывающая вводимую с клавиатуры строку символов

Соседние файлы в папке Архитектура компьютеров