Четверг, 19.09.2024
Kober
Меню сайта
Поиск
Категории раздела
Шпоры Орг ЭВМ [42]
Шпоры ОС [22]
Главная » Статьи » Шпоры Орг ЭВМ

17. Прерывания в IA – 32, IA – 64

17. Прерывания в IA – 32, IA – 64

Прерывания IA-32

Аппаратные прерывания

Процессор определяет необходимость обработки внешнего прерывания по наличию сигнала на одном из контактов INTR# или NMI#. При появлении сигнала на линии INTR# внешний контроллер прерываний (например, 8259A) должен предоставить процессору вектор (номер) прерывания. С линией NMI# всегда связано прерывание с номером 2. В процессорах Pentium+ эти линии могут быть сконфигурированы на использование APIC (Advanced Programmable Interrupt Controller), тогда они называются LINT0 и LINT1 и информация по ним передается в виде сообщений в специальном формате.

Следует отметить, что появление сигналов на некоторых других контактах процессора также прерывает работу процессора. Однако обработка этих событий отличается от механизма обработки прерываний и исключений, описываемого в этом разделе. К таким сигналам относятся: RESET# и INIT# (аппаратный сброс), SMI# (переход в режим системного управления) и некоторые другие.

Прерывания, которые генерируются при поступлении сигнала на вход INTR#, называют маскируемыми аппаратными прерываниями. Бит IF в регистре флагов позволяет заблокировать (замаскировать) обработку таких прерываний. Прерывания, генерируемые сигналом NMI#, называют немаскируемыми аппаратными прерываниями. В процессорах Pentium+ немаскируемое прерывание может быть сгенерировано при получении специального сообщения по шине APIC. Немаскируемые прерывания не блокируются флагом IF. Пока выполняется обработчик немаскируемого прерывания процессор блокирует получение немаскируемых прерываний до выполнения инструкции IRET, чтобы исключить одновременную обработку нескольких немаскируемых прерываний. Рекомендуется вызывать этот обработчик через шлюз прерывания, тогда на время его выполнения будут также заблокированы маскируемые прерывания.

Прерывания всегда обрабатываются на границе инструкций, т.е. при появлении сигнала на контакте INTR# или NMI# процессор сначала завершит выполняемую в данный момент инструкцию (или итерацию при наличии префикса повторения), а только потом начнет обрабатывать прерывание. Помещаемый в стек обработчика адрес очередной инструкции позволяет корректно возобновить выполнение прерванной программы. Несмотря на возможность спекулятивного выполнения, присущую архитектуре P6+, в прерванной программе сохраняется порядок выполнения инструкций, заложенный программистом. Это обеспечивается механизмом "отката" (retirement phase).

Программные прерывания

С помощью инструкции INT n (n - номер прерывания) можно сгенерировать прерывание с любым номером 0...255. Такие прерывания называют программными. Состояние бита IF в регистре флагов не влияет на возможность генерации программных прерываний.

Хотя номер прерывания в этой инструкции может быть любым, следует отметить, что, например, при использовании вектора 2 для вызова обработчика немаскируемого прерывания внутреннее состояние процессора будет отличаться от того, которое бывает при обработке аппаратного немаскируемого прерывания. Аналогично, попытка вызвать обработчик исключения с помощью этой инструкции может оказаться неудачной, т.к. при возникновении большинства исключений в стек включается код ошибки, а при генерации программного прерывания этого не происходит. Обработчик исключения извлекает из стека код ошибки, а в случае программного прерывания из стека будет ошибочно извлечен адрес возврата, что нарушит целостность стека и в конечном итоге, скорее всего, приведет к исключению

Прерывания IA-64

При прерывании в IA-64 выдача исключений последовательная. Аналогично IA-32 прерывания в IA-64 делятся на 4 типа:

1. Авария (Abort) - жесткий сброс от схем контроля, 2. Ошибка (Fault) - возникает до завершения инструкции, 3. Ловушка (Trap) - возникает после завершения инструкции, 4. Прерывание (Interrupt) - асинхронные внешние события (от периферии или платформы). "Мягкий сброс".

К уровню платформы относятся прерывания от схем контроля, но возникшую ошибку можно исправить.

IIP - специальный управляющий регистр, используемый при прерывании. В нем сохраняется на время обработки прерывания состояние указателя IP. Помимо IIP существуют другие регистры для аналогичных целей (IPSR для PSR и т.д.)

Исполнялась инструкция А, исполнялась инструкция B. Реакция не прерывание:

Исполняется инструкция Х обработчика прерываний, Y. Восстановление состояния RFI:

Далее исполняется инструкция В.

 


  

1. Вначале при прерывании происходит переключение с банка регистров прикладной программы к банку регистров ОС.

2. ОС вызывает процедуры обработчиков прерываний.

3. Происходит возврат и переключение банков регистров в исходное состояние.

Прерывания в Itanium делятся на 2 типа:

1. IVA-based - обрабатываемые по вектору

2. PAL-based - уровень абстракции платформы

Преррывания 2 типа обрабатываются внутрикристальными средствами. Микропрограммный обработчик может и несообщить ОС о возникшем прерывании. "Процессор живет своей жизнью".

 

 

Категория: Шпоры Орг ЭВМ | Добавил: Kober (10.06.2013)
Просмотров: 826
Архив записей
Copyright MyCorp © 2024
Бесплатный хостинг uCoz