Почему linux (ARM) всегда переключается в режим супервизора во время обработки исключений? - PullRequest
5 голосов
/ 27 октября 2011

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

Ответы [ 3 ]

3 голосов
/ 28 октября 2011

Когда в ARM возникает исключение, процессор переходит в состояние сброса.В этом состоянии процессор не может обрабатывать прерывания.Это означает, что обновления экрана и сети не могут происходить, и при этом не должно быть никаких преимуществ.По этой причине никогда не следует выполнять длительные операции в состоянии прерывания.

Что, вероятно, происходит (я не эксперт по ядру Linux), это то, что исключение записывается и помещается только в очередь, а обработчик исключения немедленно возвращается.Теперь ядро ​​может повторно разрешать прерывания и обрабатывать все высокоприоритетные задачи.Затем он обрабатывает исключение на досуге таким образом, чтобы не нарушать другие задачи.

Я не читал эту статью , но, похоже, в ней есть детали, которые вы ищете.

2 голосов
/ 09 мая 2012

Я могу опоздать с ответом в этом посте. Реализация ядра Linux была выполнена таким образом, что всякий раз, когда происходит какое-либо прерывание в обработчике IRQ первого уровня, оно копирует регистры IRQ в регистры SVC и переключает ARM в режим SVC.

Это было сделано для двух основных учеников:

  1. вам не нужен отдельный стек для режима IRQ
  2. Переместив его обратно в SVC, вы можете убедиться, что другое прерывание может быть обработано, пока другое обрабатывается в режиме SVC.
0 голосов
/ 17 марта 2016

Вам все равно понадобится стек для режима IRQ, просто стек будет очень маленьким, так как по сути нам нужно будет хранить там только spsr и lr ... но да, вы правы, это поможет поддерживать прерывание по несетам, ноэто не единственный способ сделать это ... мы можем переключиться в системный режим (который использует регистры пользовательского режима) из режима прерываний и по-прежнему поддерживать вложенные прерывания

...