连续分配:系统为用户分配的必须是一个连续的内存空间
单一连续分配
单一连续分配,内存分为系统区和用户区,系统区一般都在低地址
内存中只能又一道 用户程序,它独占整个用户空间
优点:实现简单,没有外部碎片,不一定采取内存保护
缺点:只能用于单用户,单任务的操作系统,有内部碎片,内存利用率低
固定分区分配
整个用户空间划分为若干固定大小分区,每个分区中只能装入一道作业
操作系统建立一个数据结构--分区说明表
每个表象对应分区的大小,起始地址,状态
当用户程序要装入内存的时候,根据用户程序大小检索此表,找到一个能满足且未分配的区域,分配给此程序后,修改表内状态为已分配
优点:实现简单,无外部碎片
缺点:当用户程序太大的时候,可能所有分区都不能满足需求,此时不得不使用覆盖技术,会降低性能,会产生内部碎片,内存利用率低
分区大小相等
缺乏灵活性,适合用于一台计算机控制多个相同对象的场合
分区大小不等
增加了灵活性,可以满足不同大小的进程需求,根据常在系统中运行作业的大小进行划分
动态分区分配
又叫可变分区分配,不会预先分配,而是在程序装入内存的时候再根据进程大小动态建立分区
1.要用什么数据结构记录内存使用情况
空闲分区表
分区号 | 分区大小 | 起始地址 | 状态 |
---|---|---|---|
空闲分区链
每个分区的起始地址和末尾地址部分分别设置前向指针和后向指针,起始部分处还可以记录分区大小等信息
2.当很多个空闲分区都能满足要求,应该选择哪个分配
动态分区分配算法
下一个小结学习
3.如何进行分区分配与回收
分配
当完成分配后,修改空闲分区表中的分区大小和起始地址
回收
1.当后面有一个相邻的空闲分区
完成回收后,修改后方相邻空闲分区表中的分区大小和起始地址
2.当前面有一个相邻的空闲分区
完成回收后,修改前方相邻空闲分区表中的分区大小
3.回收前后各有一个相邻的空闲分区
完成回收后,将前后两个分区表中的分区大小+回收的空间大小,起始地址设置为前一个分区的起始地址
4.回收前后都没有相邻的空闲分区
完成回收后,在空闲分区表中增加一个表项
动态分区分配没有内部碎片但是有外部碎片
内部碎片:分配给某进程的内存区域中,如果有一些部分没有用上
外部碎片:是指内存中某些空闲分区由于太小难以利用
如果内存中空闲的空间本来可以满足某些进程的需求,但是因为进程需要一整块连续空间,此时这些碎片不能满足进程的需求,
那么可以通过紧凑技术来解决外部碎片