首页 理论教育 处理器工作模式与特权级别解析

处理器工作模式与特权级别解析

时间:2023-11-23 理论教育 版权反馈
【摘要】:Cortex-M3处理器支持两种工作模式和两个特权级别,如图3.4所示。图3.4Cortex-M3下的工作模式和特权级别两种工作模式分别为:处理者模式和线程模式。在Cortex-M3运行主应用程序时,既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。复位后,处理器默认进入特权级、线程模式。

处理器工作模式与特权级别解析

Cortex-M3处理器支持两种工作模式和两个特权级别,如图3.4所示。

图3.4 Cortex-M3下的工作模式和特权级别

两种工作模式分别为:处理者模式(handler mode)和线程模式(thread mode)。引入两种模式是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。

两个特权级别分别为:特权级(privileged level)和用户级(user level)。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。

在Cortex-M3运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。复位后,处理器默认进入特权级、线程模式。在特权级下,程序可以访问所有范围的存储器(除了MPU规定的禁地,如果有MPU),并且可以执行所有指令。

在用户级、线程模式下,对系统控制空间(SCS)的访问将被阻止,该空间包含了配置寄存器以及调试组件的寄存器。除此之外,还禁止使用MSR指令访问除APSR以外的特殊功能寄存器,否则将产生fault。(www.xing528.com)

特权级下的程序可以通过修改CONTROL寄存器切换到用户级,但用户级的程序不能简单地试图改写CONTROL寄存器就回到特权级,必须先触发异常,然后由异常服务例程修改CONTROL寄存器,当处理器由异常服务例程退出返回线程模式时,就会重新回到特权级。

事实上,从用户级到特权级的唯一途径就是异常,如果在程序执行过程中触发了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,返回先前的状态或修改CONTROL寄存器后指定返回的状态。合法的操作模式转换如图3.5所示。

图3.5 合法的操作模式转换图

通过引入特权级和用户级,将代码按特权级和用户级分开对待,有利于使架构更加安全和健壮,用户级代码被禁止写特殊功能寄存器和NVIC中寄存器,因此能够在硬件水平上限制某些不受信任的或者还没有调试好的程序,不让它们随便地配置涉及要害的寄存器,提高了系统的可靠性。如果配有MPU,它可以作为特权机制的补充,阻止用户代码访问不属于它的内存区域;它还可以保护关键的存储区域不被破坏,比如操作系统的程序或数据区域。

举例来说,操作系统的内核通常都在特权级下执行,所有没有被MPU禁掉的存储器都可以访问。在操作系统开启了一个用户程序后,通常都会让它在用户级下执行,从而使系统不会因某个程序的崩溃或恶意破坏而受损。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