ARM处理器的7种工作模式--linux操作系统与ARM的工作模式

一、ARM处理器的7种工作模式

  1. 用户模式(USR):正常程序执行模式,不能直接切换到其他模式
  2. 系统模式SYS):运行操作系统的特权任务,与用户模式类似,但具有可以直接切换到其他模式等特权
  3. 快中断模式FIQ):支持高速数据传输及通道处理,FIQ异常响应时进入此模式
  4. 中断模式IRQ):用于通用中断处理,IRQ异常响应时进入此模式
  5. 管理模式SVC):操作系统保护模式,系统复位和软件中断响应时进入此模式(由系统调用执行软中断SWI命令触发)
  6. 中止模式ABT):用于支持虚拟内存和/或存储器保护,在ARM7TDMI没有大用处
  7. 未定义模式UND):支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式
   除用户模式外,其余6种工作模式都属于特权模式
    特权模式中除了系统模式以外的其余5种模式称为异常模式
    大多数程序运行于用户模式
    进入特权模式是为了处理中断、异常、或者访问被保护的系统资源


    硬件权限级别:系统模式 > 异常模式 > 用户模式

二、linux操作系统与ARM工作模式

   首先,ARM开发板在刚上电或者复位后,都会首先进入SVC即管理模式,此时、程序计数器R15-PC会被自动赋值为0x0000 0000,bootloader就是在该模式下,位于0x0000 0000 的NOR FLASH或SRAM中装载的,因此,开机或重启后bootloader会被首先执行。

   接着,bootloader引导linux内核,此时,linux内核仍然运行在SVC即管理模式下,当内核启动完毕后,进入用户态init进程时,内核将ARM的当前程序状态CPSR寄存器M[4:0]设置为10000,进而用户态程序只能运行在ARM的用户模式。

   由于ARM用户模式下对资源的访问时受限制的,因此,用户态可以实现对linux操作系统内核保护的目的。

   需要强调的是:Linux内核态是从ARM的SVC即管理模式下启动的,但在某些情况下、如:硬件中断、程序异常(被动)等情况下进入ARM的其他特权模式,这时仍然可以进入内核态(因为就是可以操作内核了);同样,Linux用户态是从ARM用户模式启动的,但当进入ARM系统模式时、仍然可以操作Linux用户态程序(进入用户态,如init进程的启动过程)。
    即:Linux内核从ARM的SVC模式下启动,但内核态不仅仅指ARM的SVC模式(还包括可以访问内核空间的所有ARM模式);Linux用户程序从ARM的用户模式启动,但用户态不仅仅指ARM的用户模式。

  


猜你喜欢

转载自blog.csdn.net/u012351051/article/details/79681659