У меня вопрос по поводу векторной обработки ловушек. Короче говоря:
- Ловушки могут быть либо syn c исключения, либо asyn c прерывания
- В векторном режиме доступ к таблице векторов осуществляется следующим образом:
- Исключения: P C = BASE (фиксированная точка входа)
- IRQ: P C = BASE + 4 * CAUSE (vectored) Проблема, конечно, если CAUSE = 0, есть неоднозначность. Так как CAUSE = 0 остается верным для программных прерываний пользователя, в руководстве (se c 3.1.7) говорится:
Когда разрешены векторные прерывания, прерывание причина 0, соответствующая программным прерываниям пользовательского режима, переносится в то же место, что и синхронные исключения. Эта неоднозначность не возникает на практике, так как программные прерывания пользовательского режима либо отключены, либо делегированы в менее привилегированный режим
Теперь я понимаю, что в М-режиме U-прерывания отключены. Но что, если в U-режиме появляется исключение? Я пропускаю что-то подобное, исключения обрабатываются только в М-режиме? Кроме того, я не понимаю, почему нет никакой двусмысленности, если обработчик точно такой же. Разве программное обеспечение не должно тестироваться, если ловушка произошла из-за исключения или пользовательского программного прерывания?