440 likes | 641 Views
第 4 章 现代微机的存储系统. (自学章节). 4.1 现代微机存储器系统概述. 3 芯片平台架构中,主存储器接口在北桥芯片中 2 芯片平台结构里,主存储器接口集成 在 处理器中。 2 代酷睿处理器中集成的存储控制器 : 支持 2 个独立的具有 64 位宽通道的无缓冲 DDR3 存储器 每个通道可有 1 个到 2 个无缓冲双列直插存储模块或小型双列直插存储模块 具有长度为 8 的数据猝发传输 DDR3 内存每通道都是 64 位的,数据传速率达到 1066MT/s 和 1333MT/s 2 代酷睿处理器集成的主存储器接口 :
E N D
第4章 现代微机的存储系统 (自学章节)
4.1 现代微机存储器系统概述 • 3芯片平台架构中,主存储器接口在北桥芯片中 • 2芯片平台结构里,主存储器接口集成在处理器中。 • 2代酷睿处理器中集成的存储控制器: • 支持2个独立的具有64位宽通道的无缓冲DDR3存储器 • 每个通道可有1个到2个无缓冲双列直插存储模块或小型双列直插存储模块 • 具有长度为8的数据猝发传输 • DDR3内存每通道都是64位的,数据传速率达到1066MT/s和1333MT/s • 2代酷睿处理器集成的主存储器接口: • 支持1Gb,2Gb和4Gb的DDER3 DRAM技术
4.2 现代微机的存储结构 CPU内 的寄存器 L1 数据Cache L1 代码Cache L2 Cache L3 Cache 内部存储器(内存) 外存Cache 外部存储器(外存) 4.2.1 IA-32/Intel64微机存储结构
4.2.2 IA-32/Intel64的存储模式 • IA-32内存模式 • 平坦模式(Flat memory model) • 整个内存是单一连续的地址空间,也称线性地址空间 • 代码、数据和堆栈都包含在这个地址空间 • 线性地址空间是按字节编址的,地址空间从0~232-1(如果不在64位模式) • 分段模式(Segment memory model) • 内存被分割成一个个称为段的独立的地址空间 • 段可以用来存放一个程序的代码、数据或堆栈,或者存放系统数据结构(如TSS或LDT) • 每一个应用程序都可以使用若干个大小不等的段 • 要寻址段内的一个字节需要提供一个由选择符和一个偏移量组成的逻辑地址 • 在IA-32处理器中运行的程序可以寻址16383个不同大小和类型的段,每个段最大可到232字节
4.2.2 IA-32/Intel64的存储模式 • IA-32内存模式 • 分段模式(Segment memory model) • 段选择符指向要操作的段的描述符在描述符表中的索引,偏移量指向段内地址空间中的一个字节 • 系统中定义的所有段都要被映射到处理器的线性地址空间,因此处理器要把每个逻辑地址转变为线性地址(对程序员透明) • 分段机制能阻止程序超过段的界限而对另一个段的内容进行越段访问,以确保多个程序或任务执行过程中不会相互干扰。 • 实地址模式 • 见第二章
4.2.2 IA-32/Intel64的存储模式 • 分页与虚拟存储 • 平坦或分段模式都要将最终的线性地址映射到物理地址空间,这有两种方法 • 直接映射,即每个线性地址一对一的对应到一个物理地址 • 分页机制 • 将线性地址按照固定大小划分为页,将页映射到虚拟存储中,虚拟存储中的页再按照需要映射到物理内存中 • 分页机制并不是必须的 • 分页机制对应用程序来说是透明的 • 所有的应用程序看到的都是线性地址 • 64位下的内存组织 • 在64位模式下,结构本身支持64位线性地址空间 • 支持Intel 64结构的处理器可能只实现低于64位的地址空间
4.2.3 操作模式与存储模式 • 保护模式 • 使用所有的存储模式 • 实地址模式只在处理器处于虚拟8086模式下使用 • 实地址模式 • 只支持实地址存储模式 • 系统管理模式 • 处理器会切换到独立的地址空间 • 在这个模式下,处理器对字节寻址的方法类似于实地址模式 • 兼容模式 • 在兼容模式上执行的软件要遵循它们在32位保护模式下的各种规定 • 64位模式 • 分段被禁止的,采用的是64位平坦线性地址空间
4.3 IA-32结构保护模式下的存储管理 4.3.1保护模式与特权级概述 1.保护模式概述 在保护模式下,Intel64和IA-32结构无论在段式管理还是页式管理上都提供基于特权级的保护机制。防止应用程序越权去访问操作系统核心的代码和数据。 使用保护机制后,每次使用存储器时,在存储周期开始之前都会经历各种检查以保证正确性,任何的错误都将引起一个异常。 将CR0寄存器的PE位(位0)置1的方法使处理器进入保护模式。进入保护模式后将自动启用分段机制。 将CR0的PG位(位31)置1将启动分页机制,页级保护将自动启动。
2.特权级概述 IA-32/Intel 64处理器有4个特权级,编号从0~3,0号特权级级别最高,用于操作系统核心。1级和2级特权级多用于操作系统的服务例程,用户的应用程序一般在特权级3上运行 系统将阻止低特权级的程序访问高特权级的段,否则会产生普通保护异常(#GP)。 • 处理器会识别三类特权级。 • 当前特权级(Current privilege lebel, CPL):当前执行程序或任务的特权级,它保存在CS和SS段寄存器的位0和位1 • 描述符特权级(Descriptor privilege lebel, DPL):段或门的特权级,它存储在段或门的描述符的DPL域 • 请求特权级(Requested privilege lebel, RPL):保存在段选择符的位0和位1,处理器将它和CPL一起检查,来决定访问某个段是否被允许。
4.3.2 保护模式下的段式存储管理 1. IA-32/Intel 64段式存储管理的几种模式 • 基本平坦模型 • 操作系统和应用程序访问同一个连续的地址空间 • 至少要创建代码段描述符和数据段描述符。但这两个段描述符中的基地址都是0,段界限都是4GB。 • 不同任务或同一任务的数据段、代码段和堆栈段等在地址空间上的不同分布完全由地址偏移量来区分。 • 无法实现段的保护功能
保护平坦模型 • 类似于基本平坦模型 • 段的界限设置为只包含物理内存实际存在的范围 • 任何企图访问不存在的物理内存的行为都会产生一个普通保护异常(#GP) • 更复杂的机制可添加到保护平坦模式中来提供更多的保护。 • 页式管理机制,提供用户与系统代码和数据的隔离
多段模型 • 每个程序或任务都有自己的段描述符表和自己的段 • 段可以是指定的程序完全私有的,也可以是在程序间共享的 • 对段的访问,以及对运行在系统中的独立程序的执行环境的访问都是由硬件控制的
2. 段式管理的地址变换 31(63) 0 45(77) 32(64) 逻辑地址 段选择符的15~2位 偏移量 段基址 段描述符 段表 物理地址 32(64)位线性地址
D7 D0 段界限 7~0 0 段界限 15~8 1 基址 7~0 2 基址 15~8 3 基址 23~16 4 P DPL S TYPE 5 G D/B 段界限 19~16 L AVL 6 7 基址 31~24 3. 段描述符
D7 D0 L AVL G 段界限 19~16 D/B 操作系统可用位 1=在64位模式,0=在兼容或IA-32模式 D/B位 G=0 段长以1字节为单位 粒度位 G=1 段长以4K字节为单位 D=1 使用32位或8位操作系统和32位寻址方式 代码段(D位) D=0 使用16位或8位操作系统和16位寻址方式 D/B位 B=1 使用ESP寄存器,上限为0FFFFFFFFH 数据段(B位) B=0 使用SP寄存器,上限为0FFFFH
E=0 ED W DPL S=1 P A E=1 C R 非系统段中的第5字节 扩展方向位 数据段标志 可写位 可执行位 D7 D0 兼容位 存在位 访问位 特权位 代码段标志 可读位 S=1是非系统段 S=0是系统描述符
例1 假设段描述符访问权字节(第5字节)的内容分别是0FEH和0D6H。请说明对应段的属性。 解:① FEH=11111110B,由于S=l,E=l,因此对应段是代码段。该段有以下属性: P=1,段已映像到主存;DPL=11,特权级为3;R=l,允许读;A=0,尚未被访问。 ② D6H=11010110,由于S=1,E=0,所以对应段是数据段,该段有以下属性: P=1,段已映像到主存;DPL=10,特权级为2;W=l,允许写入;A=0,尚未被访问;ED=1,向下扩展,并且该段是堆栈段。
选择符(段寄存器) 15 2 1 0 索引 Ti RPL Ti=0 Ti=1 LDT …… …… LDT 2 2 1 1 0 0 LDT GDT 选择符 界限 界限 基址 基址 GDTR LDTR
例2 GDTR的基址和界限分别为00F00000H和0FFH,求GDT的首地址和末地址及该表含有多少个描述符? 解:GDT的首地址就是GDTR的基址,所以GDT首址为:00F00000H;界限是表末到表头的偏移量,所以GDT末址为:00F00000H+0FFH=00F000FFH;每一个描述符由8个字节组成,所以,GDT描述符个数为:GDT长度/8=(0FFH+1)/8=32。
~ ~ ~ ~ 4.3.3 保护模式下的虚拟页式存储管理 1. 页式存储管理 主存 程序1 页面 程序2 页框 程序3
2. IA-32/Intel 64页式存储管理模式 • 当CR0.PG=1且CR0.PE=1(保护模式使能)的时候,页式管理被使能,此时可用三种分页的模式中的一种 • 32位分页模式。当CR0.PG=1并且CR4.PAE=0时进入该模式。 • PAE分页模式。当CR0.PG=1, CR4.PAE=1并且IA32_EFER.LME=0时进入该模式。 • IA-32e分页模式。当CR0.PG=1, CR4.PAE=1并且IA32_EFER.LME=1时进入该模式
31 22 21 12 11 0 偏移 页目录项号 32位线性地址 页面号 低12位 CR3 32位物理地址 高20位 页表 页目录 31 12 11 9 8 7 6 5 4 3 2 1 0 页目录项 0 A US P PCD PWT D 页表基地址31~12 AVL RW G 31 12 11 9 8 7 6 5 4 3 2 1 0 页表项 A US P D PCD PWT RW AVL 页框基地址31~12 G PAT 32位分页模式下的4KB分页方式(CR4.PSE=0) P=出现位,US=用户/监督位,PCD是页Cache禁止,D=Cache“脏”位,RW=读/写位,PWT=页写贯穿位,A=访问位,AVL=用户的操作系统可用位。而第7位(PS)在4KB分页中为0
31 22 21 0 32位线性地址 偏移 页目录项号 CR3 低22位 32位物理地址 高10位 页目录 31 22 (M-19) 13 12 11 9 8 7 6 5 4 3 2 1 0 页目录项 PAT A PCD US P AVL 1 D PWT RW 页框基地址31~22 G 32位分页模式下的4MB分页方式(CR4.PSE=1) M为40和MAXPHYADDR的最小值,MAXPHYADDR是处理器支持的最大物理地址,其值在40~32之间
31 30 29 21 20 0 PDPT项号 页目录项号 偏移 32位线性地址 低21位 CR3 物理地址 高31位 页目录指针表 页目录 4×64位 512×64位 63 M (M-1) 21 20 13 12 11 9 8 7 6 5 4 3 2 1 0 页目录项 G 1 A PCD US P PAT D PWT RW AVL 2MB对齐的页框基地址 PAE分页模式下的2MB分页方式地址转换(CR4.PSE=1) 36<M<52 PAE分页模式转换32位线性地址到52位物理地址(如果某处理器只支持MAXPHYADDR(<52)位物理地址,则物理地址的MAXPHYADDR~51位为0)。M=MAXPHYADDR
31 5 4 3 2 1 0 PWT 32字节对齐的PDPT基地址 PCD CR3寄存器 63 M (M-1) 12 11 9 8 5 4 3 2 1 0 PDPT项 PWT AVL P PCD 4KB对齐的页目录基地址(高24位) 31 30 29 21 20 12 11 0 PDPT项号 页目录项号 偏移 页面号 32位线性地址 CR3 低12位 物理地址 高40位 页目录指针表 页表 页目录 4×64位 512×64位 512×64位 63 M (M-1) 12 11 9 8 7 6 5 4 3 2 1 0 0 A PCD US P PWT RW AVL 页目录项 4KB对齐的页表基地址 63 M (M-1) 12 11 9 8 7 6 5 4 3 2 1 0 G 0 A PCD US P D PWT RW AVL 页表项 4KB对齐的页框基地址 PAE分页模式下的4KB分页方式地址转换(CR4.PSE=0) 36<M<52
PML4表 63 62 52 51 M (M-1) 12 11 9 8 7 6 5 4 3 2 1 0 RW EXB A PCD P AVL PWT US AVL PML4基地址 PDPT表 63 62 52 51 M (M-1) 12 11 9 8 7 6 5 4 3 2 1 0 0 A PCD P AVL PWT RW EXB US AVL 页目录基地址 页目录项PDE(4KByte页表) 63 62 52 51 M (M-1) 12 11 9 8 7 6 5 4 3 2 1 0 US 0 0 0 A PCD P AVL PWT RW EXB AVL 页表基地址 页表(4KByte页表) 63 62 52 51 M (M-1) 12 11 9 8 7 6 5 4 3 2 1 0 G PAT D A PCD US P AVL PWT RW EXB AVL 页框基地址 IA-32e模式支持4 KB、2 MB和1GB三种不同的页面大小,PDPT.PS=1为1GB分页,PDPT.PS=0且PDE.PS=0为4 KB分页,PDPT.PS=0且PDE.PS=1为2 MB分页,CR4.PSE位被忽略。 IA-32e模式下的4KB内存分页结构项的格式
IA-32e模式下的2MB内存分页结构项的格式 PML4表 63 62 52 51 M (M-1) 12 11 9 8 7 6 5 4 3 2 1 0 RW EXB A PCD P AVL PWT US AVL PML4基地址 PDPT表 63 62 52 51 M (M-1) 12 11 9 8 7 6 5 4 3 2 1 0 0 A PCD P AVL PWT RW EXB US AVL 页目录基地址 页目录项PDE(2MB页表) 63 62 52 51 M (M-1) 21 20 13 12 11 9 8 7 6 5 4 3 2 1 0 US G 1 D A PCD P AVL PWT RW 页框基地址 EXB PAT AVL AVL
IA-32e模式下的1GB内存分页结构项的格式 PML4表 63 62 52 51 M (M-1) 12 11 9 8 7 6 5 4 3 2 1 0 RW EXB A PCD P AVL PWT US AVL PML4基地址 PDPT表 63 62 52 51 M (M-1) 30 29 13 12 11 9 8 7 6 5 4 3 2 1 0 US G 1 D A PCD P AVL PWT RW 页框基地址 EXB PAT AVL AVL
4.4 高速缓冲存储器Cache 4.1.1 Cache的工作原理与地址映射 1. Cache的工作原理
2. Cache的地址映像 1) 直接映像 主存中的每一页都映像到高速缓存中的一个固定页,而高速缓存中的每一页却对应着主存中的若干页。 这是最简单的一种映像技术,易于实现,地址变换速度快,但是不够灵活,Cache的页冲突概率高,空间利用率低。 2) 全相联映像 全相联映像技术允许主存中每一个页面映像到Cache的任何一个页面位置上,也允许采用某种替换算法从已占满的Cache中替换出任何一个旧页面。这种方式冲突概率低,可达到很高的Cache命中率,但实现起来比较困难。 3)组相联映像 将主存空间按Cache大小等分成组,再将Cache空间和主存空间中的每一组都等分成大小相同的块,使得主存中一个组内的页数与Cache中的分块数相同。各组之间是直接映像,而组内各块之间则是全相联映像。
3. Cache的读写操作 • 存储器读 • 访问页面在Cache中——直接读Cache,不读主存 • 访问页面不在Cache中—— • · 贯穿读出式:页面从主存读到Cache,再到CPU • · 旁路读出式:页面直接从主存读到CPU,而不 • 经过Cache • 存储器写 • · 写回法:写Cache页时不写主存,到下次页面修改时再写主存。 • · 写贯穿法:页面在写到Cache时同时写到主存,以保持主存与Cache的相关页的内容一致
4.4.2 IA-32的Cache结构 物理存储器 L3 Cache* 系统总线 (外部) L2 Cache 数据Cache(L1) 总线接口单元 Instruction TLBs Data TLBs 存储缓冲 指令译码器 跟踪Cache**/L1指令Cache * Intel Xeon 处理器才有 ** 跟踪Cache只有Pentium 4才有
Intel Core i7处理器的高速缓存结构 指令Cache ITLB 指令译码器和前端 乱序引擎 QPI 芯片组 STLB (2级TLB) IMC 数据TLB L2 Cache L3 Cache 数据Cache单元(L1)
Core Solo,Core Duo,Core 2,Pentium 4中L1和L2Cache行和Intel Xeon 处理器的L1 、L2和L3 Cache行都是64字节。 • 一个Cache行可以使用8个突发传送事件来填满。Cache不支持部分Cache行的填充。 • TLBs存储最近用过的页目录和页表项。他们通过降低访问主存中页表的次数来加快页表的访问。 • 处理器的Cache对软件来说基本上是透明的。 • 对Cache行为的了解有助于优化软件的性能。
4.4.3 IA-32的Caching类型 • 强不可缓存(Strong Uncacheable,UC)型:主存单元的读写不使用Cache。所有读和写都只针对主存,并且以程序的次序执行而不会重排序。 • 不可缓存(Uncacheable,UC-)型:和UC存储器具有一些相同的特征,不过这种存储器类型可以通过对WC类型存储器的MTRRs编程来撤消。 • 写组合(Write Combining,WC)型:和UC-存储器一样,主存单元的读写不使用Cache,并且处理器总线的一致性协议也没有被强制使用。
写贯穿(Write-through,WT)型:对主存的读或写操作都使用Cache。如果Cache命中,则读操作将会直接读Cache行,如果没有命中则会引起一个Cache填充事件。所有的写在可能的情况下都被写入到Cache行,并且同时写到主存中。写贯穿(Write-through,WT)型:对主存的读或写操作都使用Cache。如果Cache命中,则读操作将会直接读Cache行,如果没有命中则会引起一个Cache填充事件。所有的写在可能的情况下都被写入到Cache行,并且同时写到主存中。 • 写回(Write-back,WB)型:对主存的写和读操作都使用Cache。如果Cache命中,则读操作将会直接读Cache行,如果没有命中则会引起一个Cache填充事件。写操作被写到Cache中。被修改的Cache行,在稍后才被写到主存中。 • 写保护(Write-protected,WP)型:读操作在可能的情况下是从Cache行中读数据, 读操作没有命中Cache时会引起Cache填充。写操作被传送到内存中,而且导致在系统总线上的所有处理器中的相应Cache行变为无效。
4.4.4 IA-32的Cache一致性协议 MESI(Modified、Exclusive、Shared、Invalid)Cache一致性协议是一种写-无效监听协议。它跟踪存储器数据变化,保证了一个Cache行数据更新以后,能够和所有与它的地址有关联的存储单元保持数据的一致性。
已修改(Modified):指出Cache行数据已被更新,但该更新不会送上系统总线,因此此时的Cache行内容与主存及其它Cache的不一样。当该Cache控制器之后监听到该行再次命中,必须将修改行的数据写回存储器,以保持数据一直; • 独占(Exclusive):指出这个Cache行的数据与主存相联地址的内容一样,并且其它Cache中不包括此Cache行的内容; • 共享(Shared):指出此Cache行的内容存在于几个Cache当中,在每个相关的Cache行和存储器行里都存放了这行内容的副本; • 无效(Invalid):复位以后的无效状态,指示这一Cache行无效。