内存空间的分配与回收

连续分配管理方式:
单一连续分配
内存被分为系统区和用户区。系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。但是内存中只能有一道用户程序,用户程序独占整个用户区的空间。
在这里插入图片描述
固定分区分配
将整个用户空间划分为若干个固定大小的分区,在每个分区中只装入一到作业,这样就形成了最早的,最简单的一种可运行多道程序的内存管理方式。
分区大小相等:缺乏灵活性,但是适合用于用一台计算机控制多个相同对象的场合
在这里插入图片描述

分区大小不相等:增加了灵活性,可以满足不同大小进程需求。但是当用户程序太大的时候,可能所有的分区都不能满足需求,此时不得不采用覆盖技术进行解决,但是这样又会降低性能。同时也会产生内部碎片,内存利用率低。
在这里插入图片描述

动态分区分配
不会预先划分内存分区,而使在进程装入内存的时候,根据进程单位大小动态地建立分区,并使分区的大小正好适合进程的需要。
在这里插入图片描述
但是这种分配方式也会伴随一些问题:
一.系统要用什么样的数据结构记录内存的使用情况?
在这里插入图片描述
空闲分区表:每个空闲分区对应一个表项。表项中包含分区号,分区大小,分区其实地址等信息。
空闲分区链:每个分区的起始部分和末尾部分分别设置前向指针和后向指针。
二.当很多个空闲分区都能满足需求的时候,应该选择那个分区进行分配?
动态分区分配算法:
1.首次适应算法:
每次都从地地址开始进行查找,找到第一个能满足大小的空闲分区。

内部碎片:分配给某进程的内存区域中,有些部分没有用上
外部碎片:内存中的某些空闲分区由于太小而难以利用
2.最佳适应算法
保证大进程的连续的大片空间,优先使用更小的空闲区。
但是这种算法会产生越来越多的,很小的,难以利用的内存块
在这里插入图片描述
在这里插入图片描述

3.最坏适应算法
优先使用最大的连续空闲区。
在这里插入图片描述
在这里插入图片描述
这种算法会导致当大进程来临的时候,就没有内存分区可用。

4.邻近适应算法
空闲分区以地址递增的顺序排列。每次分配内存时从上次查找结束的位置开始查找空闲分区链,找到大小能满足要求的第一个空闲分区。

三:如何进行分区的回收操作?
情况一:回收区的前或者后面有一个相邻的空闲分区
将两个相邻的空闲分区合并成一个
在这里插入图片描述

情况二:回收区的前后各有一个相邻的空闲分区
三个相邻的空闲分区合并成一个
情况三:回收区的前后都没有相邻的空闲分区
新增一个表项

おすすめ

転載: blog.csdn.net/nice_good_boy/article/details/119043040