Сохранение состояния при прерывании

При возникновении прерывания процессор сохраняет в специальных регистрах часть контекста прерванного потока инструкций для корректного восстановления после обработки прерывания (IIP – копия IP, IPSR – копия PSR, SHR0-SHR7 – копия регистров общего назначения g8-g15). Другая группа специальных регистров хранит информацию о характеристиках прерывания, необходимую для распознания и обработки прерывания (IFA, IFR, ISR, IIM, IHA).

Группа регистров (IIP, IPSR, SHR0-SHR7, IFA, IFR, ISR, IIM, IHA) используется для быстрого сохранения части машинного состояния при прерываниях, обслуживания прерывания, и восстановления исходного состояния машины при возврате из прерывания. Эта группа существует в двух экземплярах для обслуживания прерываний двух уровней приоритетности (критичности) и образует файл из 2 банков по 16 специальных регистров.

Эти регистры хранят информацию во время прерывания и используются обработчиками прерываний. Эти регистры можно читать или писать только пока PSR.ic=0 (пока обработка прерывания), иначе - Illegal Operation fault. Для этих регистров гарантированно сохраняется их содержимое только когда PSR.ic=0. Когда PSR.ic=1, процессор не сохраняет их содержимое.

Регистр Interruption Instruction Pointer (IIP) при прерывании сохраняет копию регистра IP и указывает на место возврата при прерывании. Дополнительное поле sn указывает на номер слота в связке, с которого нужно продолжить выполнение после возврата из прерывания. Может быть 0, 1, 2. Значение 3 зарезервировано. Вообще IIP содержит адрес команды, которая вызвала ошибку или адрес следующей команды для возврата после обработки ловушки. Указанная и следующие команды связки рестартуются, предыдущие игнорируются. Вне контекста прерывания значение этого регистра неопределено.

Регистр IIP
                                                                                                                             
bundle address rv sn

Interruption Processor Status Register (IPSR) при прерывании сохраняет копию регистра PSR (состояния машины). Имеет тот же формат и набор полей, что и PSR. IPSR используется для восстановления состояния процессора при возврате из прерывания командой rfi (Return From Interruption).

Interruption Status Register (ISR). Регистр ISR содержит данные для исключения, чтобы дифференцировать различные виды исключений, которые могут генерировать один тип прерывания. При порождении одного из таких прерываний, бит или биты, соответствующие определенному исключению, которое генерировало прерывание, установлены, и все другие биты регистра ISR очищены. Другие типы прерывания не затрагивают содержание регистра ISR. Регистр ISR не должен быть очищен программным обеспечением. Регистр ISR сохраняет информацию относительно природы прерывания, и записывается процессором на всех событиях прерывания независимо от PSR.ic, кроме Data Nested TLB faults. ISR хранит информацию о excepting instruction и ее свойства, такие как read, write, execute, speculative, или non-access. Несколько битов могут быть одновременно установлены в ISR, например, ошибочная операция семафора может выставить оба ISR.r и ISR.w. Дополнительная информация об ошибке или ловушке доступна через ISR.code и ISR.vector.

Interruption Status Register (ISR) при некритическом (первичном) прерывании сохраняет информацию о произошедшем прерывании.

Регистр ISR
                                                                                                                             
rv vector code rv ei d n a r wx
Поля регистра ISR
Поле Бит Описание
r   Read exception. Если 1, то прерывание связано с чтением данных.
w   Write exception. Если 1, то прерывание связано с записью данных.
x   Execute exception. Если 1, то прерывание связано с выборкой инструкций (fetch).
n   Non-access – (fc, fetch, probe, tpa, tak).
code   Interruption Code – 16-битовый код дополнительной информации о текущем прерывании.
d   Exception Deferral – этот бит устанавливается в TLB exception deferral bit (TLB.ed) для страницы кода содержащей ошибочную инструкцию. Если трансляция не существует или трансляция для кода disabled, ISR.ed=0. Если 1, то прерывание отложено.
ei   Excepting Instruction – номер слота связки, на котором возникло прерывание. Для ошибок и внешних прерываний ISR.ei = IIP.sn, но не совпадает для ловушек. Для ловушек, ISR.ei определяет слот инструкции вызвавшей ловушку.

Программные примечания: Информация в регистре ISR не полна. Системное программное обеспечение, возможно, также должно идентифицировать тип команды, которая вызвала прерывание, исследовать TLB вход, к которому обращаются данные или доступ памяти команды, чтобы полностью определить, какое исключение или исключения породило прерывание. Например, прерывание памяти данных может быть вызвано обоими исключениями нарушения защиты также как Байт, упорядочивающий исключение. Системное программное обеспечение было бы должно смотреть вне ESRBO, типа состояния PSR в IPSR и биты защиты страницы в TLB входе, к которому обращается доступ памяти, определять, действительно ли также произошло Нарушение Защиты. Биты сохраненного регистра IPSR могут быть изменены при возврате из прерывания через RFI/RFCI.

Регистр Interruption Faulting Address (IFA) при прерывании сохраняет вычисленный прерванной инструкцией целевой адрес (виртуальный, или физический если трансляция не используется).

Регистр IFA
                                                                                                                             
address  

Для команд загрузки, записи или управления кэш-памятью, которые породили прерывание при доступе к памяти по причине неправильного выравнивания, промаха в TLB данных/инструкций или по любой другой причине, IFA содержит ошибочный адрес данных и указывает на первый байт ошибочного операнда (произвольный адрес с байтовой гранулярностью). Для остальных команд IFA содержит адрес связки инструкций. Для ошибочных адресов инструкций, IFA хранит выровненный по 16-байтовой границе адрес связки (IFA{3:0} нули) ошибочной инструкции. IFA также хранит транслируемый виртуальный адрес, когда вход трансляции вставляется в таблицу трансляции TLB (инструкций или данных).

Interruption Faulting Region (IFR) при прерывании сохраняет копию регистра региона, соответствующую ошибочному целевому виртуальному адресу. Формат регистра IFR соответствует формату регистра региона. При вставке в регистр или кэш трансляций TLB (инструкций или данных) из регистра IFR берётся идентификатор региона для новой трансляции.

Регистр IFR
                                                                                                                             
rv rid size rv r w xv

Interruption Immediate (IIM) при прерывании, если PSR.ic 1, сохраняет непосредственное значение, закодированное в вызвавшей ошибку инструкции (обычно break). Иммедиата расширяется нулями до 64 бит.

Interruption Hash Address (IHA) сохраняет адрес входа в инвертированную хэш-таблицу страниц при прерываниях связанных с ошибками трансляции. Младшие 5 битов IHA всегда равны нулю, так как трансляции имеют размер 32 байта и выровнены по 32-байтовой границе. Значение сохраняемое в IHA представляет собой объединение базового адреса таблицы страниц из регистра PTA и зависящего от реализации значения хэш-функции.

Регистр IHA
                                                                                                                             
address    

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


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



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