【操作系统基础】【你没看过的处理器精华信息,绝对值得一看】处理器的中断和内部异常、处理器工作模式、寄存器完整介绍以及每个寄存器具体功能,指令集

注:本文以鲲鹏处理器为例子,它的指令集是ARMv8架构的(即第八版本),本文是我对这个处理器在体系架构、寄存器资源、指令集的介绍与总结,其中有很多东西是令我惊讶的,比如一个处理器中的指令集不是一套,而是多套!就记录以便温故知新。

中断

中断在哪里发生在CPU运行时,除非来自收到处理器外部的中断消息来通知CPU,CPU会一直按照既定的运行流程运行,而不受到其它外部干扰。也就是说只有中断才是处理器与外部的交互方式。
中断分类:在计算机中,中断通常是频繁发生的。中断既然来自外部,也就是说中断不是由当前执行的指令触发,把中断也称为异步异常。异步异常分为三种:IRQ(Interrupt ReQuest)、FIQ(Fast Interrupt reQuest)、SError(System Error,由处理器外部硬件触发)。FIQ的优先级高于IRQ,中断也通常指的是这两种。
中断发生的流程:外部硬件声明一条中断请求线与每个CPU核的某个引脚连接。在这个中断线未禁用的情况下,当这里产生中断并发送到CPU的引脚上,CPU在下一次取指令前看到这个中断后,就会触发相应的异常类型。通常计算机系统会把中断源并到中断控制器中,由它按优先级发送中断消息给CPU。

内部异常

异常在哪里发生:内部异常是指CPU在执行某一条指令的过程里触发的异常。也称为同步异常。
内部异常分类

  1. 执行异常生成指令时引发的异常:SVC(Supervisor Call)、HVC(Hypervisor Call)、SMC(Secure Monitor Call)。
  2. 访问数据时,有相应的读/写权限无法访问或虚拟地址未映射到物理地址而引发的异常——数据异常。
  3. 取指时,执行权限或虚拟地址未映射到物理地址而引发的异常——指令异常。
  4. CPU遇到无法识别的指令——未定义的指令异常。
  5. 调试过程中需要在执行中暂停——调试异常。

异常架构

上面的同步异常(处理器内部)和异步异常(外部中断或硬件中断)都会让处理器处于异常状态。处理器在处理计算机不同层级的软件时对内部寄存器、内存和I/O设备的资源访问和控制权限是不同的,不同的硬件资源的功能可能也不一样。例如寄存器。我们给每一个计算机软件层级分别设计了一级硬件访控权限。处理器运行在某级别权限中,就有对应的权限,这就叫做异常级别或特权级别。越是底层的软件对这些硬件资源的访问特权就越大,能访问更多的硬件资源。处理器通过一组寄存器PSTAE(程序状态寄存器)中的CurrentEL(CurrentErrorLevel,当前级别异常级别寄存器)来标记并确定不同的软件的权限,让处理器运行在这个异常级别中。
计算机四个特权级别 :通常64位运行状态下分为四级,32位则分为9种工作模式。对应关系也列出如下。

  1. EL0级:应用层软件运行时处理器所处的运行状态。对应USER模式。
  2. EL1级:内核级软件访问时处理器所处的运行状态。对应SVC、ABT、IRQ、FIQ、UND、SYS模式。
  3. EL2级:虚拟机监视器(Hypervisor)级软件(一种可以将物理资源虚拟化成多份分配给不同的虚拟机的软件,操作系统可以在上面运行,但不是所有的操作系统都在虚拟机上运行)访问时处理器所处的运行状态。对应HYP模式。
  4. EL3级(底层):安全监视器(Monitor)运行时处理器所处的运行状态。对应MON模式。

寄存器

寄存器分为通用寄存器、特殊寄存器、系统寄存器。

