CPU工作模式

CPU工作模式
1,CPU的工作模式有实模式、保护模式、长模式三种。

实模式
1,实模式又称实地址模式,对指令的动作不作区分,直接执行指令的真实功能,对任何地址不加限制,发往内存的址址是真实的。

2,x86 CPU实模式下的寄存器都是16位的。
1)AX、BX、CX、DX、DI、SI、BP,通用寄存器,存放数据、地址、参与运算
2)IP,程序指针寄存器,始终指向下一条指令的地址
3)SP,栈指针寄存器,始终指向当前栈顶
4)CS、DS、ES、SS,段寄存器,存放内存段的基地址
5)FLAGS,CPU标志寄存器,存放CPU执行运算指令产生的状态位

3,CPU根据指令完成相应的功能,指令的操作数可以是寄存器、内存地址、常数,通常情况下是寄存器。

4,数据和指令都是存放在内存中,获取指令和将数据装载进寄存器中,都需要访问内存。
1)取指令,CS段寄存器左移4位+IP寄存器=访问内存的地址;
2)访问内存数据,DS、ES、SS段寄存器左移4位+ AX、BX、CX、DX、DI、SI、SP寄存器=访问内存的地址。
3)所有的内存地址都是由段寄存器左移4位,再加上通用寄存器中的值或常数形成地址,然后访问该内存地址。
4)代码段由CS和IP确定,栈段由SS和SP段确定。

5,应用程序编绎成汇编代码,定义一个数据段存放数据,定义一个代码段存放程序指令,DS指向数据段,CS指向代码段,将数据段首地址赋给栈顶寄存器SP。
1)代码大多数是操作寄存器,LEA是取地址指令,MOV是数据传输指令,INT是中断。

实模式中断
1,中断即中止执行当前程序,跳转到另一特定地址上运行特定代码,实模式下先保存CS和IP寄存器,然后加载新的CS和IP寄存器。
2,中断控制器给CPU发送一个电子信号,CPU对信号作出应答,随后中断控制器将中断号发送给CPU,这是硬件中断。CPU执行INT指令,指令后跟随一个常数,常数通常是软中断信号,这是软件中断。
3,内存中存放一个中断向量表,表的地址和长度由CPU的特定寄存器IDTR指向,实模式下,表中内容由代码段基地址和段内偏移组成。根据中断号,CPU由IDTR寄存器中信息计算中断向量的内容得到代码段基地址和偏移量,加载到CS和IP,最终响应中断。

保护模式
1,保护模式相比于实模式,增加了控制寄存器和段寄存器,并扩展通用寄存器的位宽为32位,可以单独使用低16位,并且可以拆分为两个8位寄存器。
1)EAX、EBX、ECX、EDX、EDI、ESI、EBP,32位通用寄存器,存放数据、地址、参与运算
2)EIP,32位程序指针寄存器,始终指向下一条指令的地址
3)ESP,栈指针寄存器,始终指向当前栈顶
4)CS、DS、ES、SS、FS、GS,16位段寄存器,存放内存段的描述符索引
5)EFLAGS,32位CPU标志寄存器,存放CPU执行运算指令产生的状态位
6)CR0、CR1、CR2、CR3,32位CPU控制寄存器,控制CPU的功能控制特性,如开启保护模式等

2,为了更高的计算量和更大的内存容量,扩展CPU内部器件的位数解决了计算和寻址问题,同时需要对指令的保护和对内存访问的保护。
3,为了区分哪些指令(如in、out、cli)和资源(如寄存器、I/O端口、内存地址)可以访问,CPU实现了特权级,分为R0~R3,每个特权级执行指令的数量不同,R0可以执行所有指令,依次递减,只能执行上一级指令数量的子集,内存访问则是由段描述符和特权级相互配合实现的。

保护模式段描述符
1,由于CPU的扩展,16位的段寄存器放不下32位段基地址和段内偏移,将16位段基地址和16位段内偏移以及其它信息,封装成特定格式的段描述符。
2,段描述符有64位8字节数据,包含了段基地址、段内偏移、段权限、段类型(系统段、代码段、数据段)、段是否可读写,可执行等。
3,GDTR寄存器存储全局段描述符表的基地址和长度,段寄存器中存储的索引+GDTR寄存器基地址找到内存中段描述符,根据段信息判断内存能否访问成功。
4,内存还是分段模型,对内存的保护转换成对段的保护。

保护模式段选择子
1,CS、DS、ES、SS、FS、GS段寄存器中里存放的并不只是内存段的描述符索引,而是影子寄存器、段描述符索引、描述符表索引、权限级别等。
1)段描述符索引是从GDT或LDT中查找具体的段描述符,描述符表索引TI,TI=0时从GDT表中查找,TI=1时从LDT表中查找。
2)权限级别RPL,请求访问者的权限级别,从0到3。
3)TI恒等于0,只需要关注GDT全局描述符,不需要关注LDT。
4)通常情况下,CS和SS中的RPL组成了CPL(当前权限级别),所以RPL=CPL,当CPL大于目标段描述符的权限级别DPL则CPU禁止访问,CPL小于等于目标段的DPL时才能访问。

