计算机操作系统内存管理一(2)连续分配管理方式
根据王道2024
为一个用户程序分配一个连续的内存空间,存储密度高于非连续分配,
一、单一连续分配
内存分为系统区与用户区:
系统区:仅供OS使用,通常在低地址部分
用户区:只有一道用户程序独占
优点:
-
简单、无外部碎片
-
无须进行内存保护
缺点:
-
只适用于单用户、单任务的OS
-
由内部碎片,存储器利用率极低
二、固定分区分配
最简单的多道程序存储管理方式,将内存空间划分为若干固定大小或动态的分区,每个分区装入一道作业
划分方法:
分区大小相等(固定大小):
程序太小会造成浪费,产生内部碎片;
程序太大无法装入,需要使用覆盖技术,缺乏灵活性;
分区大小不等(动态划分):
划分为多个较小的分区、适量的中等分区、少量的大分区
固定分区特点:
-
适用于多道程序设计
-
最简单的存储分配
-
无外部碎片
-
不能实现多进程共享一个主存区,存储空间利用率低
三、动态分区分配
可变分区分配,在进程装入内存时根据实际需要,动态分配内存,系统中分区的大小和数量是可变的
问题:动态分区在开始时利用率较高,但是在使用中会产生外部碎片,使内存利用率降低
解决方法:紧凑技术,OS不断堆对进程进行移动和整理,需要动态重定位寄存器支持,较为费时
动态分配策略算法:
-
首次适应
1)空闲分区以地址递增次序链接。
2)分配时找到第一个满足要求的空闲分区最简单、最好最快
易出现小的空闲分区,每次分配时从头开始查找,增加了开销
-
邻近适应算法
1)循环首次适应,分配内存时从上次查找结束的位置开始继续查找可能导致内存空间尾部分裂成小碎片,通常比首次适应算法差
-
最佳适应算法
1)空闲分区按容量递增次序链接,找到第一个能满足要求且最小的空闲分区性能较差,每次最佳分配都会留下很小且难以利用的内存块,产生最多的外部碎片
-
最坏适应算法
1)按容量递减次序链接,找到第一个能满足要求的最大分区,从中分割一部分给作业不容易产生碎片
会很快导致没有可用的大内存块,性能较差
内存回收,OS根据回收分区的始址,从空闲分区链中找到相应的插入点:
-
回收区域插入点的前一空闲分区相邻,将两个分区合并,修改前一项分区表项的大小之和
-
回收区域插入点的后一空闲分区相邻,两个分区合并,修改后一分区表项的始址和大小
-
回收区域插入点的前后两个分区相邻,三个分区合并,修改前一分区表项的大小为三者之和
-
回收区没有相邻的空闲分区,回收区新建一个表项,填写始址和大小,插入空闲分区链