OS笔记----连续内存分配

一、连续内存分配

1、内存碎片问题

  • 空闲内存不能被利用
  • 外部碎片
    • 在分配单元间的未使用内存
  • 内部碎片
    • 在分配单元中的未使用内存

在这里插入图片描述

2、分区的动态分配

  • 简单的内存管理方法:
    • 当一个成相互准许运行在内存中时,分配一个连续的区间
    • 分配一个连续的内存区间给运行的程序以访问数据
  • 分配策略:
    • 首次适配
    • 最优适配
    • 最差适配

在这里插入图片描述

  • 首次适配的基本原理&实现
    • 简单实现
    • 需求:
      • 按地址排序的空闲块列表
      • 分配需要寻找一个合适的分区
      • 重分配需要检查,看是否自由分区能合并于相邻的空闲分区(若有)
    • 优势:
      • 简单
      • 易于产生更大空闲块,向着地址空间的结尾
    • 劣势:
      • 外部碎片
      • 不确定性

在这里插入图片描述

  • 最优适配的基本原理&实现
    • 为了避免分割大空闲块
    • 为了最小化外部碎片产生的尺寸
    • 需求:
      • 按尺寸排列的空闲块列表
      • 分配需要寻找一个合适的分区
      • 重分配需要搜索及合并与相邻的空闲分区(若有)
    • 优势:
      • 当大部分分配是小尺寸时非常有效
      • 比较简单
    • 劣势:
      • 外部碎片
      • 重分配慢
      • 易产生很多没有用的微小碎片(不怎么好)

在这里插入图片描述

  • 最差适配的基本原理&实现
    • 为了避免有太多微小的碎片
    • 需求:
      • 按尺寸排列的空闲块列表
      • 分配很快(获得最大的分区)
      • 重分配需要合并于相邻的空闲分区(若有),然后调增空闲块列表
    • 优势:
      • 假如分配是中等尺寸效果最好
    • 劣势:
      • 外部碎片
      • 重分配慢
      • 易于破碎大的空闲块以致打分去无法被分配

以上三种算法是一种简单的内存分配算法,没有最好,因为程序可能有时需要大的内存空间,有时需要小的内存空间,因此每种算法都有可能会产生内碎片或者外碎片,那么我们有什么办法能够分配之后弥补一下,让产生的碎片尽量少,以便于后续的内存分配?

3、压缩式碎片整理

  • 重置程序以合并空洞
  • 要求所有程序是动态可重置的
    • 何时重置?(程序运行的时候不能进行重置程序内存的操作)
    • 开销可能会很大

在这里插入图片描述

4、交换式碎片整理

  • 运行程序需要更多的内存
  • 抢占等待的程序&回收它们的内存

在这里插入图片描述

比如说当前只有P3程序在执行,其余程序在内存中等待,此时P3需要更多地内存,但是内存的空间不够,就可以将等待的程序暂时放到硬盘中,当P3程序不需要这么多内存时再将放入硬盘的程序取回,起到了虚拟内存的作用

发布了4 篇原创文章 · 获赞 1 · 访问量 161

猜你喜欢

转载自blog.csdn.net/qq_42520894/article/details/104564981
今日推荐