2,影子寄存器由硬件操作,对系统不可见,是硬件为了减少性能损耗而设计的一个段描述符的高速缓存,存放8字节的段描述符数据。

保护模式平坦模型
1,分段模型有很多缺陷,现代操作系统使用分页模型,x86 CPU不能直接使用分页模型,而是在分段模型的前提下,再决定是否开启分页。
2,硬件的规定软件无法更改但可以简化设计,绕过分段,即保护模式的平坦模型。
3,CPU32位的寄存器最多产生4GB的地址空间,段长度最大只能为4GB,所以将所有段基地址设为0,段长度设为0xFFFFF(21位),一个段指向地址空间设为4KB(11位),则所有的段指向((段的长度+1)*粒度-1)字节大小的地址空间。

保护模式中断
1,保护模式下的中断要权限检查,还有特权级的切换,所以需要扩展中断向量表的信息,每个中断用中断门描述符表示,保存目标代码段选择子、目标代码段偏移等,IDTR寄存器指向的中断向量表保存中断门描述符。

2,产生中断后,CPU检查中断号(x86支持0~255的中断号),然后检查描述符类型、是否为系统描述符等,接着检查中断门描述符中指向的段描述符,最后做权限检查。
1)如果CPL小于等于中断门的DPL,且大于等于中断门中的段选择子指向的段描述符的DPL,则指向段描述符的DPL;
2)如果CPL等于中断门的段选择子指向段描述符的DPL,则为同权限不进行栈切换,否则进行栈切换,从TSS中加载具体权限的SS、ESP,检查SS中段描述符选择子指向的段描述符。

3,做完一系列检查后CPU加载中断门描述符中的目标代码段选择子到CS寄存器,目标代码偏移加载到EIP寄存器中。
4,保护模式下中断对权限的检查,在中断门描述符中保存对应的段选择子和段内偏移量,及DPL权限,如果权限通过检查,则将段选择子和段内偏移加载到CS、EIP寄存器。

切换到保护模式
1,X86 CPU在第一次加电和reset后,自动进入实模式,需要手动切换到保护模式,准备全局段描述符表,加载设置GDTR寄存器指向全局段描述符表,设置CR0寄存器,开启保护模式,进行长跳转,加载CS段寄存器。
2,在开启保护模式时,CS的影子寄存器还是实模式下的值,需要加载新的段信息,将新的段描述符信息加载到CS影子寄存器,加载前需要进行一系列合法的检查,之后CPU进入保护模式,CPU有了32位的处理能力。

长模式
1,AMD64使CPU在现有的基础上有了64位的处理能力,既能完成64位的数据运算,也能寻址64位的地址空间。

2,长模式相比于保护模式,增加了一些通用寄存器,并扩展通用寄存器的位宽,所有通用寄存器都是64位,可以单独使用低32位,低32位可以拆分成一个低16位寄存器,低16位可以拆分成两个8位寄存器。
1)RAX、RBX、RCX、RDX、RDI、RSI、RBP、R8~R15,64位通用寄存器,存放数据、地址、参与运算
2)RIP,64位程序指针寄存器,始终指向下一条指令的地址
3)RSP,栈指针寄存器,始终指向当前栈顶
4)CS、DS、ES、SS、FS、GS,16位段寄存器,存放内存段的描述符索引
5)RFLAGS,64位CPU标志寄存器,存放CPU执行运算指令产生的状态位
6)CR0、CR1、CR2、CR3、CR4,除了CR0是32位CPU控制寄存器,控制CPU的功能控制特性,其它都是64位寄存器

3,长模式段描述符
1)长模式具备保护模式大多数特性,长模式下,CPU对段基址和段长度不检查,只对DPL进行相关检查 。

4,长模式中断
1)长模式的中断门描述符增加8字节,存放了目标段偏移的高32位值,目标代码段选择子对应的代码段描述符必须是64位的代码段。
2)中断门描述符表支持16字节的中断门描述符,最多支持256个中断源,对中断的响应和相关权限检查和保护模式一样。

5,切换长模式
1)准备长模式全局段描述符表,准备长模式下的MMU页表,切换到长模式必须开启分页;
2)长模式下不对段基址和段长度进行检查,内存空间的保护交给MMU,MMU依赖页表对地址进行转换,页表存储在内存中,由CPU的CR3寄存器指向。
3)加载GDTR寄存器指向全局段描述表,开启长模式,同时开启保护模式和分布模式,进行跳转,加载CS段寄存器,刷新影子寄存器。

CPU工作模式的演变
1,早期CPU支持单道程序的实模式,软件规模不大,内存资源较少,仅支持16位地址空间,分段的内存模型,对不限制指令的运行,对内存不隔离保护。
2,保护模式包含特权级,限制指令及其访问的资源,对内存段与段之间的访问严格检查,对中断的响应也进行严格的权限检查,扩展CPU寄存器位宽,可以寻址32位地址和处理32位数据。

3,长模式AMD64在保护模式的基础上将寄存器扩展到64位同时增加一些寄存器,使CPU可以处理64位数据和寻址64位地址。
1)长模式弱化段模式管理,保留权限级别检查,忽略段基址和段长度,地址的检查交给MMU。

  • 18
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值