600 likes | 821 Views
第九章 存储层次. 9.1 存储器的层次结构 9.2 Cache 存储器 9.3 虚拟存储器 9.4 基本 Cache 和虚拟存储器的扩展 9.5 实例: Pentium/Windows 个人计算机 上的内存管理. 同济大学 软件学院. 9.1 存储器的层次结构. 图 9.1 一般的存储器层次. 物理内存: 由动态 RAM 组成。 Cache 存储器: 由静态 RAM 构成,比 DRAM 快得多,但也 昂贵的多。 Cache 是物理内存的部分副本。 虚拟存储器: 空间比物理内存大得多的逻辑空间。.
E N D
第九章 存储层次 9.1 存储器的层次结构 9.2 Cache存储器 9.3 虚拟存储器 9.4 基本Cache和虚拟存储器的扩展 9.5 实例:Pentium/Windows个人计算机 上的内存管理 同济大学 软件学院
9.1 存储器的层次结构 图9.1 一般的存储器层次 物理内存:由动态RAM组成。 Cache存储器:由静态RAM构成,比DRAM快得多,但也 昂贵的多。Cache是物理内存的部分副本。 虚拟存储器:空间比物理内存大得多的逻辑空间。
9.2 Cache存储器 目标:弥补主存速度的不足 9.2.1 相联存储器 ◆ 一般存储器 接收一个地址,访问该地址中的数据。 ◆ 相联存储器:按内容访问的存储器。 并行搜索所有单元,标记那些与特定数据匹 配的单元,然后连续读出匹配的数据值。
2. 读数据 CPU必须给出两个值: ◆ 第一个值:要被匹配的数据值(参数或数据) ◆ 第二个值:哪些位需要检查(屏蔽位或关键位) 如果满足如下的公式,则匹配就会发生
例如(参考图9.2): 屏蔽寄存器K 1111 0000 0000 0000 数据寄存器D 1010 XXXX XXXX XXXX 数 据 位M 1010 1101 0000 0111 执行 0000 XXXX XXXX XXXX 执行 1111 XXXX XXXX XXXX 执行 1111 1111 1111 1111
3. 将数据写回相联存储器 CPU把数据送到数据寄存器并发出写信号。相联存储器检查所有单元的有效位,并找到有效位为0的一个单元,如果找到,把数据存到这个单元,同时将有效位设为1。如果没有找到,必须采用替换算法清除一个单元来保存数据。
常见的替换算法 • FIFO • LRU • RANDOM 9.2.2 相联映象的Cache存储器
64K 8位内存
9.2.3 直接映象的Cache存储器 一种利用标准的SRAM、廉价的Cache映射方案。
◆索引 Cache地址的低位,用来选择Cache的一个特定单元。 ◆标识 原始地址中不是索引的那些高位。 设M=2m,则当表示为二进制数时,j 实际 上就是i 的低m 位: i: j m位 i:主存地址 j:Cache地址
◆相对简单的CPU中,块大小为4字节的直接映像Cache◆相对简单的CPU中,块大小为4字节的直接映像Cache
◆考察大小为1k的2路组相联cache 组数 该cache有1k个数据入口,每个单元2个数据值,因此有512个单元 用9个地址位选择cache单元,剩下的7位说明标识值 计数值用来纪录数据什么时候被访问过了
◆相对简单CPU中具有4字节数据行的2路组相联cache◆相对简单CPU中具有4字节数据行的2路组相联cache
9.2.5 在cache中替换数据 问题的引出: 当cache已满时,又有新数据要调入cache,需 将哪个数据移出cache。 FIFO 先进先出原则 LRU 近期最少使用原则 随机策略
例:在一个4路组相联cache单元中应用LRU策略 1. Cache单元的当前状态 T D C V T D C V T D C V T D C V C c 2 1 B b 1 1 A a 0 1 - - - 0 2. CPU访问D C c 3 1 B b 2 1 A a 1 1 D d 0 1 3. CPU访问E E e 0 1 B b 3 1 A a 2 1 D d 1 1 4. CPU访问A E e 1 1 B b 3 1 A a 0 1 D d 2 1
9.2.6 写数据到cache • 写直达法 每次信息从CPU写入cache单元中时,也要 写回相应的物理内存单元中 • 回写法 写入cache中的值并不总是被写回物理内 存。仅在数据被移出cache时写回物理内存。
处理写失效问题 按写分配法 把单元装入cache,然后使用写直达法或 写回法把数据写到cache 不按写分配法 直接更新物理内存中的值,而不把值写回 Cache。
9.2.7 cache的性能 1. 评判性能的标准 ◆ 命中率与失效率 Cache命中率:CPU访问Cache时,在Cache中找到 数据的概率。 Cache失效率:CPU访问Cache时,在Cache中找不 到数据的概率。 ◆ 平均访问时间 Tm=h Tc+ (1-h) Tp
Tc = 10ns Tp = 60ns 结论:增加命中率 能够减少平均访问 时间
2. 如何计算命中率和平均访问时间? 例:CPU访问下列顺序单元: 每一个值的下标是由物理内存地址的低3位来描述的。 A0 B0 C2 A0 D1 B0 E4 F5 A0 C2 D1 B0 G3 C2 H7 I6 A0 B0 现在我们确定在三种不同cache配置下的命中率 和平均访问时间。 假设: Tc=10ns Tp=60ns
◆8字节相联cache 初始化为空,使用FIFO的替换策略。 访问: 18次 命中:7次 命中率:h=0.389 平均访问时间:Tm=40.56ns
Data A B C A D B E F A C D B G C H I A B 0 A B B A A B B B A A A B B B B B A B C 1 D D D D D D D D D D D D D D A 2 C C C C C C C C C C C C C C C C C 3 G G G G G G H 4 E E E E E E E E E E E E E 5 F F F F F F F F F F F 6 | | | 7 H H H H Hit? √ √ √ ◆ 直接映射cache 命中率:h=0.167 平均访问时间:Tm=50.67ns
◆8字节的2路组相联cache Cache使用LRU替换策略。 命中率:h = 0.389 平均访问时间:Tm = 40.56ns
考虑这个同样的系统。 有2字节的数据行 组成相关行的数据对; A和J;B和D;C和G;E和F;I和H 使用相同的替换策略 (相联cache采用FIFO,组相联采用LRU) 相同的访问时间(Tc=10ns,Tp=60ns)
Data A B C A D B E F A C D B G C H I A B A A A A A A A A A A A A A A | | | | C J J J J J J J J J J J JJ J J H H H H A B B B B B B B B B B B B B B B A A C D D D D D D D D D D D D D D D J J H C C C C C C C C C C C C C C C B E G G G G G G G G G G G G G G G D E E E E E E E E E E E E F F F F F F F F F F F F Hit? √ √ √ √ √ √ √ √ √ √ √ 相联cache:命中率h=0.611 平均访问时间Tm=29.44ns
Data A B C A D B E F A C D B G C H I A B 0 A B B A B B B B A A B B B B B B A B C 1 J D D J D D D D J J D D D D D D J D A 2 C C C C C C C C C C C C C C C C C 3 G G G G G G G G G G G G G G G G H 4 E E E E E E E E E E E E E 5 F F F F F F F F F F F F 6 | | | 7 H H H H Hit? √ √ √ √ √ √ √ 直接映射cache:h=0.389 Tm=40.56ns
9.3 虚拟存储器 交换磁盘 交换文件 存储管理单元 在物理内存和较慢的存储设备间移动数据 虚拟存储器的主要实现方法:分页和分段
9.3.1 分页 页面:在分页技术中,整个逻辑地址空间被划分为连续的块叫做页面 页面的特点: • 每个页尺寸相同 • 页面不可重叠,每个逻辑地址确切地 属于某个页面
一个页面或者包含程序指令或者包含数据,不能同时包含两者一个页面或者包含程序指令或者包含数据,不能同时包含两者 4. 可能导致内部碎片问题 内部碎片:假设MMU实现的页式存储器中每个页面大小为4K,一个4K+1大小的程序需要MMU分配两个存储器页面,尽管它的第二个页面只用了4K单元的一个单元,这就是所谓的内存碎片
图9.10 相对简单CPU一种可能的内存配置 它具有64k的逻辑地址空间,16k的物理内存,页面大小4k
分页系统必须解决的问题: • 何时将某页移入内存? • CPU如何在物理内存找到数据,尤其逻辑地址和物理地址不一至的情况下? • 当所有页框都装有页面,而CPU需要访问的数据不在这些页面怎么办?
存储管理单元处理上述所有问题 完成逻辑地址到物理地址的转换 产生缺页故障,将数据从页面装入到物理内存 产生请求页,把新的请求页移入到物理内存
在处理器需要访问数据,MMU将数据从逻辑地址装入物理地址的整个处理过程中,CPU没有访问物理单元的任何信息在处理器需要访问数据,MMU将数据从逻辑地址装入物理地址的整个处理过程中,CPU没有访问物理单元的任何信息 例:指令 LDAC 4324H如何理解? 答案: • 把数据从逻辑地址4234H装入累加器 • 将逻辑单元4234H的数据装入累加器,此数据实际存储在物理单元3234H中 系统更倾向解释成1
页表的概念 MMU用页表来跟踪哪一页存储在哪个帧中 页表的组成(如图9.12): 帧指示域(frame) 有效位(valid) 计数值(count,有些页表不需要) 脏位(dirty)
0页,对应于逻辑地 址0000H~1FFFH, 存储在1号页框中,物理地址为1000H~1FFFH 相对简单CPU的页表,有16K的物理内存,页面大小为4K。 页表包含了16个单元,每一单元对应逻辑地址空间的一个页面,它包含一个2bit的域,表明了该逻辑页存储在哪一个页框中 每一单元还包含一个有效位 图9.12 (a)为页表,(b)为对应的物理内存
MMU中逻辑地址到物理地址的转换 MMU将逻辑地址看作两个部分 页和偏移量 例:考虑LDAC 4234H,MMC如何将逻辑 地址4234H转换成物理地址(如图9.13)
高4位逻辑地址表明页号,剩下的12位为偏移量 四个高位为0100 页框号11表明页被映射到页框3 此值与12位的偏移量拼接,生成物理地址11 0010 0011 0100 图9.13 用页表将逻辑地址转换成物理地址
图9.13所示的MMU并没有很好的转换地址? 因为从页表中读页框号会有一个延时,并且由于取出相邻的指令,系统可能连续的成百上千次的读这一相同的值 变换旁视缓冲器可以解决上述问题(图9.14),其功能跟页表一样,可产生帧值,但它更快,这样就提高了性能
注意TLB没有必要包含计数位或者脏位,因为这些信息仍然保存在页表中。注意TLB没有必要包含计数位或者脏位,因为这些信息仍然保存在页表中。 TLB中的每一个地址入口包含在页表中,但反过来不成立 图9.14 使用TLB转换逻辑地址到物理地址
例:考虑一台含有相对简单CPU,相同内存配置的计算机。它必须取、翻译和执行下列程序 (如表9.8) 0000H: LDAC 4234H 0003H: STAC 4235H 0006H: JUMP 1000H 1000-1063H: (100 register instructions) 1064H: JUMP 2000H 2000H-2031H: (50 register instructions) 2032H: JUMP 0100H 0100H-01C7H: (200 register instructions) 01C8H: JUMP 3000H 3000H-3063H: (100 register instructions) 3064H: JUMP 0000H 4234H: 27H(data value)
9.3.1 分段 分段:在分段技术中,程序被划分为几段,每段为一个自包含的单元 分段的特点: • 每个段大小可以变化 • 分段存在外部碎片问题
外部碎片:内存驻留有3个段,另有8K自由空间。而这8K空间被划分开了,于是不移动或撤除某个当前载入段的话,大小超过3K的段已无法装入内存(如图9.16)外部碎片:内存驻留有3个段,另有8K自由空间。而这8K空间被划分开了,于是不移动或撤除某个当前载入段的话,大小超过3K的段已无法装入内存(如图9.16) 图9.16由于分段引起的物理内存外部碎片
分段机制中逻辑地址到物理地址的转换 逻辑地址被剖分为段号和偏移量 图9.15 分段机制中逻辑地址到物理地址的转换