存储系统
- D R A M DRAM DRAM对地址线采用复用技术,地址线是原先的 1 2 , 地 址 信 号 分 行 、 列 两 次 传 送 \frac{1}{2},地址信号分行、列两次传送 21,地址信号分行、列两次传送
- C a c h e Cache Cache - 主存系统的效率: e e e = 访问 C a c h e Cache Cache的时间 / / / 平均访存时间
- D R A M DRAM DRAM按行刷新,不需要选片,所有芯片同时被刷新,一次完整的刷新周期需要一个存储周期
- 多模块存储器
- 单体多字存储器
- 多体并行存储器
- 高位交叉编址
M0 M1 M2 M3 0 n 2 n 3 n 1 n + 1 n + 2 n + 3 . . . . . . . . . . . . n 2 n − 1 3 n − 1 4 n − 1 \begin{array}{c|c|c|c} \text{M0} & \text{M1} & \text{M2} & \text{M3} \\ \hline 0 & n & 2n & 3n \\ 1 & n+1 & n+2 & n+3 \\ ... & ... & ... & ... \\ n & 2n-1 & 3n-1 & 4n-1 \end{array} M001...nM1nn+1...2n−1M22nn+2...3n−1M33nn+3...4n−1- 采用高位交叉编址的存储器仍是顺序存储器
- 高位体号,低位体内地址
- 无法实现局部性原理
- 低位交叉编制
M0 M1 M2 M3 0 1 2 3 4 5 6 7 . . . . . . . . . . . . 4 n − 4 4 n − 3 4 n − 2 4 n − 1 \begin{array}{c|c|c|c} \text{M0} & \text{M1} & \text{M2} & \text{M3} \\ \hline 0 & 1 & 2 & 3 \\ 4 & 5 & 6 & 7 \\ ... & ... & ... & ... \\ 4n-4 & 4n-3 & 4n-2 & 4n-1 \end{array} M004...4n−4M115...4n−3M226...4n−2M337...4n−1- 高位体内地址,低位体号(P117.8)
- 所以确定比如 8005 8005 8005所在的存储模块的时候看的是低位
- 可以采用流水线技术
- 为了实现流水线技术,要保证存储器交叉模块数 m ≥ T / r m \ge T/r m≥T/r, r r r是总线传送周期,&T&是模块存取一个字的存取周期
- 连续存取
m
m
m个字所需时间:
t
1
=
T
+
(
m
−
1
)
r
t_1 = T + (m - 1)r
t1=T+(m−1)r
- 模块序号 = 访存地址(8005) % m m m(P117.7)
- 判断是否访存冲突:给定的访存地址在连续 m m m次访问中是否在同一存储模块内(P117.7)
- 可以实现局部性原理
- 一个存储周期能提供一行数据,但是即使本行只有1个数据,那也需要一个周期
- 比如
0
X
804001
A
0X804001A
0X804001A,最低两位是
10
10
10,从编号为
2
2
2的存储体开始存储,占用三个行,需要三个存储周期(P117.8)
M0 M1 M2 M3 × × × × . . . . . . . . . . . . × × 0 1 2 3 4 5 6 7 × × . . . . . . . . . . . . \begin{array}{c|c|c|c} \text{M0} & \text{M1} & \text{M2} & \text{M3} \\ \hline \times & \times & \times & \times \\ ... & ... & ... & ... \\ \times & \times & 0 & 1 \\ 2 & 3 & 4 & 5 \\ 6 & 7 & \times & \times \\ ... & ... & ... & ... \end{array} M0×...×26...M1×...×37...M2×...04×...M3×...15×...
- 比如
0
X
804001
A
0X804001A
0X804001A,最低两位是
10
10
10,从编号为
2
2
2的存储体开始存储,占用三个行,需要三个存储周期(P117.8)
- 高位体内地址,低位体号(P117.8)
- 高位交叉编址
- C P U CPU CPU与 C a c h e Cache Cache之间的数据交换以机器字长为单位; C a c h e Cache Cache与主存之间的数据交换以 C a c h e Cache Cache块为单位
-
C
a
c
h
e
Cache
Cache与主存的映射
- 数据存放到
C
a
c
h
e
Cache
Cache的位置
- 直接映射:主存数据只能存放到
C
a
c
h
e
Cache
Cache内的固定位置
- 主存标记字块 | C a c h e Cache Cache地址字块 | 字块内地址
- 主存标记位 | C a c h e Cache Cache块号 | 块内地址
- 全相联映射:主存数据可存入
C
a
c
h
e
Cache
Cache的任何位置
- 主存标记字块 | 字块内地址
- 组相联映射:主存数据可存入
C
a
c
h
e
Cache
Cache的固定某块内的任意位置
- 主存标记字块 | 组地址 | 字块内地址
- 直接映射:主存数据只能存放到
C
a
c
h
e
Cache
Cache内的固定位置
- 数据存放到
C
a
c
h
e
Cache
Cache的位置
-
C
a
c
h
e
Cache
Cache写策略:写回的是主存
- 写命中
- 全写法
- 写命中时,同时写入 C a c h e Cache Cache和主存
- 某块需要替换,直接覆盖,不用写回
- 格式:替换控制位( × \times ×) - 有效位(1)
- 写回法
- 写命中时只修改 C a c h e Cache Cache内容,不立即写回主存
- 某块需要替换,写回主存
- 格式:替换控制位( × \times ×) - 脏位(1) - 有效位(1)
- 关于附加位
- 替换控制位:如果是 L R U LRU LRU替换算法,那么取决于 C a c h e Cache Cache的组相连路数。 2 k 2^k 2k路组相连需要 k k k位替换控制位( L R U LRU LRU位)
- 脏位:修改位( 1 1 1位),为 1 1 1需要写回内存
- 有效位
- 全写法
- 写不命中
- 写分配法
- 加载主存中的块到 C a c h e Cache Cache,然后更新此 C a c h e Cache Cache块
- 非写分配法
- 只写回主存,不调入 C a c h e Cache Cache块
- 写分配法
- 写命中
- 虚拟地址 ->
T
L
B
TLB
TLB地址:
- 虚拟地址 = 虚页号 + 页内偏移
- 虚页号 = T L B TLB TLB标记 + T L B TLB TLB组索引
-
T
L
B
TLB
TLB、
C
a
c
h
e
Cache
Cache、
P
a
g
e
s
Pages
Pages共存的系统中的访问顺序,看是否命中
- C P U CPU CPU给出虚拟地址(虚页号 + 页内地址偏移)
- 虚页号作为
T
a
g
Tag
Tag到
T
L
B
TLB
TLB中查找内容
- 如果找到
- 得到 T L B TLB TLB中的实页号,再拼接页内地址偏移,得到实际物理地址(主存标记字块 | C a c h e Cache Cache块号 | 块内地址)
- 以直接映射 C a c h e Cache Cache为例,根据得到的物理地址(主存标记字块 | C a c h e Cache Cache块号 | 块内地址),对其进行解析,得到 C a c h e Cache Cache块号,进入块内查看数据,如果有效位为 1 1 1,则采用数据,否则说明未命中
- 如果没找到
- 没找到说明发生了 T L B TLB TLB缺失,转到 P a g e s Pages Pages中查找虚页号匹配项,得到实页号,拼接上页内偏移地址得到实际物理地址
- 根据得到的物理地址(主存标记字块 | C a c h e Cache Cache块号 | 块内地址),到对应 C a c h e Cache Cache块内寻找,看是否命中,未命中就调页
- 如果找到
- 寻址过程
- 逻辑地址-> T L B TLB TLB成功->物理地址-> D a t a C a c h e Data Cache DataCache成功-> V a l u e Value Value
- 逻辑地址-> T L B TLB TLB成功->物理地址-> D a t a C a c h e Data Cache DataCache失败->访问主存-> V a l u e Value Value
- 逻辑地址-> T L B TLB TLB失败->Pages成功->物理地址-> D a t a C a c h e Data Cache DataCache成功-> V a l u e Value Value
- 逻辑地址-> T L B TLB TLB失败->Pages成功->物理地址-> D a t a C a c h e Data Cache DataCache失败->访问主存-> V a l u e Value Value
- 逻辑地址-> T L B TLB TLB失败->Pages失败->缺页中断
- 缺页中断
- 内部中断:在一条指令的执行期间产生
- 中断后重新执行指令
- 重新执行:就和什么都没有发生过一样,重做一遍
- 比如缺页中断要
20
m
s
20ms
20ms,访存要
1
μ
s
1\mu s
1μs,发生了缺页中断:
- 时间总和:( 1 μ s + 20 m s 1\mu s + 20ms 1μs+20ms) + ( 1 μ s + 1 μ s 1\mu s + 1\mu s 1μs+1μs)
- (查找 P a g e s Pages Pages + 中断) + (再次以不缺页执行:查找 P a g e s Pages Pages + 访问主存)
- 操作系统的可能行为
- 修改页表(置换页)
- 磁盘 I / O I/O I/O
- 分配页框(分配内存)
- 虚拟存储器
- 最大容量与主存和外存容量无关,只与地址线位数有关
- 扩充内存方法:调入调出
- 调入调出基本方法:覆盖与交换
- 外存空间
- 文件区:离散分配
- 交换区:连续分配
- 工作集与驻留集
- 工作集:去重后的窗口
- 工作集窗口大小为 Δ \Delta Δ,时间为 t t t
- 当前窗口内内容为 2 , 3 , 5 , 3 , 2 {2, 3, 5, 3, 2} 2,3,5,3,2
- 工作集为 2 , 3 , 5 {2, 3, 5} 2,3,5
- 驻留集:某进程分配到的物理页框集合
- 局部与全局:
- 局部:针对某一进程的操作不影响其他进程
- 全局:一个进程得到的物理块多了,会影响其他进程
- 分配策略:
- 固定分配,局部置换
- 可变分配,全局置换
- 可变分配,局部置换
- 局部与全局:
- 工作集:去重后的窗口
- 1号页面被换出 x x x号物理块(页框),则2号换入的页面仍在 x x x号物理块(页框)