数据结构与算法(二) · 2014. 11. 2. · 张铭《数据结构与算法》 链表(linked list) •通过指针把它的一串存储结点链接成一个链 •存储结点由两部分组成:
第 9 章 存储器结构
description
Transcript of 第 9 章 存储器结构
湖南大学计算机与通信学院 1
第 9 章 存储器结构9.1 存储器的层次结构
9.2 Cache 存储器
9.3 虚拟存储器
9.4 基本 Cache 和虚拟存储器的扩展
9.5 实例: Pentium/Windows 个人计算机
上的内存管理
湖南大学计算机与通信学院 2
9.1 存储器的层次结构
图 9.1 一般的存储器层次
物理内存:由动态 RAM 组成。Cache存储器:由静态 RAM 构成,比 DRAM 快得多,但也 昂贵的多。 Cache 是物理内存
的部分副本。虚拟存储器:空间比物理内存大得多逻辑空间。虚拟管理器 通过在物理内存和一个存储介质
之间调度来达 到访问的目的。
湖南大学计算机与通信学院 3
哈佛结构: 计算机存储系统的 Cache 层次中,每一级 Ca
che 包含两个单独的 Cache 存储器,其中 一个是指令 Cache ,一个是数据 Cache 。
9.2 Cache 存储器 大部分计算机在 CPU 和物理内存之间包含一个
较小容量的 Cache 存储器,而不是使用 Cache 存储器构建计算机的整个存储系统。目标是在合理的价格下减少处理器的内存访问时间。
湖南大学计算机与通信学院 4
9.2.1 相联存储器
一般存储器:接收一个地址,访问该地址中的
数据。
相联存储器:并行搜索所有单元,标记那些与
特定数据 匹配的单元,然后连续
读出匹配的数据值。
湖南大学计算机与通信学院 5
考虑一个由 8个字单元组成的简单的相联存储器,每个单元有16 位,如图 9.2 所示。
除数据位外,每单元都有一个额外的标记位 V 。(数据有效位,为 1 说明这个单元数据有效,为 0 说明数据无效 ) 图 9.2 相联存储
器的内部组织结构
湖南大学计算机与通信学院 6
为了从相联存储器中读出一个值, CPU 必须给出两个值,即要被匹配的数据值、以及哪些位需要检查。第一个值是参数或数据,第二个值是屏蔽位或关键位
如果满足如下的公式,则匹配就会发生
15' '
,0
( ( ) ) 1j j i j ij
k D M V
湖南大学计算机与通信学院 7
1. 屏蔽寄存器中值为 1 的每一位,单元中的值与数据寄存器中的值都相同
2. 单元的有效位被设置为 1 ;
例如 ( 参考图 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
D M'( )D M
' '( ( )k D M
湖南大学计算机与通信学院 8
Vi 始终为 1 ,所以最终结果为:1111 1111 1111 1111 找到一个匹配
因此该数据位 M 对应的匹配寄存器的一个单元设置为 1
湖南大学计算机与通信学院 9
将数据写回相联存储器
CPU 把数据送到数据寄存器并发出写信号。相联存储器检查所有单元的有效位,并找到有效位为 0 的一个单元,如果找到,把数据存到这个单元,同时将有效位设为 1 。如果没有找到,必须采用替换算法清除一个单元来保存数据。
常见的替换算法FIFOLRURANDOM
湖南大学计算机与通信学院 10
9.2.2 相联映象的 Cache 存储器图 9.3
相对简单C
PU
的相联C
ache
64K 的 8 位内存1664 2K
湖南大学计算机与通信学院 11
图 9.3 中:
每一个单元中的前 16 位由内存地址构成,可以寻址到 64K 的地址空间。
后 8 位描述的是存储在该物理内存地址中的数据。
屏蔽寄存器只需设置一次。在上图中可以设成 1111 1111 1111 1111 0000 0000
湖南大学计算机与通信学院 12
作用于数据行或数据块的相联存储器
存储器在每个单元存储 4 个字节的数据。(如图 9.4 )
同一个单元的 4 个数据具有相同的高位地址,即高 14 位相同。
比图 9.3 中的相联存储器采用了更多的位数 ( 46 位 vs 24 位)。
湖南大学计算机与通信学院 13
图 9.4
相对简单C
PU
中,行大小
为4
字节的相联C
ache
湖南大学计算机与通信学院 14
优点:
利用了访问的局部性原理:当内存单元 X 中的指令被访问时,下一条被执行的指令非常有可能就在内存单元 X+1 中。
例如:当访问地址 0 单元的时候,整个块( 0 , 1 ,2 , 3 )的值都被从物理内存读入 CPU 。
当 CPU 下次要执行在内存单元 1 、 2 、 3 中的指令时,他们已在 cache 中即能被访问而不必从较慢的物理内存中读取。
湖南大学计算机与通信学院 15
不仅指令具有访问的局部性,数据同样也具有访问的局部性
如编译器通常将一列数组元素安排到相邻的内存单元中,以方便处理器顺序访问数据值。
湖南大学计算机与通信学院 16
9.2.3 直接映象的 Cache 存储器
一种利用标准的 SRAM 、廉价的 Cache 映射方案
物理内存Cache
深度为 1k
64k x 8 位
xxxx xx11 1111 111111 1111 1111
湖南大学计算机与通信学院 17
索引 Cache 地址的低十位,用来选择 Cache
的一个特定单元标签 原始地址中不是索引的那些高位。
直接映象的 Cache 存储器一个单元包括(图 9.5) :标签数据有效值
湖南大学计算机与通信学院 18图 9.5 相对简单 CPU 的直接映象 Cac
he
湖南大学计算机与通信学院 19
另外一种直接映像 Cache 存储器
图 9.6: 相对简单的CPU 中,行大小为 4 字节的直接映像 Cache
湖南大学计算机与通信学院 20
直接映像的 Cache 存储器 优点:
价格低容量大
缺点: 灵活性差 如前所述,物理内存中
任何形式为 xxxx xx11 1111 1111 的地址都只能 映射到 Cache 中地址为 11 1111 1111 的单元中
湖南大学计算机与通信学院 21
JUMP 1000H
JUMP 0000HJUMP 0000H
JUMP 1000H
考虑下面的代码:0000 0000 0000 0000 ( 0000H ) :JUMP 1000
H
0001 0000 0000 0000 ( 1000H ) :JUMP 0000H
直接映象 Cache
地址 00 0000 0000
湖南大学计算机与通信学院 22
第一条指令被取出放入 cache 中。基于低 10 位地址位,它被映射到 cache 单元 00 0000 0000 。标志域被设置为地址位中的 6 个高位,即 00 0000 。现在,它被执行, CPU 在单元 1000H 中取指令,它的低 10 位也为 00 0000 ,因此,它被取出并装入 cache 中,并且设置标志值为 00 0100 ,覆盖以前的值。 JUMP跳转反过来执行到单元 0000H ,这样,尽管其他cache 单元全都可用,但这两条指令仍会不断的彼此覆盖。
湖南大学计算机与通信学院 23
9.2.4 组相联映像的 cache 存储器
特点灵活性增强
减少由直接映像带来的覆盖数据的问题
采用比较便宜的 SRAMN路组相联:每个单元能够包含 N 个字节或字
直接映像的 cache 可以看作是一个一路组相联映像 cache 存储器
湖南大学计算机与通信学院 24
考察大小为 1k 的 2路组相联 cache (如图 9.7 )
该 cache 有 1k 个数据入口,每个单元 2 个数据值,因此有 512 个单元
用 9 个地址位选择 cache 单元,剩下的 7 位说明标签值 计数值用来纪录数据什么时候被访问过了
图 9.7 相对简单 CPU 的 2路组相联 cache
湖南大学计算机与通信学院 25
JUMP 1000H
JUMP 0000HJUMP 0000H
JUMP 1000H
重新考虑下面的代码:0000 0000 0000 0000 ( 0000H ) :JUMP 1000
H
0001 0000 0000 0000 ( 1000H ) :JUMP 0000H
组相联映象 cache
湖南大学计算机与通信学院 26
用在 9.2.3 的代码例子中, cache 就不会覆盖任一条指令。 JUMP 1000H 这条指令将会被取出存入 cache 单元 0 的一路中。然后,指令 0000H 将会被取出放入同一单元的另一路中。从这可以看出,指令都从 cache 取出并被连续的执行。
湖南大学计算机与通信学院 27
一种采用数据行的组相联 cache
图 9.8 相对简单 CPU 中具有 4 字节数据行的 2
路组相联 cache
湖南大学计算机与通信学院 28
9.2.5 在 cache 中替换数据
问题的引出:计算机开始执行一个程序。它从内存中取指令和数据,同时将这些值载入 cache 。当 cach
e 为 空或很少被占用时,会工作的很好。但是,最终计算机会要将数据移入到已占用的 cache
单 元。此时,将哪个数据移出cache ,以及此数据如何在保
存 到物理内存,这一问题就变得至关重要
湖南大学计算机与通信学院 29
替换策略:
1. FIFO 先进先出原则
2. LRU 近期最少使用原则
3.随机策略
湖南大学计算机与通信学院 30
1.FIFO 先进先出策略
按顺序填充相联存储器,当 cache
占满时返回最顶单元,用新数据替换原有数据
只要一个寄存器就能实现该寄存器保存下一个要被替换的单元的指针
性能好
湖南大学计算机与通信学院 31
2. LRU 近期最少使用策略
跟踪单元的访问顺序,用新的数据替换近期最少使用的数据
每个 cache 单元需要一个计数器最近访问的数据,将相应的计数器置为 0 ;其余的计数器依次加 1
湖南大学计算机与通信学院 32
例:在一个 4路组相联 cache 单元中应用 LRU策略
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
1.Cache 单元的当前状态
2.CPU 访问 D
T D C V T D C V T D C V T D C V
C c 3 1 B b 2 1 A a 1 1 D d 0 1
湖南大学计算机与通信学院 33
3.CPU 访问 E
T D C V T D C V T D C V T D C V
E e 0 1 B b 3 1 A a 2 1 D d 1 1
4.CPU 访问 A
T D C V T D C V T D C V T D C V
E e 1 1 B b 3 1 A a 0 1 D d 2 1
湖南大学计算机与通信学院 34
3.RANDOM 随机策略
随机的选择一个单元给新的数据使用
性能较好
湖南大学计算机与通信学院 35
9.2.6 写数据到 cache
写直达法每次信息从 CPU 写入 cache 单元中时,也要写回相应的物理内存单元中
回写法写入 cache 中的值并不总是被写回物理内存。仅在数据被移出cache 时写回物理内存一次
湖南大学计算机与通信学院 36
处理写失效问题
按写分配法把单元装入 cache ,然后使用写直达法或写回法把数据写到 cache
不按写分配法直接更新物理内存中的值,而不把值写回 cache
湖南大学计算机与通信学院 37
9.2.7 cache 的性能
评判性能的标准
Cache命中率要访问的数据已在 cache 中
Cache失效率要访问的数据不在 cache 中
湖南大学计算机与通信学院 38
命中率:指由 cache (而不是物理内存) 提供服务的访存百分比
平均访问时间:是 cache 访问时间 Tc 和内 存访问时间 Tp 的加权平均,权 值是 h
Tm=h Tc+(1-h) Tp
湖南大学计算机与通信学院 39
表 9.1
h Tm( 单位 ns)
0 600.1 550.2 500.3 450.4 400.5 350.6 300.7 250.8 200.9 15
1 10
Tc=10ns
Tp=60ns
结论:增加命中率能够减少平均访问时间
湖南大学计算机与通信学院 40
如何计算命中率和平均访问时间?
CPU 访问下列顺序单元:
每一个值的下标是由物理内存地址的低 3 位来描述的。
A0 B0 C2 A0 D1 B0 E4 F5 A0 C2 D1
B0 C3 C2 H7 I6 A0 B0
现在我们确定在三种不同 cache 配置下的命中率
和平均访问时间。
假设 Tc=10ns , Tp=60ns 。
湖南大学计算机与通信学院 41
一、 8 字节相联 cache
初始化为空,使用 FIFO 的替换策略。
在 18 次访问中,有 7 次命中,
命中率为 h=0.389 ,平均访问时间为 Tm=40.56ns 。
湖南大学计算机与通信学院 42
二、直接映射 cache
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? √ √ √
命中率为 h=0.167 ,平均访问时间 Tm=50.67ns
湖南大学计算机与通信学院 43
三、 8 字节的 2路组相联 cache
Cache 使用 LRU 替换策略。
命中率 h=0.389
平均访问时间 Tm=40.56ns
湖南大学计算机与通信学院 44
考虑这个同样的系统。
有 2 字节的数据行
组成相关行的数据对;
A 和 J ; B 和 D ; C 和 G ; E 和 F ; I 和H
使用相同的替换策略
(相联 cache 采用 FIFO ,组相联采用 LRU )
相同的访问时间( Tc=10ns,Tp=60ns )
湖南大学计算机与通信学院 45
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
湖南大学计算机与通信学院 46
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
湖南大学计算机与通信学院 47
9.3 虚拟存储器
存储管理单元在物理内存和较慢的存储设备间移动数据
虚拟存储器的主要实现方法:分页和分段
交换磁盘
交换文件
湖南大学计算机与通信学院 48
9.3.1 分页
页面:在分页技术中,整个逻辑地址空间被划分为连续的块叫做页面
页面的特点:1.每个页尺寸相同2.页面不可重叠,每个逻辑地址确切地属于某个页面
湖南大学计算机与通信学院 49
3.一个页面或者包含程序指令或者包含数据,不能同时包含两者
4. 可能导致内部碎片问题内部碎片:假设 MMU实现的页式
存储器中每个页面大小为 4K ,一个 4K+1 大小的程序需要 MMU 分配两个存储器页面,尽管它的第二个页面只用了 4K 单元的一个单元,这就是所谓的内存碎片
湖南大学计算机与通信学院 50
图 9.10 相对简单 CPU 一种可能的内存配置
它具有 64k 的逻辑地址空间, 16k 的物理内存,页面大小 4k
湖南大学计算机与通信学院 51
分页系统必须解决的问题:1.何时将某页移入内存?2. CPU 如何在物理内存找到数据,尤其逻辑地址和物理地址不一至的情况下?
3.当所有页框都装有页面,而 CPU需要访问的数据不在这些页面怎么办?
湖南大学计算机与通信学院 52
存储管理单元处理上述所有问题完成逻辑地址到物理地址的转换
产生缺页故障,将数据从页面装入到物理内存
产生请求页,把新的请求页移入到物理内存
湖南大学计算机与通信学院 53
图 9.11 存储器层次结构中的 MMU 配置
湖南大学计算机与通信学院 54
在处理器需要访问数据, MMU 将数据从逻辑地址装入物理地址的整个处理过程中, CPU 没有访问物理单元的任何信息
例:指令 LDAC 4324H 如何理解?答案:1.把数据从逻辑地址 4234H装入累加器 2.将逻辑单元 4234H 的数据装入累加器,
此数据实际存储在物理单元 3234H 中系统更倾向解释成 1
湖南大学计算机与通信学院 55
页表的概念MMU 用页表来跟踪哪一页存储在哪个帧中
页表的组成(如图 9.12 ):1.帧指示域 (frame)
2.有效位 (valid)
3.计数值( count, 有些页表不需要)4.脏位 (dirty)
湖南大学计算机与通信学院 56 图 9.12 ( a )为页表,( b )为对应的物理内存
相对简单 CPU的页表,有 16K的物理内存,页面大小为 4K 。
页表包含了 16个单元,每一单元对应逻辑地址空间的一个页面,它包含一个 2bit的域,表明了该逻辑页存储在哪一个页框中
每一单元还包含一个有效位
0页,对应于逻辑地址 0000H~1FFFH ,存储在 1 号页框中,
物理地址为 1000H~1FFFH
湖南大学计算机与通信学院 57
MMU 中逻辑地址到物理地址的转换
MMU 将逻辑地址看作两个部分页和偏移量
例:考虑 LDAC 4234H , MMC 如何将逻辑 地址 4234H转换成物理地址(如图 9.13 )
湖南大学计算机与通信学院 58
图 9.13 用页表将逻辑地址转换成物理地址
高 4 位逻辑地址表明页号,剩下的 12位为偏移量
四个高位为 0100
页框号 11表明页被映射到页框 3
此值与 12位的偏移量拼接,生成物理地址 11 0010 0011 0100
湖南大学计算机与通信学院 59
图 9.13 所示的 MMU 并没有很好的转换地址 ?
因为从页表中读页框号会有一个延时,并且由于取出相邻的指令,系统可能连续的成百上千次的读这一相同的值
变换旁视缓冲器可以解决上述问题(图 9.14 ),其功能跟页表一样,可产生帧值,但它更快,这样就提高了性能
湖南大学计算机与通信学院 60
图 9.14 使用 TLB转换逻辑地址到物理地址
注意 TLB 没有必要包含计数位或者脏位,因为这些信息仍然保存在页表中。
TLB 中的每一个地址入口包含在页表中,但反过来不成立
湖南大学计算机与通信学院 61
例:考虑一台含有相对简单 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)
湖南大学计算机与通信学院 62
Page TableAdress 0000H 0003H 0006H 1000H-
1064H2000H-2032H
0100H-01C8H
3000H-3064H
0000H
Page FVCD FVCD FVCD FVCD FVCD FVCD FVCD FVCD 0 0110 0110 0110 0110 0120 0110 0110 0110 1 2100 2110 2120 2130 -0-- 2 3100 3110 3120 3130 3 1100 1120 4 1100 1101 1111 1121 1131 1131 -0-- 2100
表 9.8 使用 LRU 替换算法的部分页表和 TLB 值
TLBPFV PFV PFV PFV PFV PFV PFV PFV 001 001 001 001 001 001 001 001 411 411 411 411 411 411 311 311 ---0 ---0 ---0 121 121 121 121 421 ---0 ---0 ---0 ---0 231 231 231 231
湖南大学计算机与通信学院 63
Page Table
Adress 0000H 0003H-0006H
1000H-1064H
2000H-2032H
0100H-01C8H
3000H-3064H
0000H
Page FVD FVD FVD FVD FVD FVD FVD
0 010 010 010 010 010 --0- 110
1 210 210 210 210 --0-
2 310 310 310 310
3 010 010
4 110 111 111 111 111 111 210
表 9.9 使用 FIFO 替换算法的部分页表和 TLB 值
PFV PFV PFV PFV PFV PFV PFV
001 001 001 001 001 301 301
411 411 411 411 411 411 011
---0 ---0 121 121 121 121 421
---0 ---0 ---0 231 231 231 231
湖南大学计算机与通信学院 64
9.3.1 分段
分段:在分段技术中,程序被划分为几段,每段为一个自包含的单元
分段的特点:1.每个段大小可以变化2.分段存在外部碎片问题
湖南大学计算机与通信学院 65
外部碎片:内存驻留有 3 个段,另有 8K自由空间。而这 8K 空间被划分开了,于是不移动或撤除某个当前载入段的话,大小超过 3K 的段已无法装入内存(如图 9.16 )
图 9.16 由于分段引起的物理内存外部碎片
湖南大学计算机与通信学院 66
分段机制中逻辑地址到物理地址的转换
图 9.15 分段机制中逻辑地址到物理地址的转换
逻辑地址被剖分为段号和偏移量
湖南大学计算机与通信学院 67
段号输入到段表中,如果段已被装入内存,输出段的起始地址和段大小
如果段不在物理内存中,就产生一个缺段,MMU装入新段到内存中
偏移量与段大小进行比较,如果前者大于后者,或者相等,说明所访问单元不在段内,就产生一个错误
如果偏移量有效,则与段地址的起始值相加,形成一个正确的物理内存地址
湖南大学计算机与通信学院 68
分段机制中的一个严重缺陷
在分页机制中,页号送到页表(和 TLB )以产生页框号。该值和偏移量拼接构成物理地址。而在分段机制中,通过页表或 TLB产生的起始地址要与偏移量相加,此过程消耗的时间比拼接要多得多
湖南大学计算机与通信学院 69
带分页的分段
分页和分段两种机制的结合体
在内存中不必是一个连续整块
逻辑地址被划分为三个部分1.段号 2. 页号 3. 偏移量
湖南大学计算机与通信学院 70图 9.17段页式机制中逻辑地址转换为物理地址
湖南大学计算机与通信学院 71
段页式机制中的优点:
1.不需要找一个足够大的连续块来装载整个段,物理内存的段分配相对简单
2.组成段的页可被放在物理内存的任意位置 ,减少了外部碎片
3.不再需要在段表中显式的存储段的大小 4.当明确产生页框号后,也不再需要加上偏移量来生成一个值;而是使用更快的拼接
湖南大学计算机与通信学院 72
9.3.3 存储器保护
9.4 基本的 cache 和虚拟内存的扩展
9.4.1 基本 cache 的扩展
现在大部分计算机中使用的是两级 cache :一个指令 cache 只存程序指令,一个数据 c
ache 只存数据
湖南大学计算机与通信学院 73
9.4.2 基本虚拟存储器的扩展
图 9.18 多级页表层次结构
湖南大学计算机与通信学院 74
9.5 实例: Pentium/Windows 个 人计算机上的内存管理
图 9.19 Pentium/Windows NT 的内存层次结构
湖南大学计算机与通信学院 75
9.6 总结大部分计算机的存储层次不仅仅包括物理内存,
还包括 cache 和虚拟内存。 Cache 存储器是一个介于 CPU 和物理存储器间的高速存储器; cache的一级经常置入 CPU 芯片内。 Cache 存储器可以是统一起来的,也可以分离成单独的指令 cache 和数据 cache 。 Cache 的性能很大程度上由命中率和平均访问时间决定。
Cache 存储器可使用三种映射策略中的一种。相联映射是最灵活的,但它要求使用相对昂贵的相联存储器而不是标准的静态 RAM 。直接映射灵活性少些,但也便宜些。组相联映射综合了直接映射的优点以及相联映射的某些灵活性。使用组性联的存储器使用 FIFO 、 LRU 或者是随机替换策略。
湖南大学计算机与通信学院 76
虚拟存储器使用辅存,比如磁盘,来扩展处理器可用的内存空间。它比给系统加物理内存要便宜很多,且不会严重降低系统性能。内存管理单元把处理器发布的虚拟地址映射为相应的物理地址。
一个虚拟存储器系统可使用分页或分段机制。分页系统在物理内存和虚拟内存间交换固定大小的页框。 MMU 用页表和 TLB来跟踪哪一个页框对应于每一页面。段式系统可管理不同尺寸的段。它减少了内部碎片,但引入了外部碎片。一个系统中结合这两种方法是可行的,可以用可变数目的固定长度页来构造可变大小的段。