转载:https://blog.csdn.net/ly930156123/article/details/79219303

两种工作状态

1、ARM状态:32位,ARM状态执行字对齐的32位ARM指令。

2、Thumb状态,16位,执行半字对齐的16位指令。

3、用Bx Rn指令来进行两种状态的切换:

其中Bx是跳转指令,而Rn是寄存器(1个字,32位),如果Rn的位0为1,则进入Thumb状态;如果Rn的位为0,这进入ARM状态。(原 因:ARM指令的后两位始终为0,没有用,而Thumb指令的后一位始终为0,没有用,因此采用位0来表示ARM指令与Thumb指令的切换标志位。)

注:1、ARM和Thumb两种状态之间的切换不影响处理器的工作模式和寄存器的内容。

2、ARM处理器在处理异常时,不管处理器处于什么状态,则都将切换到ARM状态。(**********)

另外:ARM的M系列主要用Thumb指令,ARM9和A系列主要用ARM指令

S3C2440.S启动代码中根本就没用Thumb指令

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

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

处理器工作模式

特权模式

异常模式

说明

用户(user)模式

用户程序运行模式

系统(system)模式

该组模式下可以任意访问系统资源

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

一般中断(IRQ)模式

通常由系统异常状态切换进该组模式

普通中断模式

快速中断(FIQ)模式

快速中断模式

管理(supervisor)模式

提供操作系统使用的一种保护模式,swi命令状态

中止(abort)模式

虚拟内存管理和内存数据访问保护

未定义指令终止(undefined)模式

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

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

特权模式

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

异常模式

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

7种工作模式介绍

(1)用户模式

用户模式是用户程序的工作模式,它运行在操作系统的用户态,它没有权限去操作其它硬件资源,只能执行处理自己的数据,也不能切换到其它模式下,要想访问硬件资源或切换到其它模式只能通过软中断或产生异常。

(2)系统模式

系统模式是特权模式,不受用户模式的限制。用户模式和系统模式共用一套寄存器,操作系统在该模式下可以方便的访问用户模式的寄存器,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。

 说明:用户模式与系统模式两者使用相同的寄存器,都没有SPSR(Saved Program Statement Register,已保存程序状态寄存器),但系统模式比用户模式有更高的权限,可以访问所有系统资源。

(3)一般中断模式

一般中断模式也叫普通中断模式,用于处理一般的中断请求,通常在硬件产生中断信号之后自动进入该模式,该模式为特权模式,可以自由访问系统硬件资源。

(4)快速中断模式

快速中断模式是相对一般中断模式而言的,它是用来处理对时间要求比较紧急的中断请求,主要用于高速数据传输及通道处理中。

(5)管理模式(Supervisor,SVC) :

管理模式是CPU上电后默认模式,因此在该模式下主要用来做系统的初始化,软中断处理也在该模式下。当用户模式下的用户程序请求使用硬件资源时,通过软件中断进入该模式。

说明:系统复位或开机、软中断时进入到SVC模式下。

(6)终止模式

中止模式用于支持虚拟内存或存储器保护,当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式,linux下编程时经常出现的segment fault通常都是在该模式下抛出返回的。

(7)未定义模式

未定义模式用于支持硬件协处理器的软件仿真,CPU在指令的译码阶段不能识别该指令操作时,会进入未定义模式。

说明:

1、用户模式外,其它6种模式称为特权模式。所谓特权模式,即具有如下权利:

a.MRS(把状态寄存器的内容放到通用寄存器);

b.MSR(把通用寄存器的内容放到状态寄存器中)。

由于状态寄存器中的内容不能够改变,因此要先把内容复制到通用寄存器中,然后修改通用寄存器中的内容,再把通用寄存器中的内容复制给状态寄存器中,即可完成“修改状态寄存器”的任务。

2、剩下的六种模式中除去系统模式外,统称为异常模式。

    除用户模式外,其余6种工作模式都属于特权模式
    特权模式中除了系统模式以外的其余5种模式称为异常模式
    大多数程序运行于用户模式
    进入特权模式是为了处理中断、异常、或者访问被保护的系统资源

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

    快中断与慢中断区别:快中断处理时禁止中断

  1. 异常的优先级

、存储器格式

  • 大端格式:高字节在低地址,低字节在高地址
  • 小端格式:高字节在高地址,低字节在低地址
  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的用户模式。

