知识总览
以下是连续分配管理方式
单一连续分配
单一连续分配:内存被分为系统区和用户区。
系统区:存放操作系统相关数据。
用户区:存放用户进程相关数据。
内存中只能有一道用户程序。
固定分区分配
分为分区大小相等和不等两种情况。
分区说明表:
大小,起始位置,(分配)状态
动态分区分配
又称为可变分区分配。
不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区。
三个问题:
系统要用什么数据结构记录内存的使用情况?
表或链。
当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?
按照一定的动态分区分配算法来分配。这里不细说。如何进行分区的分配与回收?
视频14:57开始 分配有两种方法。
分配方法1:修改空闲分区大小和起始地址。
分配给进程5。
分配方法2:(如果刚好用完)删除空闲分区。
回收有4种方法。
回收方法1:回收区的后面有一个相邻的空闲分区,则将相邻的2个空闲分区合并为1个。
回收方法2:回收区的前面有一个相邻的空闲分区,则将相邻的2个空闲分区合并为1个。
回收方法3:回收区的前面和后面都有一个相邻的空闲分区,则将相邻的3个空闲分区合并为1个。
回收方法4:回收区的前后都没有一个相邻的空闲分区,则增加一个表项。
动态分区分配有外部碎片。
内部碎片:分配给进程的没用上。
外部碎片:空闲分区太小用不上。
蓝色的小缝隙就是外部碎片。
以下是动态分区分配算法
首次适应算法:每次都从低地址开始查找,找到的第一个能满足大小的空闲分区。
最佳适应算法:空闲分区按容量递增次序链接。每次分配内存顺序查找空闲分区链(表),找到大小能满足要求的第一个空闲分区。也就是找大于等于要求的最小分区。
缺点:每次都选最小的分区分配,会留下更多很小的难以利用的内存块。会产生很多外部碎片。
最坏适应算法:又称最大适应算法。就是找满足条件的最大的空间进行分配。
缺点:每次都选最大的分区分配,可能导致较大的连续空间快速用完,之后若有大进程到达,将无分区可用。
临近适应算法:从上次查找结束位置开始找,找到满足要求的第一个空闲分区。
总结