飞腾CPU体系结构(四)
第四节 处理器状态
1. 处理器状态
处理器状态主要包括条件标志,异常屏蔽标志、执行状态和权限级等信息。飞腾CPU的当前处理器状态不是单一系统寄存器来描述的,是由若干系统寄存器一起来描述的。
在AArch64模式中,处理器状态PSTATE包括以下域:
- {N, Z, C, V} 条件标志
寄存器NZCV是一个32位寄存器,描述了用于数据处理过程的条件标志,包括第31位的负标志N、第30位的零标志Z、第29位的借位标志C和第28位的溢出标志V。这些条件标志位可以在EL0权限级修改。
mrs x0, nzcv
msr nzcv, x0
- SS 软件单步控制位,包含在监控调试系统控制寄存器MDSCR的第0位SS。
- 调试器首先使能该软件单步控制位
- 调试器对异常链接寄存器elr编程,指向要执行指令,并异常返回eret。
- 处理器执行一条指令,触发一次软件单步异常,然后将控制权交给调试器。
- 调试器返回上面2,循环下一步;或者将该软件单步控制位关闭,退出。
mrs x0, mdscr_el1
msr mdscr_el1, x0
- IL 非法执行状态位,非法返回事件包括
- 非法异常返回
- 从调试状态非法返回
- 在调试状态执行dprs指令
从调试状态返回,处理器状态就会保存在寄存器dspsr_el0中,而不是寄存器spsr_elx。
- {D, A, I, F} 调试掩码位D,中断掩码位A/I/F,软件可以独立修改每一位;寄存器DAIF是一个32位寄存器,设置异常屏蔽标志,包括:
- 调试异常屏蔽位D
- 系统错误屏蔽位A
- 中断IRQ屏蔽位I
- 快速中断FIQ屏蔽位F
如果某个异常掩码位设置为1,对应的异常事件就被飞腾CPU屏蔽。这些异常屏蔽位一般不允许在EL0权限级访问;在高权限级下,MRS/MSR指令用于访问DAIF寄存器。
mrs x0, daif
msr daif, x0
msr daifset, #imm
msr daifclr, #imm
- nRW 当前执行模式,执行模式是指CPU位长模式,即
- AArch64
- AArch32
- EL 当前权限级。CurrentEL寄存器是一个32位只读寄存器,描述了飞腾CPU当前所处的权限级,其中第2、3两位有效:
- 0b00是EL0;
- 0b01是EL1;
- 0b10是EL2;
- 0b11是EL3。
该寄存器不允许在EL0权限级访问,在高权限级下是只读寄存器。
mrs x0, CurrentEL
- SP 堆栈指针寄存器选择位
- 一般说来,CPU会提供一个通用堆栈寄存器SP;因此当权限级切换时,软件需要对堆栈寄存器进行保存或恢复操作。
- 为了优化这种由权限级切换导致的堆栈寄存器保存恢复操作,飞腾CPU分别为四权限级定义了64位堆栈寄存器SP_ELx(x=0/1/2/3)。
- 飞腾CPU提供了堆栈选择寄存器SPSel,用来决定哪一个SP_ELx作为通用堆栈寄存器SP来使用。
- 如果堆栈选择寄存器SPSel的第0位为1,在权限级ELx下对寄存器SP的访问就是对相应的SP_ELx访问;
- 如果堆栈选择寄存器SPSel的第0位为0,无论哪一个权限级,对堆栈寄存器SP的访问就是对SP_EL0访问。
msr SPSel, #imm
- 根据权限级和堆栈寄存器选择,飞腾CPU可以分为
- 权限级为EL0: EL0t(堆栈寄存器为SP_EL0)
- 权限级为EL1:EL1t(堆栈寄存器为SP_EL0)和EL1h(堆栈寄存器为SP_EL1)
- 权限级为EL2:EL2t(堆栈寄存器为SP_EL0)和EL2h(堆栈寄存器为SP_EL2)
- 权限级为EL3:EL3t(堆栈寄存器为SP_EL0)和EL3h(堆栈寄存器为SP_EL3)
2. 堆栈寄存器选择
一般说来,CPU会提供一个通用堆栈寄存器SP;因此当权限级切换时,软件需要对堆栈寄存器进行保存或恢复操作。
为了优化这种由权限级切换导致的堆栈寄存器保存恢复操作,飞腾CPU分别为四权限级定义了64位堆栈寄存器SP_ELx(x=0/1/2/3)。
- 如果直接访问这四个堆栈寄存器SP_ELx,必须用MRS/MSR指令才能直接访问。直接访问这四个堆栈寄存器有最低权限级要求。
- 另外,也可以通过通用堆栈寄存器SP来访问相应的堆栈寄存器SP_ELx。
- 在权限级EL0下,堆栈寄存器只能是SP_EL0;
- 权限级EL1下,堆栈寄存器可以是SP_EL0或者SP_EL1;
- 权限级EL2和EL3的情况和EL1类似。
因此,飞腾CPU提供了堆栈选择寄存器SPSel,用来决定哪一个SP_ELx作为通用堆栈寄存器SP来使用。如果堆栈选择寄存器SPSel的第0位为1,在权限级ELx下对寄存器SP的访问就是对相应的SP_ELx访问; 如果堆栈选择寄存器SPSel的第0位为0,无论哪一个权限级,对堆栈寄存器SP的访问就是对SP_EL0访问。
Linux4.19操作系统内核实现中
- 当飞腾CPU处于EL0权限级时,堆栈寄存器SP是SP_EL0;
- 在EL1权限级时,堆栈寄存器SP是SP_EL1。
3. 处理器状态保存
除了描述当前处理器状态的系统寄存器组,飞腾CPU还提供了保存处理器状态寄存器,专门用于权限级切换的处理器状态保存。
飞腾CPU提供了3个异常链路寄存器ELR_ELx(x=1/2/3),当异常进入ELx权限级时,ELR_ELx就用于保存异常返回地址。
飞腾CPU提供了七个SPSR寄存器,其中包含了三个常规SPSR_ELx(x=1/2/3)寄存器;其他的四个处理器保存寄存器是:
- spsr_abt,异常进入Abort状态,采用该寄存器保存处理器状态
- spsr_fiq,异常进入FIQ状态,采用该寄存器保存处理器状态
- spsr_irq,异常进入IRQ状态,采用该寄存器保存处理器状态
- spsr_und,异常进入未定义状态,采用该寄存器保存处理器状态
飞腾CPU体系结构(四)相关推荐
- 飞腾CPU体系结构(十四)
飞腾CPU体系结构(十四) 1. MMU原理 MMU的大致工作原理是: 64位虚拟地址首先分成虚拟页帧号和页内偏移量两部分,虚拟页帧号即页表项索引:根据页表项索引,在进程的页表里查找到对应页表项,然后 ...
- 飞腾CPU体系结构(九)
飞腾CPU体系结构(九) 向量访存指令主要包括LD1/ST1. LD2/ST2.LD3/ST3和LD4/ST4四种. LD1/ST1一般针对一个向量寄存器,也有两个.三个或四个向量寄存器的模式. LD ...
- 飞腾CPU体系结构简单介绍(一)
第一章 飞腾CPU体系结构简介 ARM体系结构是一种精简指令集体系结构RISC,具有以下基本特点:通用寄存器数量较多:采用统一寻址模式,系统主存和外设分布在CPU物理地址空间的不同范围:采用load/ ...
- 飞腾CPU体系结构(十)
飞腾CPU体系结构(十) 1.高速缓存模型 为了优化整体性能,飞腾CPU芯片内部提供L1高速缓存和L2高速缓存,有些飞腾CPU也提供芯片内部的L3高速缓存,本节不对这个情况进行赘述. 靠近流水线的高速 ...
- 飞腾CPU体系结构(十二)
飞腾CPU体系结构(十二) 1. CPU物理地址空间 飞腾CPU支持的物理地址宽度为44位,物理地址空间实际上只有16TB.系统主存(芯片外部内存)和IO外设(例如SoC设备.PCIe设备)都在这个物 ...
- 飞腾CPU体系结构(五)
飞腾CPU体系结构(五)-- 通用寄存器 1. 64位通用寄存器 在AArch64执行状态下,飞腾CPU提供31个64位通用寄存器Xn(n=0/1/-/30),其中X30用作跳转链接寄存器. 某些指令 ...
- 飞腾CPU体系结构(十一)
飞腾CPU体系结构(十一) 1. 预取机制 飞腾CPU为了提升性能,支持从外部内存中预取数据到L1或L2缓存中.如果某个缓存块内容不在L1/L2缓存中,当该缓存块的某个地址单元被第一访问时,就会遇到内 ...
- 飞腾CPU体系结构(八)
飞腾CPU体系结构(八)--标量访存指令 在阅读之前,请先查看<飞腾CPU体系结构(五)>的SIMD和浮点寄存器.飞腾CPU还提供了32个128 位SIMD和浮点寄存器,这32个128位寄 ...
- 飞腾CPU体系结构之虚拟地址
飞腾CPU体系结构之虚拟地址 1. 基本概念 虚拟地址:程序运行时指令和数据对应的地址. 虚拟地址空间:一个进程运行时指令和数据能访问到的虚拟地址范围. 注意事项: 每个进程拥有自己的虚拟地址空间,进 ...
- 飞腾CPU体系结构(二)
第二节 权限级模型 2.1 基本概念 CPU在运行时都会处于一个权限级中.从程序员角度看,权限级可以简单地看作是CPU被允许运行的指令范围.可以访问的寄存器集合和地址范围.一般而言,CPU可以支持多个 ...
最新文章
- Matplotlib绘图双纵坐标轴设置及控制设置时间格式
- 小学生python入门-极度舒适的全套 Python 入门教程,小学生看了也能学会
- 这门国产语言终于要发布 1.0 版本了
- RK瑞芯微WIFI模组2020最新支持列表,放心使用!
- 宝塔linux面板假设nextcloud,宝塔面板部署NextCloud(14.0.3)逐一解决后台安全及设置警告...
- 200道物理学难题——038蚱蜢跃树
- 苹果cms仿ZzzFun动漫视频站PC模板
- excel表中怎么插入visio_快速制作组织架构图,还在用Visio就out了,Excel简单三步搞定...
- java memcmp_C 库函数
- 在linux中配置安装telnet服务
- 2022国产GIS软件排名
- 梅科尔工作室-第七次网络前端培训(JS)
- 计算机程序员的英文求职面试,程序员英文面试自我介绍
- 按需使用vue-cli-plugin-element插件
- 系统测试(功能测试、性能测试、负载测试、压力测试、兼容性测试、安全测试、健壮性测试、配置测试、可用性测试、文档测试)
- 关于图片格式中的那些“小”事---- 由编辑图片格式时所想到的
- 支付宝支付后页面跳转
- html实现点击出现小爱心
- NDIS拨号流程+dhcp
- 屏幕分辨率:聊一聊像素