2022年9月27日,2022年10月22日。
- 逻辑地址
- CPU 产生的地址,输入存储管理单元。一般相对于当前进程数据段的开头。
- 物理地址
- 存储单元接触的地址,从存储管理单元输出。一般相对于所有可用物理存储的开头。
- 静态重定位
- 装入作业时一次性重定位(虚拟逻辑地址→实际物理地址),程序执行前已固定。可由软件完成。
- 动态重定位
- 执行程序时(CPU 访问时)重定位,执行前还不固定。必须硬件支持。
考虑有一个可变分区系统,含有如下顺序的空闲区:10K,40K,20K,18K,7K,9K,12K和15K,若有如下的请求序列:12K,10K,9K。请分别给出采用首次适应、最佳适应和最坏适应算法时,空闲区的分配情况。
加下划线表示分配出去了,留空表示同上一行。
-
首次适应
初始 10 K 40 K 20 K … 15 K 请求 12 K 后 12 K | 28 K 请求 10 K 后 10 K 12 K | 28 K 最后 10 K 12 K | 9 K | 19 K -
最佳适应
初始 10 K 40 K 20 K 18 K 7 K 9 K 12 K 15 K 最后 10 K 9 K 12 K -
最坏适应
初始 10 K 40 K 20 K 18 K … 15 K 请求 12 K 后 12 K | 28 K 请求 10 K 后 12 K | 10 K | 18 K 最后 12 K | 10 K | 18 K 9 K | 11 K
-
碎片
地址分配后的空闲间隙。由于连续长度很小,难以分配给新进程。
-
区别
外部碎片在已分配区之外,属于空闲区;而内部碎片在已分配区之内,只是进程并未真正使用这些存储区域。
-
概念
一块存储空间较小,但能并行高速访问的硬件缓存。快表保存了一些键值对,键是逻辑页号,值是相应物理页框号。
-
作用
快表保存了常用页的地址映射,命中时可将内存访问次数从两次降低为一次(不用再访问页表),加快访问。
某系统采用页式(Paging)存储管理策略,拥有逻辑空间32页,每页2KB;拥有物理空间1MB。
<5位页号><11位页内偏移>
共 32 页,故 32 项。
物理空间
项数不变,位数减一。
一个进程在执行过程中,按如下顺序依次访问各页:0,1,7,2,3,2,7,1,0,3,2,5,1,7。若进程分得四个主存块,在分别采用FIFO、LRU和OPT算法时,分别产生多少次缺页中断?假设进程开始运行时,主存没有页面。
留空表示同上一行。每一行是请求完成后的主存状况。
请求 | 主存块1 | 主存块2 | 主存块1 | 主存块1 |
---|---|---|---|---|
0 | 0 | (空闲) | (空闲) | (空闲) |
1 | 1 | |||
7 | 7 | |||
2 | 2 | |||
3 | 3 | |||
2 | (命中) | |||
7 | (命中) | |||
1 | (命中) | |||
0 | 0 | |||
3 | (命中) | |||
2 | (命中) | |||
5 | 5 | |||
1 | 1 | |||
7 | 7 |
出现 9 次数字,故发生 9 次缺页中断。
请求 | 主存块1 | 主存块2 | 主存块1 | 主存块1 |
---|---|---|---|---|
0 | 0 | (空闲) | (空闲) | (空闲) |
1 | 1 | |||
7 | 7 | |||
2 | 2 | |||
3 | 3 | |||
2 | (命中) | |||
7 | (命中) | |||
1 | (命中) | |||
0 | 0 | |||
3 | 3 | |||
2 | 2 | |||
5 | 5 | |||
1 | 1 | |||
7 | 7 |
11 次。
请求 | 主存块1 | 主存块2 | 主存块1 | 主存块1 |
---|---|---|---|---|
0 | 0 | (空闲) | (空闲) | (空闲) |
1 | 1 | |||
7 | 7 | |||
2 | 2 | |||
3 | 3 | |||
2 | (命中) | |||
7 | (命中) | |||
1 | (命中) | |||
0 | 0 | |||
3 | (命中) | |||
2 | (命中) | |||
5 | 5 | |||
1 | (命中) | |||
7 | 7 |
8 次。
结尾5、7缺页时,有多种选择。
请求分页管理系统中,假设某进程的页表内容见下表。
页号 页框(Page Frame)号 有效位(存在位) 0 101H 1 1 0 2 254H 1 页面大小为 4 KB,一次内存的访问时间为 100 ns,一次快表(TLB)的访问时间为 10 ns,处理一次缺页的平均时间为 10^8^ ns(已含更新 TLB 和页表的时间),进程的驻留集大小固定为 2,采用最近最少使用置换算法(LRU)和局部淘汰策略。假设
- TLB 初始为空;
- 地址转换时先访问 TLB,若 TLB 未命中,再访问页表(忽略访问页表之后的 TLB 更新时间);
- 有效位为0表示页面不在内存,产生缺页中断,缺页中断处理后,返回到产生缺页中断的指令处重新执行。
设有虚地址访问序列2362H、1565H、25A5H,请问:
- 依次访问上述三个虚地址,各需多少时间?给出计算过程。
- 基于上述访问序列,虚地址1565H的物理地址是多少。请说明理由。
页面大小为 4 KB,故页内偏移有 12 位,相当于三位十六进制数。
-
访问时间
-
2362H
逻辑页号为 2。访问快表未命中(10 ns),访问页表并命中(100 ns),向快表添加 2 号页(忽略),访问内存(100 ns)——共 210 ns。
此时快表中只有 2 号页,页表不变。
-
1565H
逻辑页号为 1。访问快表未命中(10 ns),访问页表未命中(100 ns),缺页中断(10^8^ ns),访问内存(100 ns)——共 10^8^ ns + 210 ns。
此时快表、页表中都是 1、2 号页。
重来时无需再访问快表。
-
25A5H
逻辑页号为 2。访问快表并命中(10 ns),访问内存(100 ns)——共 110 ns。
-
-
1565H的物理地址
缺页中断时,因为“驻留集大小固定为 2”,需淘汰一页。按 LRU,0 号比 2 号久远,淘汰 0 号,置换为 1 号,故 1 号页的页框号是 101H。
因此 1565H 的物理地址是 101 565H。
一个请求分页管理系统中,内存的读写周期为8ns,当配置有快表时,查找快表需要1ns,内、外存之间传送一个页面的平均时间为5000ns。假定快表的命中率为75%,页面失效率为10%,求内存的有效存取时间。
flowchart LR
访问快表[访问快表<br>1 ns] -->|"hit<br>90% × 75%"| 访问内存[访问内存<br>8 ns]
访问快表 -->|"miss<br>90% × 25% + 10%"| 访问页表[访问页表<br>8 ns] -->|"hit<br>90% × 25%"| 访问内存
访问页表 -->|miss<br>10%| 传送页面[传送页面<br>5,000 ns] --> 重来
subgraph 重来
direction LR
更新页表_[更新页表<br>8 ns] --> 访问内存_[访问内存<br>8 ns]
end
标的百分比是联合概率,不是条件概率。
缺页率 10% 是总的缺页比例,分母不只包括没命中快表的那些,还包括命中了快表的。
快表命中率 75% 是有效页面中的命中率,分母不包括缺页的。
有效存取时间由四类操作贡献。
-
访问快表(仅指初次):1 ns,必然存在。期望为 1 ns。
-
访问页表:8 ns,
$(1-10%) \times (1 - 75%) + 10% = 32.5%$ 可能存在。期望为 2.6 ns。 -
访问内存:8 ns,
$1 - 10% = 90%$ 可能存在。期望为 7.2 ns。 -
传送页面和重来:$\SI{5,000}{ns} + \SI{8}{ns} + \SI{8}{ns} = \SI{5,016}{ns}$,
$10%$ 可能存在。期望为 501.6 ns。快表也要更新,但参考答案认为它与页表同时更新,故不再计入时间。
有效存取时间为四类操作期望之和,即 512.4 ns。
若允许并行访问快表、页表,则除了命中快表的情况(第一个hit
,概率为 90% × 75% = 67.5%),“访问快表”都不再计入时间,最终减少时间的期望是