当前位置:   article > 正文

【学习笔记】内存的连续分配管理方式_单一连续分配为什么有内部碎片

单一连续分配为什么有内部碎片

先决条件

  1. 这里介绍的这些内存分配方式都是非常古老的内存分配方式,基本已经不在现代操作系统中单独使用
  2. 这里的语境是指,为一个用户程序(进程)分配一个连续的内存空间。在非连续的内存管理中,可以将一个用户进程分散装入内存空间
  3. 内存大致的分区情况是,存在一个系统区,用于存放操作系统。存在一个用户区,用于存放用户进程。至于操作系统是在高地址还是低地址则要根据其实现来判断
    在这里插入图片描述

单一连续分配

这种方式只适合于单一用户,单一任务的单道用户程序的情况,换句话说,就是一次只能有一个进程跑在内存中
在这里插入图片描述
其缺点是

  1. 内部碎片可能会非常大,比如上面这个图中,作业(暂且把它当做一个进程)只用了 64 KB,有很大的空间都不能用
  2. 显而易见的第二个缺点就是内存利用率低

固定分区分配

这是最简单的躲到程序存储管理的方式,即内存中可以跑多个进程。系统将用户区提前分成大小固定的分区

特别的是,固定分区分配有两种不同的方式(这里的固定,是指它们的大小都提前固定好,以后不能更改

  1. 分区大小都相等
  2. 分区大小不等
    在这里插入图片描述
    为了便于管理这些分区,我们使用一种叫做分区说明表的东西来管理这些固定分区。如下图所示
    在这里插入图片描述
    对固定分区来说,其缺点也是显而易见的:
  3. 可能存在一个非常大的程序无法放入任何分区
  4. 相比于现代操作系统中的内存管理,该方法的利用率还是低了点,且同样会产生大量的内部碎片

动态分区分配

动态分区分配相比于前两者就非常灵活了,它会根据进程的大小动态的建立分区,进程多大,分区就占多大。

如下图,有 4 个进程的大小依次是 20MB,14MB,18MB,8MB。总共的内存大小是 64MB。其中操作系统的系统区占 8MB,用户区占 56MB。

在上半部分中,当 1,2,3 进程被分配完后,第四个进程 8MB 大于剩余的分区 4MB。如果此时进程 2 等待被换出,那么进程 4 就可以被换入(图第二行第二幅),此时产生新的分区 6MB(仔细观察图)。同理的方式可以进行其他的换入换出操作。

【注】这里的换出,指的是从内存将,将这个进程换出到磁盘(硬盘)中
在这里插入图片描述
其缺点是容易形成外部碎片,但可以通过紧凑的方式来优化这个问题。

补充

内部碎片和外部碎片

内部碎片是已经被分配出去,但是被分配者未使用,而又不能给其他进程使用。好比如我囤积了大量的粮食,我没有吃,别人也吃不了我的

比如我们最开始讲的单一连续分配,因为整个用户区都只分配一个进程,而进程大小可能远远小于用户区大小,这时空闲的用户区又不能提供给其他进程使用,我们就可以称这些空闲用户区是内部碎片。

外部碎片是没有分配出去,但是因为空间太小了而无法提供给任何进程。好比如只有一粒粮食,给谁都没用,太少了。

比如我们最后讲的动态分区分配。因为每个进程都是“量体裁衣”式的进行分区分配,所以不存在内部碎片,但是很可能存在外部碎片,假如当前剩余的空闲分区是 2MB,而要装入的进程最小都是 3MB,那么这个空闲分区(在没有进程换出的情况下),就一直无法使用,称之为外部碎片。

基于顺序搜索的动态分区策略(算法)

上面我们介绍了三种连续分配的内存管理模式,但是,当一个进程进入一个内存中时,究竟如何选择将其放入那个空闲分区中呢,这里涉及的就动态分区的算法

参考与扩展

  1. 非连续分配管理方式:本篇我们将的是内存连续的分配管理方式,而这一篇讲的是非连续的管理方式。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/755639
推荐阅读
相关标签
  

闽ICP备14008679号