通用寄存器:31个64位通用寄存器X0~X30:4个级别都可使用。用来保存地址或者数据,这里的数据主要是参数、临时数据、计算结果等。如果是32位寄存器,用Wn表示。执行32位程序时,读写时把寄存器高32位硬件忽略清零

  1. 前8个寄存器X0~X7是4个级别通用的寄存器,其功能不会因为处理器工作模式的变化而改变。
  2. X8~X12这4个寄存器是7个模式均可访问的(即HYP、FIQ模式不可访问)。都被用作中断现场的保存和恢复。
  3. X24~X28这4个仅可被HYP和FIQ访问。都被用作中断现场的保存和恢复。
  4. X13、X17、X19、X21、X23、X29、X15分别作为USER&SYS&MON、IRQ、SVC、ABT、UND、FIQ、HYP模式下的堆栈指针寄存器。
  5. X14、X16、X18、X20、X22、X30、X14分别作为USER&SYS&MON、IRQ、SVC、ABT、UND、FIQ、HYP模式下的链接寄存器。

特殊寄存器:10个特殊寄存器。分为4个功能,按功能列举如下:

  1. ELR_ELx(x=1,2,3)异常链接寄存器:存储在x异常级别下切换时现场保存的地址部分。
  2. SPSR_ELx(x=1,2,3)备份程序状态寄存器:存储在x异常级别下切换时现场保存的处理器状态部分。
  3. PC程序计数器:下一条指令的地址。
  4. SP_ELx(x=0,1,2,3)堆栈指针寄存器:0可用于任意一个异常级别。

系统寄存器:11个系统寄存器,存储系统的配置和管理信息的存储。如体系使能、地址转换、页表转换等,与系统配置有关的寄存器较多,以下是几个例子,有助于理解系统寄存器的主要功能。

  1. SCTLR_ ELx(x=1,2,3)系统控制寄存器:控制设备和体系结构。内存管理单元MMU使能、数据缓存启用、对齐检查的使能。
  2. TCR_ELx(x=1,2,3)转换控制寄存器:配置虚拟地址位数、转换粒度大小(转换的页大小)、保存页表的可缓存性、共享性等信息等地址转换需要的信息。
  3. TTBR0_ELx(x=1,2,3)\ TTBR1_ELx(x=1,2)转换表基址寄存器:保存页表基址以及地址空间标识符。

指令集

指令是处理器上全部指令的集合,每一条指令对应着一个处理器硬件的操作流程。处理器有了指令集,人就可以通过这些指令操作计算机,现在主流的编程语言也都是通过这些语言各自的解释器或编译器翻译为指令后才能操纵计算机完成想要的功能。可以说指令集担任着软件到硬件的最后一道交互门。
基于ARMv8架构的处理器在不同的位的运行状态时使用的指令集不是相同的。32位运行时,使用
A32
/T32,64位运行时使用A64
这里的32位64位并不是指令的位宽。;三种指令集的指令位宽都是32位,只是64位运行状态下指令集可以提供对64位的寄存器操作能力和64位寻址能力。T是半字对齐的半字序列、A是字对齐。这里的对齐方式指的是内存地址对齐方式。
常用指令

  1. 算术运算指令:ADD加法、ADC带进位加法、SUB减法、SBC带进位减法。
  2. 逻辑运算指令:AND与、EOR或、跳转指令(B.cond\B(跳转到②)\BL(跳转到绝对地址)\BLR(跳到reg内容处,绝对地址)\BR(跳到reg内容处))、B.cond类型的跳转指令又包括CBNZ(①不等于0,跳转到②)、CBZ(①等于0,跳转到②)、TBNZ(①[x]不等于0,跳转到②)、TBZ(①[x]等于0,跳转到②)等。
  3. 数据传送指令(Load/Store指令):用于寄存器和内存之间数据的传送,Load是将内存中数据加载到寄存器中,Store是将寄存器中数据存储至内存中。这个功能的指令分为单一数据传送指令(LDR/STR和LDXR_STXR)、多数据传送指令、数据交换指令(CAS)等。
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张学灿@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值