本文为《操作系统45讲》笔记,简要介绍X86 CPU的工作模式,实模式,保护模式,长模式。
参考:操作系统实战45讲

一、实模式

(1)真实
真实的指令:直接执行指令的真实功能,无权限等校验。

真实的地址:发往内存的地址是真实的物理地址,直接读写,不需要转化也没有限制。

特点:CPU可以执行任意程序指令;内存之间没有隔离保护。

(2)寄存器
X86 CPU在实模式下的寄存器,寄存器的位数为16,重点关注以下几类:
通用寄存器:AX, BX, CX, DX, SI, BP,用户存放数据,参与运算;
指令指针寄存器:代码段寄存器CS : 程序指针寄存器IP,可以得到程序下一条指令的地址;
栈指针寄存器:数据段寄存器SS : 栈指针寄存器器SP,始终指向当前栈顶;
CPU标志寄存器:FLAGS,存放CPU执行运算产生的状态位;

(3)中断
外围设备产生中断,由中断控制器给CPU发送中断信号,CPU被动处理中断任务,这种情况叫做硬件中断;
CPU执行INT指令,主动执行中断任务,这种情况叫做软件中断。

X86 实模式中断过程:
CPU接受到中断控制器消息或者INT指令后,能够获取到中断号;
通过IDTR寄存器获取中断向量表的地址,结合中断号,得到中断入口函数的代码段地址与段内偏移地址,即CS:IP;
CPU保存当前的CS和IP寄存器,并加载中断入口的CS:IP寄存器,响应中断。

二、保护模式

(1)保护
寄存器位数从实模式下的16位,扩展到32位,解决内存寻址空间问题;

各指令区分特权级别,危险指令需要较高权限才能执行,从指令执行角度保护系统;

分段模型,新增段描述符,增加CPU对内存地址访问的权限控制,从数据角度保护系统;

(2)寄存器
新增CPU控制寄存器,扩展通用寄存器位宽到32位,重点关注如下:
通用寄存器:EAX, EBX, ECX, EDX, ESI, EBP,用户存放数据,参与运算;
指令指针寄存器:代码段寄存器CS : 程序指针寄存器EIP,可以得到程序下一条指令的地址;
栈指针寄存器:数据段寄存器SS : 栈指针寄存器器ESP,始终指向当前栈顶;
标志寄存器:EFLAGS,存放CPU执行运算产生的状态位;
控制寄存器:CR0、CR1、CR2、CR3,控制CPU的功能特性,如开启保护模式等

(3)特权级别
特权级分为4级,R0~R3,每个特权级可以执行指令与可以访问的内存资源不同,R0权限最高,R1、R2、R3依次递减。

各指令执行权限与资源访问权限,均依赖于特权级别的划分。

新增全局段描述符表,表内容中包括段的类型、权限以及基地址等;
GDTR寄存器,保存全局段描述符表的基地址与长度;
CPU通过段寄存器(包含访问者的权限级别)获取表的索引,进行权限等判断成功后,获取待访问的段基地址。
(与中断向量表类似,将内存中所有段资源集中统一管理,提高效率)

(4)中断
保护模式下的中断也需要进行权限判断,中断向量表存放中断门描述符,扩充信息。

CPU根据IDTR寄存器找到中断向量表,并根据中断信号转化成索引,确定对应的中断门描述符;
CPU根据中断门描述符,进行类型判断与权限检查;
检查通过后,将中断门中的目标代码段选择子与目标代码段偏移加载到CS:EIP寄存器中,响应中断。

(5)切换
X86 CPU在启动后会自动进入实模式,通过全局段描述符表初始化、GDTR和CRO寄存器配置后,进行跳转,进入保护模式。

三、长模式

(1)长
长模式又称AMD64模式,寄存器位数为64位,寻址空间也为64位。

长模式保留大部分保护模式特性,如特权级检查和权限检查。

长模式下,CPU不再对段描述符中的段基址和段长度进行检查(MMU处理),只对DPL进行相关的检查(权限)。

长模式,实际上可以理解为保护模式的升级版,拓宽寄存器,并将保护模式中的段地址校验功能转交给MMU处理;

(2)寄存器
新增通用寄存器,并将其位宽扩展到32位,重点关注如下:
通用寄存器:RAX, RBX, RCX, RDX, RSI, RBP,R8~R15,用户存放数据,参与运算;
指令指针寄存器:代码段寄存器CS : 程序指针寄存器RIP,始终指向下一条指令的地址;
栈指针寄存器:数据段寄存器SS : 栈指针寄存器器RSP,始终指向当前栈顶;
标志寄存器:RFLAGS,存放CPU执行运算产生的状态位;
控制寄存器:CR0~CR4,控制CPU的功能特性

(3)中断
长模式的中断流程与保护模式类似,GDTR寄存器保存中断向量表的地址;
CPU根据中断消息转化成中断向量表索引,获取对应的中断门描述符;
CPU根据中断门描述符的信息,进行权限相关检查,然后将对应的段选择子和段内偏移装载CS:EIP寄存器,响应中断;

(4)切换
可以从从实模式切换到长模式,也可以从保护模式切换到长模式;

长模式下需要开启分页模式,由MMU提供内存保护(依赖页表);

长模式也需要开启保护模式,保证权限检查功能;

四、总结

(1)实模式:16位寄存器位宽,原始简单,不检查指令权限和内存访问权限;
(2)保护模式:32位寄存器位宽,对指令权限严格控制,保护内存资源的访问;
(3)长模式:64位寄存器位宽,保留指令权限控制,将内存保护功能移交给MMU。

(4)附:ARM处理器的工作模式

ARM微处理器支持7种运行工作模式,分别为:

用户模式(usr):ARM处理器正常的程序执行状态。非特权模式。
快速中断模式(fiq):用于高速数据传输或通道处理。
外部中断模式(irq):用于通用的中断处理。
管理模式(svc):操作系统使用的保护模式。
数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
系统模式(sys):运行具有特权的操作系统任务。
定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

除用户模式外,其余6种模式称为非用户模式或特权模式;用户模式和系统模式之外的5种模式称为异常模式。ARM处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。