内存空间分配与回收之连续分配
- 连续分配指位进程分配必须是一个连续的空间
单一连续分配
- 单一连续分配方式中,内存被分为系统区和用户区
- 我们的内存中只能有一道用户程序,用户程序独占整个用户区空间
- 这种方式实现简单,且无外部碎片,也可以采用覆盖技术来扩充内存,因为只有一个进程,所以不一定需要采取内存保护,但是这种模式只能用于单用户和单任务的操作系统,而且是有内部碎片
固定分区分配
- 为了支持多道程序的系统,为了内存中装入多道程序,且这些程序不会相互干扰,于是将整个用户空间划分位若干个固定大小的分区,在每个分区中只装入一道作业
- 分区大小相等
- 分区大小不等
- 因为有很多的分区,所以需要一种数据结构来管理分区
- 分区大小不等 会尝试内部碎片,但是不会产生外部碎片,而且最致命的问题是如果进程需要的内存很大,可能所有分区都不能满足,此时就不得不使用覆盖技术来解决
动态分区分配(可变分区分配)
- 这种思想的核心就是根据我们进程的大小动态的建立分区,并适分区的大小正好适合进程的需求
- 三大问题
- 应该适用什么样的数据结构来记录内存的使用情况
- 当很多的空闲区的时候,应该选用那个空闲区
- 如何进行分区的分配和回收
系统要用怎样的数据结构记录内存的使用情况呢?
- 我们的空闲分区链我们的指针来指向下一个空闲区的起始地址
当多个空闲分区都能满足要求时,应该选择哪个分区进行分配?
- 这个需要用到我们的动态分区的分配算法了
如何进行分区的分配和回收操作?
-
就是修改我们对于用来记录内存使用的数据结构的内容
-
关于回收
- 被回收的区域只有一边是空闲的
- 被回收的空间 本来旁边两个区都是空闲的,所以就是将三个区合并
- 被回收的空间 旁边都不是空闲的区域
内部碎片与外部碎片
- 对于我们的外部碎片,我们可以通过我们的紧凑技术来实现将分散的空间变成连续的空间