ARM Cortex-M核的内核态,用户态

文章讨论了用户态和内核态在操作系统中的划分,如FreeRTOS如何通过特权级别、上下文切换和系统调用来保证系统安全。指出ARMCortex-M中虽然不完全隔离,但在Cortex-A和Linux系统中,操作通常是通过文件而非直接寄存器。
摘要由CSDN通过智能技术生成

首先,用户态和内核态是从操作系统层面上来划分的,如果没有操作系统,我可以直接运行在特权模式下,并使用特权指令。在这种情况下,我将负责管理和控制系统资源,执行关键操作,以及确保系统的安全性和稳定性。我可以直接操作底层硬件寄存器和资源,包括使用特权指令来执行必要的操作。像51单片机,可以使用特权指令,直接访问和操作底层硬件资源,例如配置I/O口、定时器、中断等。

但是在使用操作系统层面下,例如FreeRTOS:FreeRTOS 有意将特权指令与用户程序进行了隔离,以确保系统的安全性和稳定性。

FreeRTOS 使用了多种机制来实现特权指令与用户程序的隔离:

  • 特权级别:FreeRTOS 内核运行在较高的特权级别(特权模式),而用户程序运行在较低的特权级别(非特权模式)。所以即便在用户程序上我用了特权指令,但是因为特权级别不够,我的特权指令也不会生效。
  • 上下文切换:当发生任务切换时,FreeRTOS 会保存当前任务的上下文(包括寄存器状态等),并恢复下一个任务的上下文。用户程序无法直接控制上下文切换的过程,从而实现了对特权操作的隔离。
  • 系统调用:FreeRTOS 提供了一组系统调用接口,允许用户程序通过这些接口请求操作系统代表其执行特权操作。系统调用是在特权模式下实现的,可以执行特权指令和访问特权级别下的资源。通过系统调用接口,用户程序可以间接地执行需要特权操作的功能,同时由操作系统验证和控制请求的合法性。

虽然在操作系统层面上,被划分出了用户态和内核态,但实际在ARM Cortex-M领域,并没有做到完全隔离。毕竟作为MCU,如果完全隔离,对开发会有很大的难度。而像ARM Cortex-A核系列,跑的是linux,一般会做到完全隔离,我们一般都是通过读写文件对设备进行操作,而不是直接对寄存器进行操作。

比如我已经知道了寄存器的地址:

我在某个任务中,直接对寄存器进行操作:

判断系统处于什么状态,可以在调试的时候看CPSR寄存器。

在ARM架构下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梅尔文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值