ARM内核架构(二)——ARM处理器7种工作模式

ARM内核架构(二)——ARM处理器7种工作模式

小狼@http://blog.csdn.net/xiaolangyangyang


一、ARM处理器7种工作模式(特权模式 特权模式异常模式

  1. 用户模式(USR):正常程序执行模式,不能直接切换到其他模式
  2. 系统模式SYS):运行操作系统的特权任务,与用户模式类似,但具有可以直接切换到其他模式等特权
  3. 快中断模式FIQ):支持高速数据传输及通道处理,FIQ异常响应时进入此模式
  4. 中断模式IRQ):用于通用中断处理,IRQ异常响应时进入此模式
  5. 管理模式SVC):操作系统保护模式,系统复位和软件中断响应时进入此模式(由系统调用执行软中断SWI命令触发)
  6. 中止模式ABT):用于支持虚拟内存和/或存储器保护,在ARM7TDMI没有大用处
  7. 未定义模式UND):支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式
处理器工作模式说明
用户(user,usr)模式 正常程序运行模式
快速中断(FIQ,fiq)模式异常模式特权模式
privileged
modes
快速中断处理
外部中断(IRQ,irq)模式普通中断处理
超级用户(supervisor,svc)模式提供操作系统使用的一种保护模式,swi命令状态
数据访问终止(abort,abt)模式用于虚拟存储和存储保护
未定义指令终止(undefined,und)模式用于支持通过软件仿真硬件的协处理
系统(system,sys)模式 用于运行特权级的操作系统任务
  • 除用户模式外,其余6种工作模式都属于特权模式
  • 特权模式中除了系统模式以外的其余5种模式称为异常模式
  • 大多数程序运行于用户模式
  • 进入特权模式是为了处理中断、异常、或者访问被保护的系统资源
    硬件权限级别:系统模式 > 异常模式 > 用户模式
    快中断与慢中断区别:快中断处理时禁止中断

    CPU的模式可以简单的理解为当前CPU的工作状态,比如:当前操作系统正在执行用户程序,那么当前CPU工作在用户模式,这时网卡上有数据到达,产生中断信号,CPU自动切换到一般中断模式下处理网卡数据(普通应用程序没有权限直接访问硬件),处理完网卡数据,返回到用户模式下继续执行用户程序

特权模式

    除用户模式外,其它模式均为特权模式(Privileged Modes)。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式

异常模式

    特权模式中除系统(system)模式之外的其他5种模式又统称为异常模式。它们除了可以通过在特权下的程序切换进入外,也可以由特定的异常进入。比如硬件产生中断信号进入中断异常模式,读取没有权限数据进入中止异常模式,执行未定义指令时进入未定义指令中止异常模式。其中管理模式也称为超级用户模式,是为操作系统提供软中断的特有模式,正是由于有了软中断,用户程序才可以通过系统调用切换到管理模式

    Linux操作系统使用了其中USR和SVC模式、出现异常时还可能通过进入其他模式转为Linux内核态

    MMU种有存储访问权限控制功能,访问没有权限的地址时,会产生Permission fault中断

二、异常的优先级
            
 
三、存储器格式
  1. 大端格式:高字节在低地址,低字节在高地址
  2. 小端格式:高字节在高地址,低字节在低地址
四、ARM体系的CPU有两种工作状态
  1. ARM状态
  2. THumb状态
五、Linux操作系统与ARM工作模式
    首先,ARM开发板在刚上电或复位后都会首先进入SVC即管理模式,此时、程序计数器R15-PC值会被赋为0x0000 0000;bootloader就是在此模式下,位于0x0000 0000的NOR FLASH或SRAM中装载的,因此、开机或重启后bootloader会被首先执行。
    接着,bootloader引导Linux内核,此时、Linux内核一样运行在ARM的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的用户模式。

参考文献:

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值