[ARM] ARM处理器的7种工作模式和2种工作状态相关推荐

  1. LVS原理详解(3种工作模式及8种调度算法)

    2017年1月12日, 星期四 LVS原理详解(3种工作模式及8种调度算法) LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) 作者:woshiliwentong  发布日期:20 ...

  2. ARM寄存器的7种工作模式和几种寻址方式

    ARM寄存器的7种工作模式 CPSR[5:0] 10000 user 10001 FIQ 10010 IRQ 10011 SVC 10111 中止 11011 未定义 11111 系统 用这两个指令读 ...

  3. rabbitmq几种工作模式_RabbitMQ的六种工作模式总结

    精品推荐 国内稀缺优秀Java全栈课程-Vue+SpringBoot通讯录系统全新发布! 作者:侧身左睡 https://www.cnblogs.com/xyfer1018/p/11581511.ht ...

  4. gpio的8种工作模式_Stm32之GPIO工作模式简介

    GPIO的8种工作模式 GPIO初始化结构体的时候,必须要配置合适的工作模式,这样才能使得IO口发挥应有的作用.工作模式大体上共分为输入输出两类,共8种,下面将介绍这8种工作模式. GPIO工作模式 ...

  5. 32怎么通过一个按键实现不同工作模式_stm32几种低功耗模式的实现和差别

    点击上方蓝字关注我哦- 01 前言 按功耗由高到低排列,STM32具有运行.睡眠.停止和待机四种工作模式.上电复位后 STM32 处于运行状态,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式 ...

  6. NBIOT模块正常工作模式的三种工作状态(基于BC26)

    1.Connected(连接态): 模块注册入网后处于该状态,可以发送接收数据,无数据交互超过一段时间进入Idle模式,时间可配置. 2.Idle(空闲态): 可收发数据,且收到下行数据会进入conn ...

  7. 1.vi工作模式(3种)以及模式切换(转换)

    vi 编辑器是一个功能强大的编辑器.学习 vi 要从其基本工作模式开始学起.了解这些工作模式对用户理解 vi 编辑器的行为是不无裨益的. 对于一些从图形界面中转入 vi 的开发者来说,了解 vi 的工 ...

  8. 哈佛商业评论:元宇宙改变人类工作模式的四种方式

    原作者:Mark Purdy 原标题:<How the Metaverse Could Change Work> 编译:胡韬,链捕手 想象一个世界,你可以与同事在海边交谈,在空间站周围漂浮 ...

  9. 元宇宙改变人类工作模式的四种方式

    想象一个世界,你可以与同事在海边交谈,在空间站周围漂浮时做会议记录,或者从你在伦敦的办公室传送到纽约,所有这些都无需走出你的前门.由于今天安排的会议太多而感到压力?那么为什么不发送支持 AI 的数字双 ...

最新文章

  1. Mybatis的各种查询功能
  2. unique函数详解
  3. mfc让图片与按钮一起_MFC 基础知识:对话框背景添加图片和按钮Button添加图片...
  4. spring客户端resttemplate/feign/httpclient调研
  5. 2013年网络安全事件盘点
  6. 成员函数指针与高性能的C++委托
  7. Every Woman is beautiful
  8. win7下linux 双系统安装教程,【系统安装】双系统——Win7下安装linux系统详细步骤...
  9. JS获取Audio音频的实时时间
  10. Post man 使用教程
  11. 常见的网络流量识别技术
  12. matlab中ode45如何设置,如何使用Matlab中的ode45修正赋值错误(ode45函数的第488行)
  13. Centos 搭建DHCP服务,新建独立网卡完成DHCP实验
  14. kafka consumer 如何设置每次重启时从最新数据开始读取
  15. 老男孩教育python全栈第九期视频
  16. 随机迷宫生成算法整理分析
  17. Ubantu搭建深度学习和强化学习环境
  18. win10使用KMS激活浏览器被t999劫持
  19. python有趣小程序春节祝福-用python实现新年祝福微信的自动回复
  20. lsdyna如何设置set中的node_list_如何画出一幅好看的图

热门文章

  1. 国务院建议探索区块链等技术缩短承兑期限 | 产业区块链发展周报
  2. 2.给 Proxmox VE换源
  3. 光学计算机PPT,光学课件
  4. 简单介绍长短期记忆网络 - LSTM
  5. 【c语言】求一个3行4列矩阵的外框的元素值之和
  6. win10家庭版如何安装Windows Sandbox
  7. 利用百度poi计算城市能级及评价街道范围便利度、生活宜居情况等
  8. 往往是认知决定你的人生格局
  9. 设计模式六大原则及常用模式详解
  10. .NET开发十大常用工具软件分享