一、ARM的基本设定
-
ARM 采用的是32位架构.
-
ARM 约定:
Byte : 8 bits
Halfword :16 bits (2 byte)
Word : 32 bits (4 byte) -
大部分ARM core 提供:
ARM 指令集(32-bit)
Thumb 指令集(16-bit )
Thumb2指令集(16 & 32bit)ARM 的一个 CPU 上,能够同时提供、支持 3 种指令集。
ARMv7 之后版本的 CPU,支持 Thumb2 指令集。对于普通指令,采用 Thumb2 16 bit 指令集,能够节省内存空间;对于
异常
等指令长度较长的操作,采用 Thumb2 32 bit 指令集。 -
Jazelle cores 支持 Java bytecode
二、ARM处理器工作模式
ARM 有7个基本工作模式
- User : 非特权模式,大部分任务执行在这种模式;
- FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式,此中断是快速中断;
- IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式 ,此中断是普通中断;
- Supervisor : 当复位或软中断指令执行时将会进入这种模式 ,此模式又称为管理模式;
- Abort : 当存取异常时将会进入这种模式,如 CPU 读取内存失败,或者 CPU 写内存失败;
- Undef : 当执行未定义指令时会进入这种模式,如 CPU 读取到不认识的指令;
- System : 使用和 User 模式相同寄存器集的特权模式
七种工作模式的分类,可以记忆如下:
1、一个用户模式 User,和六个特权模式;
2、特权模式又分为 5 个异常模式 和 1 个系统模式 System;
- 除 User(用户模式)是 Normal(普通模式)外,其他 6 种都是 Privilege(特权模式)。
- Privilege 中除 Sys 模式外,其余 5 种为异常模式。
- 各种模式的切换,可以是程序员通过代码主动切换(通过写 CPSR 寄存器);也可以是 CPU 在某些情况下自动切换。
- 各种模式下权限和可以访问的寄存器不同。
其他书籍看到的解释
- User:非特权模式,大部分任务执行在这种模式,如用户进程;
- FIQ:当一个高优先级 (fast) 中断产生时将会进入这种模式;
- IRQ:当一个低优先级 (normal) 中断产生时将会进入这种模式;
- Supervisor:当复位或软中断指令执行时将会进入这种模式,如 uboot 过程;
- Abort:当存取异常时将会进入这种模式;
- Undef:当执行未定义指令时会进入这种模式;
- System:使用和User模式相同寄存器集的特权模式,操作系统内核专用的模式;
除了用户模式之外的其他 6 种处理器模式称为特权模式(Privileged Modes)。在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。其中,除 sys 系统模式外,其他 5 种特权模式又称为异常模式。
处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下。这时,应用程序不能够访问一些受操作系统保护的系统资源。应用程序也不能直接进行处理器模式的切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理过程中进行处理器模式的切换。这种体系结构可以使操作系统控制整个系统的资源。
当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式中都有一组寄存器,供相应的异常处理程序使用,这样就可以保证在进入异常模式时,用户模式下的寄存器(保存了程序运行状态)不被破坏。
系统模式并不是通过异常过程进入的,它和用户模式具有完全一样的寄存器。但是系统模式属于特权模式,可以访问所用的系统资源,也可以直接进行处理器模式切换。它主要供操作系统任务使用。通常操作系统的任务需要访问所有的系统资源,同时该任务仍然使用用户模式的寄存器组,而不是使用异常模式下相应的寄存器组,这样可以保证当异常中断发生时任务状态不被破坏。
三、什么是异常
- 正常工作之外的流程都叫异常;
- 异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续回来执行原来的工作;
- 中断是异常的一种;
四、CPU为什么设计这些模式
- CPU是硬件,OS是软件,软件的设计要依赖硬件的特性,硬件的设计要考虑软件需要,便于实现软件特性。
- 操作系统有安全级别要求,因此CPU设计多种模式是为了方便操作系统的多种角色安全等级需要。
源自B站朱有鹏老师.