文章目录
上一节:20、中断和动态时钟显示
下一节:22、进入保护模式
01、IA-32架构和保护模式
02、寄存器的扩展和扩充
03、32位处理器的内存访问概况
在实模式下,段寄存器和以前一样,用来保存逻辑段地址,左移4位加上偏移地址。
在实模式下,处理器可访问的最高内存地址为0xFFFF0 + 0xFFFF = 0x10FFEF
。理论上可访问地址如上,但是8086只有20根地址线,最高可访问地址为0xFFFFF
,高于的都被截断。多出的内存叫做高位内存去(HMA:High Memory Area
)。
在保护模式下,程序所使用的段需要提前分配并登记在一个描述符表
中,登记了每个段的起始地址、段长度等基本信息。段长度没有限制,可将整个内存空间画为一个段,对于80386
来说,描述符内的段起始地址
可以使任意的32位
内存地址,段长度最大可以是4G字节。
在没保护模式下,段寄存器不再
用于保存程序的逻辑段地址
,而是用来保存描述符的选择子
,用来从描述符表中选择一个描述符
。一旦选择一个描述符,处理器取出描述符中的段基地址
加上 程序中给出的段内偏移地址
,从而形成完整的物理地址。其中偏移地址也没有限制,对80386
来说偏移地址可以是32位。
04、32位处理器的寻址访问概况
寄存器寻址:
内存寻址:
段地址默认是DS
:偏移地址可有如下给出。
32位处理器不能使用16位的栈指针寄存器SP
提供偏移地址,但可以使用ESP
。
32位下实模式案例程序:
05、流水线技术
8086内部主城框图:
流水线模式:
06、高速缓存技术
高速缓存利用程序的局部性原理:
1、程序一般访问相邻内存的程序
2、刚刚被访问过的程序一般还会被访问
3、等等
- 程序先从硬盘送入高速缓存,处理器先检索高速缓存,有(命中:
hit
)则直接取出; - 没有(不中:
miss
)再将硬盘上的数据读入高速缓存(以块为单位),再从高速缓存取数据
07、乱序执行技术
为了实现流水线技术,将指令拆分成更小的可独立执行部分,即微操作(Micro-operations:u ops
)。
将指令拆分成微操作之后,处理器就可以乱序执行(Out Of Order Execution
)。
上图中:从mem2读
和逻辑左移
可以同时进行。
上图中,sp=sp-2
和加法操作
可同时进行。
08、寄存器重命名技术
上图中,前3行和后3行无关,即处理器会将下面的一段程序中的eax
优化成别的寄存区,再将两小段并行执行
。
寄存器的重命名和引退:
09、分支目标预测技术
处理器遇到转移指令时,需要清空(flush
)流水线,那么遇到转移指令时就浪费了之后的流水线。
分支预测技术(Branch Predicion
):核心就是转移发生还是不发生,比如下列程序,会预测si
的值没到20。
分支目标缓存器(Branch Target Buffer:BTB
):
当处理器执行了一条分支语句之后,会在BTB中记录当前语句的地址、分支目标的地址、以及本次分支预测的结果。下一次在那条指令执行前,处理器先查找BTB
,查看有没有最近的转移记录,如果能够找到对应的条目,则推测执行和上一次一样的分支,将该分支的指令送入流水线。当该指令实际执行时,如果这个预测是失败的,那么清空流水线,同时刷新BTB
中的记录。