Как работают исключения и прерывания MIPS?

Я работаю над процессором типа MIPS32, и мне интересно, как именно работает обработка исключений и прерываний MIPS32. В руководстве по архитектуре привилегированных ресурсов MIPS32 не так много информации. Меня интересуют несколько вещей:

  1. Что произойдет, если в обработчике исключения или прерывания будет исключение или прерывание?

  2. MIPS32 имеет 5 аппаратных прерываний и 2 программных прерывания в регистре причин. Программное обеспечение прерывает исключения или исключения просто отображаются в значении кода исключения?

  3. Есть ли другой вектор прерывания и исключения?

  4. Что произойдет, если в конвейере появятся 2 исключения, прежде чем он очистится для исключения? Например, за исключением переполнения, за которым следует другое исключение и прерывание. Что происходит?

Будем признательны за ссылки на любые полезные ресурсы.


person Alex    schedule 25.11.2012    source источник
comment
Речь идет об аппаратной архитектуре - не очень подходит для сайта вопросов и ответов, посвященных программированию. Пожалуйста, изучите FAQ и уважайте его - спасибо!   -  person marc_s    schedule 25.11.2012
comment
Конечно, я нашел здесь некоторые элементы, связанные с компьютерной архитектурой, поэтому я подумал, что было бы нормально опубликовать в Stackoverflow, поскольку нет сайта обмена стеками, предназначенного для компьютерной архитектуры. Это в некоторой степени связано с программированием, поэтому я подумал, что это нормально.   -  person Alex    schedule 25.11.2012
comment
Речь идет о взаимодействии аппаратного и программного обеспечения, так что это прекрасно для stackoverflow.   -  person markgz    schedule 26.11.2012


Ответы (1)


  1. Обработчики исключений не должны повторно включать исключения до тех пор, пока они не сохранят EPC, SR и т. Д.
  2. Программные прерывания являются исключением.
  3. Некоторые процессоры MIPS были построены с разными векторами прерываний и исключений, но это оказалось не очень полезным.
  4. MIPS имеет точные исключения: т.е. исключения появляются в последовательности инструкций, и только первое исключение в конвейере будет архитектурно видимым.

См. MIPS Run Linux - лучший и наиболее читаемый ссылка на исключения MIPS и MIPS PRA.

person markgz    schedule 26.11.2012
comment
Если в конвейере видно только первое исключение (первое, как в случае с точным исключением), не должен ли быть только один бит программного прерывания в регистре причины. Также спасибо за предложение книги - person Alex; 26.11.2012
comment
Исключение, инициированное инструкцией в конвейере (например, переполнение), устанавливает поле ExCode в регистре причины и не устанавливает биты причины. IPx. Биты программного прерывания (причина.IP0 и IP1) устанавливаются записью в регистр причины и совершенно не связаны с исключениями конвейера. - person markgz; 26.11.2012
comment
И тогда обработчик исключений должен будет распознать, что есть исключение, выполнив тест в поле ExCode. И последнее: прерывания имеют приоритет над исключениями? - person Alex; 26.11.2012
comment
Да, прерывания имеют приоритет перед исключениями. См. Раздел 6.2.1 в спецификации MIPS PRA. - person markgz; 26.11.2012
comment
Эй, меня интересует еще одна вещь, я прочитал книгу и мне интересно, как реализована IPL. IPL - это всего лишь 5 бит аппаратного прерывания? Есть ли у ЦП оборудование, которое определяет, включен ли более высокий бит прерывания? Также что произойдет, если вы вернетесь из прерывания, когда есть необработанное прерывание с более низким приоритетом, которое не было вложено? - person Alex; 15.12.2012