一、内存管理的重要性(需求)
- 重定位:为程序确定在内存中的区域
- 进程保护:本进程之外的其他进程一般情况下无法修改本进程数据
- 共享:不同几进程允许访问相同的共享区域
- 逻辑组织:e.g. 只读、只写、可读可写
- 物理组织:程序数据等分配到内存
二、内存分区
1、固定分区
-
基本假定:操作系统占据内存中固定的部分,内存中的其余部分则供多个用户进程使用
-
固定分区就是把内存空间划分为若干边界固定的区域
-
使用大小相等的固定分区
-
缺点:
- 程序可能太大不能放到一个分区中
- 内存利用率底
-
-
放置算法
-
大小相等的固定分区:只要存在可用的分区就放进去
-
不等的分区:贪心算法放置
- 优点:分区方案简单、系统开销小、具有一定的灵活性
- 缺点:
- 分区的数量在系统生成阶段已经确定,限制了活动进程的数量
- 进程可能在运行时动态扩展内存,分区的大小限制死了进程的活动
-
2、动态分区
-
分区的长度和数量可变
-
缺点:
- 产生许多的外部碎片(克服:压缩)
- 但压缩十分消耗系统资源、且有重定位的问题需要解决
-
放置算法:
- 最佳适配:选择与要求最接近的块
- 首次适配:选择大小足够的第1个可用块
- 下次适配:从上次放置的地方开始扫描内存,选择下一个大小足够的块
3、伙伴系统
- 是较为合理的折中方案,克服了固定分区和动态分区的缺陷
4、重定位
- 考虑相对地址:(1)基址寄存器中的值加上相对地址产生绝对地址;(2)检验绝对地址是否合法
三、分页
-
内存划分为大小固定、相等的(较小)块,每个进程也被划分成同样大小的块,那么进程中的页就可以分配到内存中的页框
-
每个进程在内存中浪费的空间,仅仅是进程最后一页的一小部分形成的内部碎片,没有任何外部碎片
-
每个逻辑地址包括一个页号和在该页中的偏移量。处理器知道如何访问当前进程的页表(页表给出了该进程的每页所对应页框的位置),给出逻辑地址后,处理器使用页表产生物理地址
-
分页与固定分区不同在于:
- 分页所使用的分区很小
- 一个程序可以占据多个分区
- 这些分区不需要是连续的
四、分段
- 分段的逻辑地址由段号和偏移量组成
- 段有最大值限制,但并不要求所有程序的所有段的长度都相等
- 与动态分区不同:分段方案中,程序可以占据多个分区,且不要求连续,会产生较小的外部碎片
- 段表除了维护起始地址和偏移地址之外,还维护各段的长度