Cha7 存储器管理要求掌握
存储器管理的需求
分区管理方法
分页管理方法
分段管理方法
– 内存分配与回收
– 地址转换
– 相关数据结构存储器管理需求
重定位
– 确定程序占据的物理位置
保护
– 防止未经授权的内存访问
共享
– 允许多个进程访问内存的同一部分
逻辑组织
– 模块的组织形式
物理组织
– 内存和辅存间的信息流的组织进程的寻址要求进程控制块程序数据栈进程控制信息程序入口点栈顶分支指令访问数据程序的模块组织
可以独立编写和编译
可以分别提供保护
可以实现共享存储器分区
固定分区
动态分区
伙伴系统
重定位
64M内存的固定分区
大程序放不下
小程序浪费空间
分区数目固定操作系统 8M
8M
8M
……
8M 内部碎片 internal fragmentation
64M内存的固定分区操作系统
2M
4M
6M
8M
12M
16M
分区数目固定
内部碎片固定分区中的内存分配操作系统
2M
4M
6M
8M
12M
16M
操作系统
2M
4M
6M
8M
12M
16M
某个分区可能长期空闲动态分区操作系统 8M
56M
操作系统 8M
P1-20M
P2-14M
P3-18M
4M
操作系统 8M
P1-20M
36M
操作系统 8M
P1-20M
P2-14M
22M
动态分区操作系统 8M
P2-14M
6M
P4-8M
6M
P3-18M
4M
操作系统 8M
20M
P4-8M
6M
P3-18M
4M
操作系统 8M
P1-20M
P4-8M
6M
P3-18M
4M
操作系统 8M
P1-20M
14M
P3-18M
4M
外部碎片 external fragmentation
压缩 compaction
操作系统 8M
P2-14M
6M
P4-8M
6M
P3-18M
4M
操作系统 8M
P2-14M
P4-8M
P3-18M
16M
浪费时间
动态重定位动态分区的分配算法
首次适应算法
– 将地址最小的够用的空间分配出去
下次适应算法
– 从上次分配位置开始搜索
– 将地址最小的够用的空间分配出去
最佳适应算法
– 将够用的长度最小的空间分配出去
最差适应算法
– 将够用的长度最大的空间分配出去分配算法8M
12M
22M
18M
14M
8M
6M
14M
36M
上次分配首次适应最佳适应下次适应
6M
2M
20M
分配算法对比首次适应算法 最简单,效果最好地址低端会有大量碎片下次适应算法 没有大的空闲块经常需要压缩最佳适应算法 很多碎片经常压缩最差适应算法 没有大的空闲块碎片较少伙伴系统
1M
请求 100K A 128 256 512
请求 240K A B
请求 64K A C B
请求 256K A C B D
释放 B A C D
释放 A C D
请求 75K E C D
释放 C E D
释放 E D
释放 D
表示伙伴系统的树
A C D
重定位的硬件支持内存中的进程映象基址寄存器界限寄存器加法器比较器
PCB
程序数据栈相对地址绝对地址中断逻辑地址与物理地址相对地址用户作业内存物理地址分页内存管理方法
作业和内存按照同样大小进行分割
– 分割结果是页、页框
给作业分配所需数量的页框
– 页框不必连续
分配结果用页表来记录分页方法
a0
a1
a2
b0
b1
b2
b3
a0
b2
b3
b0
a1
b1
a2
内存作业 A
作业 B
a2
b3
页框 frame
页 page
页表 page table
15
20
22
19
21
16
18
空闲页框的列表分页方法
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
A0
A1
A2
A3
A0
A1
A2
A3
B0
B1
B2
A0
A1
A2
A3
B0
B1
B2
C0
C1
C2
C3
A0
A1
A2
A3
C0
C1
C2
C3
A0
A1
A2
A3
D0
D1
D2
C0
C1
C2
C3
D3
D4
分页方法中的数据结构
0 0
1 1
2 2
3 3
进程 A
页表
0 -
1 -
2 -
进程 B
页表
0 7
1 8
2 9
3 10
进程 C
页表
0 4
1 5
2 6
3 11
4 12
进程 D
页表逻辑地址内部碎片相对地址= 1502
0000 0101 1101 1110
逻辑地址页号= 1 偏移量= 478
000001 0111011110
0#页
1#页
2#页
478
页长 1K
分页地址转换
000001 0111011110
页号 偏移量
0 000101
1 000110
2 011001
000110 0111011110
物理地址逻辑地址页表页表寄存器
+
分段方法
a0
a1
a2
b0
b1
a0
b0
a1
b1
a2
内存作业 A
作业 B
段 segment
段表 segment table
长度 基地址长度 基地址分段方式逻辑地址段号= 1 偏移量= 752
0001 0010111100000#段
1#段
752
分段地址转换
0001 001011110000
段号 偏移量
0 0010111
01110
00000100
00000000
1 0111100
11110
00100000
00100000 0010001100010000
物理地址逻辑地址段表长度 基地址段表寄存器
+
+
分段内存管理方法
作业按逻辑含义分段,内存不分割
– 内存不事先分割
给每个段分配所需数量的连续空间
– 不同的段不必连续
分配结果用段表来记录