ФЭНДОМ


Процессоры M-профиля по режимам работы кардинально отличаются от процессоров A- и R-профилей.

Привилегированный и непривилегированный режимы

В привилегированном режиме (privileged execution) процессор может выполнять все команды и обращаться к любым областям памяти. Этот режим поддерживается в любой реализации.

В непривилегированном режиме (unprivileged execution) некоторые команды недоступны или не выполняют никаких действий, а к некоторым областям памяти доступ запрещён. Этот режим может отсутствовать в некоторых реализациях архитектуры ARMv6-M и ARMv8-M без основного расширения (в таком случае любой код выполняется в привилегированном режиме).

Привилегированность выполняемого кода зависит от режима обработчика/потока (код режима потока всегда привилегированный) и от состояния бита nPRIV регистра CONTROL.

Режимы обработчика и потока

В режим обработчика (handler mode) процессор автоматически переходит при входе в любой обработчик прерывания, кроме сброса. В этом режиме всегда выполняется привилегированный код, использующий основной стек (указатель его вершины находится в регистре SP_main, или MSP).

В режиме потока (thread mode) выполняется код, не связанный с обработкой прерываний, а также код, получающий управление в результате сброса. Код режима потока может быть и привилегированным, и непривилегированным; он может использовать как основной стек, так и стек процесса (указатель в регистре SP_process, или PSP), что определяется битом SPSEL регистра CONTROL.

В части, касающейся использования стека, документация на ARMv7-M несколько противоречива. С одной стороны, утверждается, что в режиме обработчика всегда используется основной стек. С другой стороны, согласно приводимому псевдокоду, если в режиме обработчика регистр CONTROL задаёт использование стека процесса, поведение процессора не определено. Таким образом, для надёжности необходимо обеспечить, чтобы в режиме обработчика регистр CONTROL всегда задавал использование основного стека (т. е. не пытаться, находясь в режиме обработчика, установить бит CONTROL.SPSEL).

Безопасный и небезопасный режимы

Процессоры архитектуры ARMv8-M могут поддерживать расширение безопасности. Если оно реализовано, процессор в любой момент времени может находиться либо в безопасном, либо в небезопасном режиме, а внутри каждого из этих режимов поддерживаются режимы обработчика и потока (а для последнего – ещё и привилегированный и непривилегированный режимы). При сбросе процессор переходит в безопасный режим.

Если расширение безопасности отсутствует, документация на ARMv8-M формально считает, что процессор всегда находится в небезопасном режиме. Такое определение связано с тем обстоятельством, что именно небезопасный режим позволяет без изменений выполнять код, написанный для процессоров версий ARMv6-M и ARMv7-M (в частности, адреса регистров пространства управления системой для небезопасного режима совпадают с таковыми для предыдущих версий архитектуры, но отличаются от адресов для безопасного режима).

Режим отладки

Процессор может переходить в состояние останова при наступлении некоторого отладочного события. Когда процессор находится в таком останове, говорят, что он находится в режиме отладки (debug mode).

Режим отладки может быть не реализован в конкретном варианте. Кроме того, хотя регистры, управляющие отладкой, доступны для самих отлаживаемых процессоров M-профиля, для процессоров A/R-профилей аналогичные регистры недоступны, поскольку отладчик для обращения к ним использует отдельную шину. Таким образом, даже без учёта разницы в системной архитектуре отладочные режимы в M- и A/R-профилях являются практически несовместимыми.

Материалы сообщества доступны в соответствии с условиями лицензии CC-BY-SA , если не указано иное.