Особенности системы прерывания в МП IA-32
Основными причинами модификации системы прерывания в МП IA-32можно считать следующие архитектурные изменения:
· более активное использование взаимодействия аппаратно-программных средств, например, в системе виртуальной памяти,
· переход к использованию симметричных многопроцессорных систем, начиная с МП Pentium Over Drive (Pentium второго поколения).
· использование механизма защиты программ от взаимных помех.
Более активное использование взаимодействия аппаратно-программ-ных средств.В МП IA-32используется механизм виртуальной памяти, который, в случаях страничных промахов, применяет механизм прерывания для подкачки новой страницы и рестарта прерванной команды. В этих случаях требуется сохранение адреса не следующей команды, а команды, вызвавшей исключение.
По этой причине в системе прерывания различают три случая исключений. Они различаются адресами возврата из исключения, а текущая команда может быть:
· отложена,
· выполнена,
· принудительно (аварийно) прекращена.
В первом случае исключение обнаруживается до начала выполнения текущей команды. Это отказ (fault) – исключение, которое обнаруживается и обслуживается до выполнения текущей команды. В этом случае в процедуре прерывания восстанавливаются первоначальные значения всех регистров, которые были до начала выполнения команды, сохраняется адрес текущей (но невыполненной) команды. Это и есть рестарт команды. Примером такой ловушки является страничный промах при трансляции страниц.
В современных МП, в частности МПIA-32, функционирование счетчика команд (IP) несколько изменено. Для увеличения быстродействия процессора используется опережающая выборка программного кода в буферный регистр кодовой строки.
В МП 80386 емкость буферного регистра кодовой строки составляет 16 байт. Первый байт этой строки всегда содержит код операции команды или префикс, т.е. начало текущей команды. Команда может содержать переменное число байт. Байты команды по очереди сдвигаются к старшим разрядам и поступают на регистр команд, пока не будет выбран последний байт команды. Если при этом освобождаются четыре младших байта буферного регистра кодовой строки, то производится обращение к кодовому сегменту команд для заполнения кодовой строки. Таким образом, счетчик команд не обращается за каждой командой в кодовый сегмент памяти, а производит заполнение кодовой строки по четыре байта.
При прерываниях буфер кодовой строки очищается и заполняется кодовой строкой программы обработки исключения. При рестарте вычисляется адрес команды рестарта, производится его запоминание в стеке и после этого производится заполнение регистра кодовой строки командами программы обработки исключения.
Во втором случае исключение обнаруживается после начала выполнения
текущей команды. Это ловушка (trap) – исключение, которое обнаруживается и обслуживается после выполнения текущей команды. В процедуре прерывания сохраняется продвинутый адрес основной программы. К классу ловушек относятся все программные прерывания.
В третьем случае – это исключение, при котором невозможно точно установить адрес инструкции, вызвавшей исключение. Это аварийное завершение (abort). Оно используется для сообщения о серьезной ошибке, не допускающей рестарта.
Переход к использованию симметричных многопроцессорных систем.Контроллер прерываний (8259А) не предназначен для работы в симметричных многопроцессорных системах. По этой причине начиная с МП Pentium Over Drive (Pentium второго поколения) в системе прерываний используется новый усовершенствованный контроллер прерываний APIC (Advanced Programmable Interrupt Controller Enable). Для локальных запросов прерываний APIC использует индивидуальные линии LINT0 и LINT1 по одной на процессор. Общие (разделяемые) сигналы прерываний поступают к процессорам по интерфейсу APIC. При этомконтроллеры предварительно программируются для определения функций каждого из процессоров по обработке аппаратных прерываний.
Использование механизма защиты программ от взаимных помех.Механизм защиты программ от взаимных помех предусматривает разделение программ по четырем уровням защиты, причем самый нижний уровень защиты предназначен для пользовательских программ. Их защита от взаимных помех обеспечивается операционной системой разделением их адресных пространств и использованием локальных таблиц дескрипторов. Пользовательским программам доступны только сегменты, зафиксированные в их локальных таблицах.
Программы обработки прерываний размещаются на более высоком уровне привилегий. Механизм защиты позволяет использование этих программ только командами перехода с возвратом и только с использованием шлюзов.
Кроме этого, механизм защиты позволяет при передачах управления использовать более защищенную процедуру переключения задач.
По этой причине таблица прерываний на каждое прерывание (включая исключения) может содержать:
· дескриптор шлюза прерывания, или
· дескриптор шлюза исключения, или
· дескриптор шлюза задачи.
Максимальное число дескрипторов в таблице – 256.
Структуры шлюзов таблицы прерываний представлены на рис.4.4.
Селектор | Offset (Смещение в сегменте) | Атрибуты | |||||
а. Структура дескриптора шлюза прерывания | |||||||
Селектор | Offset(Смещение в сегменте) | Атрибуты | |||||
б. Структура дескриптора шлюза исключения | |||||||
Селектор | поле не используется | Атрибуты | |||||
с. Структура дескриптора шлюза задачи. | |||||||
Рис.4.4. Структура дескрипторов таблицы прерывания |
При использовании шлюза прерывания или исключения задается процедура передачи управления с сохранением в стеке адреса возврата и содержимого регистра флагов. По селектору дескриптора шлюза производится обращение к GDT (Глобальной таблице дескрипторов) для определения дескриптора кодового сегмента программы прерывания или исключения, включая проверки по уровням привилегий.
При этом селектор дескриптора шлюза прерывания или исключения записывается в сегментный регистр CSпроцессора, дескриптор сегмента – в регистр дескриптора процессора, ассоциативно связанный с сегментным регистром CS, и уровень привилегий дескриптора – в поле текущего уровня селектора CS.
Отличие процедуры прерывания от процедуры исключения заключается только в том, что в процедуре прерывания после сохранения в стеке содержимого регистра флага процессор сбрасывает бит разрешения прерывания, а в процедуре исключения – не сбрасывает.
При использовании шлюза TSS переход на программу обработки прерывания и возврат производится с применением процедуры переключения программ.
Вопросы для самопроверки:
1. Понятие исключения – отказ (fault). Приведите пример.
2. Понятие исключения – ловушка (trap). Приведите пример.
3. Понятие исключения – аварийное завершение (abort). Приведите пример.
4. Особенности работы контроллера прерывания в симметричных многопроцессорных системах.
5. Содержимое строк таблицы прерывания в защищенном режиме.
6. Отличия в процедуре прерывания при использовании дескрипторов ловушки и прерывания.
Дата добавления: 2021-01-26; просмотров: 342;