Понимание обработки прерываний, переключения режимов работы и трансляции адресов, работающих вместе в ARMv6
Давайте представим ситуацию. Существует система на основе ARMv6, такая как RaspberryPi. В системе два запущенных процесса и упрощенная ОС.
Помимо этого простого случая, я хочу более четко и подробно понять, как работают обработка прерываний, переключение режимов работы и преобразование адресов. MMU активирован. Таблицы трансляции создаются для каждого из трех виртуальных адресных пространств (VAS) (Процесс A, Процесс B, ОС), и трансляция является косвенной, и нет общих областей. Но есть исключение.
- Каждый из VAS имеет один и тот же регион с прямым отображением.
- Регион содержит подпрограммы обработки прерываний, напрямую сопоставленные с виртуальными адресами.
- Этот регион отмечен как недоступный для режима НЕПРАВИЛЬНЫЙ, и полностью доступный для режима ПРИВИЛЕГИРОВАННЫЙ.
Я прав, что:
- Когда пользовательский процесс A прерывается, ISR начинает выполнение с использованием таблиц преобразования адресов для процесса A. ISR может выполняться, несмотря на то, что он помещен в недоступную область из-за: режим работы был изменен с USR (непривилегированный) на IRQ(привилегированный); регион имеет прямой адресный перевод.
- Если в таблицах трансляции Процесса A или B или ОС нет этой области с кодом ISR (или отображение является косвенным), выполнить ISR будет невозможно.