Обработка прерывания

Специальный регистр Interruption Vector Address (IVA) определяет положение системной таблицы векторов прерываний в виртуальном адресном пространстве, или физическом адресном пространстве если psr.it 0. Таблица векторов размером 64 килобайта и должна быть выровнена по границе 64 килобайта, поэтому младшие 16 бит регистра IVA игнорируются при записи и дают нули при чтении.

Регистр IVA
                                                                                                                             
IVA ignored  

На каждый номер прерывания в таблице прерываний выделено по 1024 байта кода (по 64 связки или 192 короткие инструкции на 64 возможных типа прерывания). Адрес обработчика прерывания получается объединением регистра IVA и номера вектора прерывания INT. Если обработчик прерывания не помещается в 1024 байта, должен быть реализован переход за пределы таблицы векторов.

Адрес обработчика прерывания
                                                                                                                             
IVA base INT    
Таблица векторов
Номер Имя вектора-обработчика Обрабатываемые исключения
  VPT Translation vector VPT Instruction fault, VPT Data fault
  Instruction TLB vector Instruction TLB fault
  Data TLB vector Data TLB fault
  Alternate Instruction TLB vector Alternate Instruction TLB fault
  Alternate Data TLB vector Alternate Data TLB fault
  Data Nested TLB vector Data Nested TLB fault
  Instruction Key Miss vector Instruction Key Miss fault
  Data Key Miss vector Data Key Miss fault
  Dirty-Bit vector Data Dirty Bit fault
  Instruction Access-Bit vector Instruction Access Bit fault
  Data Access-Bit vector Data Access Bit fault
  Break Instruction vector Break Instruction fault
  External Interrupt vector External Interrupt (INT)
  Page Not Present vector Instruction Page Not Present fault, Data Page Not Present fault
  Key Permission vector Instruction Key Permission fault, Data Key Permission fault
  Instruction Access Rights vector Instruction Access Rights fault
  Data Access Rights vector Data Access Rights fault
  General Exception vector Illegal Operation fault, Illegal Dependency fault, Privileged Operation fault, Reserved Register/Field fault, Unimplemented Data Address fault, Privileged Register fault
  Disabled FP-Register vector Disabled Floating-point Register fault
  Debug vector Instruction Debug fault, Data Debug fault
  Unaligned Reference vector Unaligned Data Reference fault
  Unsupported Data Reference vector Unsupported Data Reference fault
  Floating-point Fault vector Floating-point fault
  Floating-point Trap vector Floating-point trap
  Lower-Privilege Transfer Trap vector Unimplemented Instruction Address trap, Lower-Privilege Transfer trap
  Taken Branch Trap vector Taken Branch trap
  Single Step Trap vector Single Step trap
  Divide by Zero vector Divide by Zero fault

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

1. PSR сохраняется в IPSR. Для ошибок, сохраненный PSR - значение в начале выполнения. Для ловушек, сохраненный PSR - значение после выполнения команды.

2. Определенные биты в PSR установлены следующим образом: W Набор к значению заданного по умолчанию бита ширины. E Набор к значению значения по умолчанию endian бит. М. Устанавливает в 1, если прерывание - первоочередная машинная проверка; иначе в 0. Весь другой Набор битов к 0 (прерывания замаскирован, абсолютные доступ допускаются, и т.д.).

3. Текущий уровень привилегий установлен в самый высокий (нулевой) уровень привилегий.

4. Информация относительно команды прерывания была бы сохранена в регистрах Параметра Прерывания (IPRs), если PSR.Q=1 во время прерывания. Если PSR.Q=0, IPRS неизменяем. Если детали команды, связанной с прерыванием потенциально полезны в обработке этого, команда загружена в Регистр Команды Прерывания. Если имеется адрес, связанный с прерыванием, он загружен в IFA.

5. Регистры общего назначения g8-g15 копируются в теневые регистры.

6. Выполнение начинается с адреса: IVA + (1024 × interruption_number)

Interruption_number – уникальное целочисленное значение, назначенное каждому прерыванию. Векторизация выполнена, выполняя индексированный переход в таблицу векторов прерываний, индексированную этим целым числом. Таблица Векторов прерываний содержит 128 связок для каждой подпрограммы обработки прерывания. Значение в регистре IVA должно быть выровнено по страничной границе 64 килобайта.

Программные примечания. Задача обработчиков прерываний разрешить (демаскировать) внешние прерывания (устанавливая бит PSR.ic в 1) как можно скорее, чтобы минимизировать наихудшее время ожидания для внешних прерываний.

С каждым прерыванием связан вектор прерывания - адрес процедуры, обработчика прерывания. Обработка прерывания состоит из сохранения малой части состояния процессора в некоторых регистрах, идентификация причины прерывания в другом регистре, и продолжении выполнения в соответствующем расположении вектора прерывания. Когда исключение существует, который заставит прерыванию быть сгенерированным, и это было определено, что прерывание может быть принято, следующие действия выполнены, чтобы:

 IFA загружен целевым адресом команды, который зависит от типа прерывания (см. определенное описание прерывания для деталей).

 Регистр Синдрома Исключения загружен информацией, определенной к типу исключения. Обратите внимание, что много типов прерывания могут только быть вызваны одиночным типом случая исключения, и таким образом не нуждаться, ни использовать установку Регистра Синдрома Исключения, чтобы указать к причине прерывания, был.

 Регистр SRMS загружен копией регистра MS.

 Регистр состояния машины модифицирован как описано ниже. Новые значения вступают в силу, начинаясь с первой команды после прерывания.

Биты регистра состояния машины. MS[WE, EE, PR, FP, FE0, FE1, IS, DS] установлен в 0 всеми прерываниями. MS.CE, установлен в 0 для критических прерываний и неизменен для прерываний некритического класса. PSR.ME установлен в 0 машинными прерываниями Проверки и неизменен для всех других прерываний. Другие поля регистра PSR неизменны для всех прерываний.

В конце подпрограммы обработки прерывания, выполнение команды RFI (Return From Interrupt) восстанавливает регистр состояния машины PSR из IPSR, регистры g8-g15 из теневых регистров SHR0-SHR7, и выполнение команд возобновляется с адреса, содержащегося в IIP.

Программные примечания. Вообще, в переключателе процесса, из-за возможного процесса сцепляется и возможные требования доступности данных, операционная система должна рассмотреть выполнение следующего. команда msync, чтобы гарантировать что все операции памяти прерванного процесса являются законченными относительно других процессоров, тот процесс начинает выполняться на другом процессоре. команды isync, rfi или rfci, чтобы гарантировать, что команды в новом процессе выполняются в новом контексте.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: