ARM学习笔记(一)--处理器模式

    处理器模式

    CPSR寄存器

    ARM V4的CPSR寄存器(和保存它的SPSR寄存器)中的位分配如下图所示。

    ARM学习笔记(一)--处理器模式

    处理器模式

    用户模式(User,usr

    正常程序执行的模式

    快速中断模式(FIQ,fiq

    用于高速数据传输和通道处理

    外部中断模式(IRQ,irq

    用户通常的中断使用

    特权模式(Supervisor,sve

    供操作系统使用的一种保护模式

    数据访问中止模式(Abort,abt

    用于虚拟存储及存储保护

    未定义指令中止模式(Undefin- ed,und

    用于支持通过软件仿真硬件的协处理器

    系统模式(System,sys

    用于运行特权级的操作系统任务

    处理器模式

    体系结构

    模式编号

    用户

    全部

    0b10000

    FIQ - 快速中断请求

    全部

    0b10001

    IRQ - 中断请求

    全部

    0b10010

    超级用户

    全部

    0b10011

    中止

    全部

    0b10111

    未定义

    全部

    0b11011

    系统

    ARMv4 及更高版本

    0b11111

    监控

    仅限安全扩展

    0b10110

    1.除了用户模式以外,其他6种处理器模式可以称为特权模式(前5种也称为异常处理模式,即除了系统模式)

    2.特权模式允许对cpsr的完全读/写访问;与些相反,非特权模式只允许对cpsr的控制域进行读访问,但允许对条件标志的读/写访问。

    3.通过修改cpsr可以进入异常

    MSR CPSR_c,#(NoInt | SVC32Mode) //从系统模式切换到管理模式

    也可以在内核对异常或者中断响应时由硬件切换到异常模式

    用户模式和系统模式不能由异常进入,也就是说要想进入系统模式,必须通过修改CPSR才能实现

    MSR CPSR_c,#(NoInt | SYS32Mode) //从管理模式切换到系统模式

    4.当一个异常发生时处理器总是切换到ARM状态而黑Thumb状态

    5.每一种异常与处理器的一种模式相对应,应用程序发生特定中断时,处理器内核立即跳转到向量表中的某个入口地址,执行相应的程序。每一种模式都有相对应的寄存器,保证引入引入异常时用户模式下的寄存器不被破坏

    当处理器访问存储器失败时,进入数据访问中止模式(abort);

    中断模式和快速中断模式分别对ARM处理器两种不同级别的中断作出响应;

    处理器复位以后,进入管理模式,操作系统内核也通常处于这种模式;

    系统模式是一种特殊的用户模式主要供操作系统的任务使用,允许对cpsr的完全读/写访问;

    当处理器遇到没有定义的指令或处理器不支持该指令时,进入未定义模式

    用户模式运行应用程序。

    6.特权模式可以访问系统的所有资源,也可以在各个模式之间进行切换

    7.各种异常模式有自己的寄存器组,用户模式和系统模式的寄存器组是一样的,所以系统模式可以用户状态下相应的寄存器了,而不是使用异常模式下相应的寄存器,这样就可以保证当异常中断发生时任务的状态不被破坏

    。用户模式通过异常可以进入异常模式,但是由用户模式进入系统模式并不是通过异常实现的。

    8.需要任务保护的应用程序通常在用户模式下执行。 有些嵌入式应用程序可能完全运行在超级用户模式或系统模式下。进入除用户模式之外的模式是为了处理异常或访问特许资源。

    在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。其中除了系统模式外的其他5种特权模式又称为异常模式。处理器模式可以通过软件来切换,在ARM Linux操作系统中,只有运行在内核态的程序才有可能更改处理器模式,用户态的程序是不能访问受操作系统保护的系统资源的,更不能直接进行处理器模式的切换。当需要处理器模式切换的时候,用户态的程序可以中断,内核态的中断处理程序开始响应并做出处理。

    以上7种模式对应了系统中的中断向量表,这在移植操作系统的时候很重要。系统中所有的调度都是围绕着中断向量表展开的,在不用操作系统的系统中也就是通常所谓的裸机系统程序中,对于中断向量表的处理也很关键。这个向量表一般加载在CPU复位执行的开始地址的一段空间。在ARM Linux操作系统中,Boot Loader程序的移植中需要考虑这些问题,而一旦Boot Loader移植成功,运行起来以后,开发人员就不需要再考虑这个问题了。

你可能感兴趣的:(学习笔记)