连续内存分配
1. 思考点:
2. 连续内存分配
1. 为一个用户程序分配一个连续的内存空间。
2. 是早期内存分配模式,应用于内存较少的系统。
3. 三种分配类型:单一连续分配、固定分区分配、变分区分配:
4. 主存通常分为两部分:驻留操作系统;保存用户进程。
5. 操作系统可位于内存低端也可位于内存高端。影响这一决定的主要因素是中断向量的位置。中断向量通常保存在内存低端,因此操作系统通常驻留在内存低端。
3. 单一连续分配
单道程序下,仅装有一道用户程序,即整个内存的用户空间由该程序独占,这种分配方案称为单一连续分配。特点:分配管理十分简单,内存利用率低,适用单用户单任务系统。
4. 固定分区分配
1. 预先把可分配的主存空间分割成若干个连续区域,称为一个分区。
2. 分区大小可以一样也可以不一样,但分区大小固定不变,每个分区装一个且只能装入一个程序。所以多道程序的道数,受到分区个数的限制。
3. 在内存分配时,如果有一个空闲分区,则分配给内存;进程运行结束时,其分区被收回。重新分配给其他进程。
4. 固定分区分区大小一样时:缺乏灵活性,程序太小时,浪费内存;程序太大又可能装不下。
5. 分区大小不等时:可以分配多个小分区,适量中分区,少量大分区。
6. 固定分区使用表,管理数据分区的结构是一张表,保存了分区号,大小、起始地址、状态。
5. 可变分区分配
1. 是固定分区方案的延伸,主要适用于批处理环境。
2. 分区(孔):可用的的内存块,不同大小的的分区分布在整个内存中。
3. 进程到来时,它将从一个足够容纳它的分区中分配内存。分区内未分配的内存,仍然是一个分区,下次还可以再用(与固定分区分配的区别)。
4. 操作系统需要管理两类信息:(可以实现的数据结构:链表)
已分配的分区,已分配分区表
空的分区,空闲分区表。
5. 可变分区分配是动态存储分配的一种情况,常用存储分配算法:
首次适应法,分配第一个找到的分区,可以从头查找,也可以从上次查找结束时开始。
最佳适应法,搜索整个列表,找到合适的最小的分区进行分配。(为了方便查找,可以按分区大小递增排序)
最差适应法,搜索整个列表,找到合适的最大的分区进行分配。
6. 内存回收情况:
回收内存块前后无空闲区,直接增加内存块为新的空闲块。
回收内存块,前有空闲块f1,后面没有空闲块,和f1合并为一个空闲分区,起始地址就是f1的起始地址,大小是两者之和。
回收内存块,前无空闲区,后面有空闲区f2,和f2合并为一个空闲分区,起始地址为回收区地址,大小为两者之和。
回收内存块,前有空闲区f1后有空闲区f2,和f1、f2合成成一个空闲区,起始地址为f1的起始地址,大小是三者之和。
7. 碎片:随着进程频繁的装入和移出,空闲内存空间可能被分成小的片段。
外碎片:整个内存空间可以用来满足一个请求,但它不是连续的。首次适应法和最佳适应法都有这个问题,这个问题可能很严重,最坏情况下,每两个进程间都有空闲块被浪费。
内碎片:分配的内存可能比申请的内存要大一些,这两者的之间差别是在分区内部,但又不能被使用。(如在固定分区分配方案中)
8. 碎片解决方法:
1. 紧缩方法:解决外碎片,移动内存内容,把小的空闲区合并成一个大的内存块,只有在重定位是动态的时候,才有可能进行紧缩,紧缩在执行时期使用。
2. 紧缩方法的一种实现,可以将所有进程移动到内存的一端;也可以将所有空闲分区移动到一端。为减小开销,应选择移动内容最小的一种。
3. 另一种解决外碎片问题的的方法是,允许物理地址空间非连续,分页和分段(重点)。