“本总结参考MOOC上华中科技大学苏曙光老师的操作系统课程”
1.分区内存管理
单一区存储管理
分区存储管理
固定分区
动态分区
单一分区管理:用户区不分区,完全被一个程序占用,例如DOS;
优点是简单,不需要复杂硬件支持,适用于单用户单任务OS;
缺点是程序运行占用整个内存,即使小程序也是如此;
分区存储管理指的是把用户区内存划分为若干个大小不等的分区,供不同程序使用,适合单用户单任务系统;
分类有固定分区和动态分区;
**固定分区:**把内存固定地划分为若干个大小不等的分区供各个程序使用。每个分区的大小和位置都固定,系统运行期间不再重新划分。
分区表:记录分区的位置、大小个使用标志
固定分区的使用特点是:
(1)在程序装入前,内存已被分区,不再改变;
(2)每个分区大小不同,使用不同大小的程序;
(3)系统要维护分区表
缺点是:
浪费内存:程序比所在分区小
大程序可能无法运行:程序可能必最大分区大
动态分区指的是在程序装入时创建分区,使分区的大小刚好与程序的大小相等;
特点是分区动态建立,缺点在于,当四个程序运行完毕,而其他两个程序没有运行完毕,运行完毕的两个程序准备退出时,另两个程序准备加入内存时内存不匹配而导致产生内存碎片
特点:分区的个数和大小均可变;存在内存碎片。
2.分区防止策略
空闲区表:描述内存空闲区的位置和大小的数据结构
分区的分配:分配过程
(1)从空闲区表的第1个区开始,寻找>=s的空闲区
(2)找到后从分区表中分割出大小为s的部分给用户使用;
(3)分割后的剩余部分仍然登记在空闲区表中(分割空闲区时一般从底部分割)
空闲区表如何排序——放置策略
(1)首次适应法:空闲区表按首址递增排序
特点/优点:
尽可能先使用低地址空间;
当需要较大分区时在高地址空间有较大的满足可能性;
(2)最佳适应法:空闲区表按大小递增排序
特点:尽可能先使用较小的空闲区,保留大的空闲区;
当需要较大分区时有较大的满足可能性。
(3)最坏适应法:空闲区表按大小递增排序
优点:大空闲区分割后剩下部分还是很大,还能装下较大的程序
特点:仅作一次查找就可以找到所要分区;
分区的回收
回收算法:要考虑释放区与现有分区是否相邻,若相邻则与空闲区合并后更新空闲区表,若不相邻,则直接插入空闲区表;
3.内存覆盖技术
覆盖——Overlay
目的:在较小的内存空间运行较大的程序
内存分区:
常驻区:被某段单独且固定地占用,可划分为多个
覆盖区:能被多段共用(覆盖),可划分为多个
覆盖的缺点:
(1):编程复杂,程序员划分程序模块并确定覆盖关系;
(2):程序执行时间长:从外存装入内存耗时
4.内存交换技术
原理:内存不够时把程序写到磁盘(换出/Swap out)
当进程要运行时重新写会内存(换入/Swap in)
优点:增加进程并发数;不考虑程序结构。
缺点:换入和换出增加CPU开销;交换单位太大(整个进程)
需要考虑的问题:
减少交换传送的信息量(模块/段);
外存交换空间的管理方法;
程序换入时的地址重定位。
模块A换入到内存:
原来位置:
优点:程序简单;
问题:地址冲突。
任一空的位置:
优点:利用内存灵活;
问题:地址要重定位。
5.内存碎片
内存碎片(可查看动态分区的介绍):
过小的空闲区,难以实际利用;
内存碎片会降低内存有效利用率。
解决碎片的方法:
(1)规定门限值,分割空闲区时,若剩余部分小于门限值,则此空闲区不进行分割,而是全部分配给用户。
(2)内存拼接技术:将所有空闲区集中在一起构成一个大的空闲区
拼接时机:
释放区回收的时候(拼接频率过大,系统开销大)
系统找不到足够大的空闲区时(空闲区的管理复杂)
定期(空闲区的管理复杂)
拼接技术缺点:
消耗系统资源;离线拼接;重新定义作业
(3)解除程序占用连续内存才能运行的限制