ARM模式:用户和系统
你能解释一下在系统调用处理的情况下ARM模式是如何改变的吗? 我听说ARM模式的改变只能在特权模式下发生,但是在ARM处于用户模式(非特权模式)时进行系统调用处理的情况下,ARM模式如何改变 有人能解释一下用户模式案例的整个动作流程,以及更一般的系统调用处理(特别是ARM模式是如何变化的)吗ARM模式:用户和系统,arm,Arm,你能解释一下在系统调用处理的情况下ARM模式是如何改变的吗? 我听说ARM模式的改变只能在特权模式下发生,但是在ARM处于用户模式(非特权模式)时进行系统调用处理的情况下,ARM模式如何改变 有人能解释一下用户模式案例的整个动作流程,以及更一般的系统调用处理(特别是ARM模式是如何变化的)吗 提前感谢。对于ARM上的系统调用,通常系统调用会导致执行SWI指令。每当处理器执行SWI(软件中断)指令时,它就会进入SVC模式,这是特权模式,并跳转到SWI异常处理程序。然后,SWI处理程序查看中断的原因
提前感谢。对于ARM上的系统调用,通常系统调用会导致执行
SWI
指令。每当处理器执行SWI
(软件中断)指令时,它就会进入SVC
模式,这是特权模式,并跳转到SWI
异常处理程序。然后,SWI
处理程序查看中断的原因(嵌入到指令中),然后执行操作系统程序员决定应该执行的任何操作。其他异常(复位、未定义指令、预取中止、数据中止、中断和快速中断)都会导致处理器进入特权模式
文件处理的工作方式完全取决于编写您的操作系统的人——这一点与ARM无关。您需要一份ARM(体系结构参考手册) ->ARM架构->参考手册->ARMv5架构参考手册,然后下载pdf 它曾经是ARM世界中的一个单一ARM,但是有太多的内核,并且开始出现分歧,因此他们将旧的一个拆分为ARMv5 ARM,并为每个主要的ARM处理器系列制作了新的体系结构参考手册 在“程序员模型”一章中,它讨论了模式,它说您可以在除用户之外的其他模式中自由更改。ARM启动代码通常会经历一系列模式更改,以便可以配置堆栈指针等。然后根据需要返回到系统模式或用户模式 在同一章中,请看异常部分,它描述了异常以及处理器为每个异常切换到的模式 执行SWI指令时发生的软件中断异常是实现系统调用的一种方法。处理器处于监控模式,如果处于拇指模式,则切换到arm模式 当然,需要有代码来支持该异常处理程序。您需要使用操作系统(如果有)验证您正在运行、支持什么以及调用约定是什么,等等
并非所有ARM处理器都是这样工作的。Cortex-M(ARMv7-M)没有相同的模式和相同的异常表等。当您使用ARM时(在该级别),您需要获得您正在使用的系列的ARM,并且需要获得您正在使用的核心的TRM(技术参考手册),理想情况下是精确的版本,即使ARM将TRM标记为已被芯片制造商购买的较新版本替换,并使用特定版本的core,但版本之间可能存在足够的差异,因此您需要正确的手册。我引用了此处提供的ARM文档: 当生成异常时,处理器执行以下操作 行动:
- 切换到适当的模式,并映射到该模式的适当倾斜输出寄存器李>
- 禁用中断。当发生任何异常时,IRQ将被禁用。当FIQ发生和重置时,FIQ被禁用李>
其中,CPSR指当前程序状态寄存器,SPSR指保存的程序状态寄存器,用于恢复中断进程的状态。因此,如第3点所示,处理器电路的设计方式是,当用户模式执行主管调用指令时,硬件本身改变模式 当PC遇到SVC指令时,会发生以下行为:
- 当前状态(CPSR)已保存(保存到主管SPSR)
- 该模式切换到监控模式
- 正常(IRQ)中断被禁用
- 进入ARM模式(如果尚未使用)
- 以下指令的地址(返回地址)保存到链接寄存器(R14)-值得注意的是 属于主管模式的链接寄存器
- 电脑更改为跳转到地址0x00000008
MRS R0, CPSR ; load CPSR into R0
BIC R0, R0, #&1F ; clear mode field
ORR R0, R0, #&10 ; user mode code
MSR SPSR, R0 ; store modified CPSR into SPSR
MOVS PC, LR ; context switch and branch