Режимы ARM и почему их так много? - PullRequest
11 голосов
/ 28 марта 2011

Я сейчас читаю / изучаю архитектуру ARM ... и мне было интересно, почему существует так много режимов (FIQ, пользователь, система, супервизор, IRQ, ...).

Мой вопрос: зачем нам так много режимов? Разве достаточно было бы просто пользователя и системы?

Заранее спасибо.

Ответы [ 2 ]

11 голосов
/ 28 марта 2011

Это просто архитектурное решение.Большим преимуществом нескольких режимов является то, что у них есть несколько зарегистрированных регистров.Эти дополнительные регистры позволяют вам писать намного менее сложные подпрограммы исключений.

Если бы вы выбрали только два, просто USR и SYS, вероятно, так же хороши, как и любой другой, но что произойдеткогда ты взял исключение?Обычная модель ARM состоит в том, чтобы перейти в режим исключения, установить регистр банковских ссылок для этого режима исключения так, чтобы он указывал на инструкцию, к которой вы хотите вернуться после разрешения исключения, сохранить состояние процессора в регистре SPSR режима исключения, а затемперейти к вектору исключения.USR и SYS делят все свои регистры - используя эту модель, вы будете сбрасывать адрес возврата вашей функции (в LR) каждый раз, когда вы выполняете прерывание!

В частности, в режиме FIQ регистры с большим количеством банков, чем вдругие режимы исключений.Эти дополнительные регистры соответствуют "F" части FIQ - это означает "Fast".Отсутствие необходимости сохранять и восстанавливать больше контекста процессора в программном обеспечении ускорит работу вашего обработчика прерываний.

5 голосов
/ 28 марта 2011

Не слишком много, чтобы добавить к ответу Карла. Не уверен, о каком семействе / архитектуре процессоров ARM вы говорите, поэтому я просто предположу, основываясь на вашем вопросе (FIQ, IRQ и т. Д.), Что вы говорите о ARM7 / 9/11. Я не буду перечислять все различия между каждым режимом в каждом варианте архитектуры ARM.

В дополнение к тому, что сказал Карл, есть несколько других преимуществ наличия разных режимов для разных обстоятельств:

  • например, в FIQ вам не нужно разветвляться сразу, вы можете просто продолжить выполнение. За другими исключениями, вы должны сразу перейти

  • с различными режимами, у вас есть естественная поддержка для отдельных стеков. Если вы работаете в многозадачном режиме (например, RTOS) и у вас нет отдельного стека, когда вы находитесь в режиме прерывания, вам нужно встроить дополнительное пространство в каждый стек задач для ситуации прерывания в худшем случае

  • в различных режимах некоторые регистры (например, CPSR, регистры MMU и т. Д. - в зависимости от архитектуры) являются запрещенными. То же самое с определенными инструкциями. Вы не хотите, чтобы код пользователя изменял привилегированные регистры, а вы?

...