连续分配管理方式-第四十三天

发布时间:2024年01月04日

目录

前言

单一连续分配

固定分区分配

分区大小相等

分区大小不等

分区说明表

动态分区分配

问题

用什么样的数据结构记录内存的使用情况

应该选择哪个分区进行分配

分区的分配与回收操作

分配

回收

结论

本节思维导图


前言

连续分配指为用户进程分配的必须是一个连续的内存空间

单一连续分配

基本概念:在单一连续分配方式中,内存被分为系统区(通常位于内存的低地址部分,用于存放操作者系统的相关数据)和用户区(用于存放用户进程相关数据)

注意事项:内存中只能有一道用户数据(不支持并发),用户程序独占整个用户区空间

优点:

  1. 实现简单
  2. 无外部碎片
  3. 可以采用覆盖技术扩充内存
  4. 不一定需要采用内存保护

缺点:

  1. 只能用于单用户、单任务的操作系统中
  2. 有内部碎片
  3. 存储器利用率低

固定分区分配

历史背景:20世纪60年代出现了支持多道程序的系统,为了能在内存中装入多道程序,且这些程序之间又不会相互干扰,于是将整个用户空间划分为若干个固定大小的分区,在每个分区中只装入一道作业,这样就形成了最早的、最简单的一种可运行多道程序的内存管理方式

分区大小相等

优点:很适合于用一台计算机控制多个相同对象的场合(所需内存大小相同)

缺点:缺乏灵活性

分区大小不等

优点:增加灵活性,可以满足不同大小的进程需求,根据常在系统中运行的作业大小情况进行划分(可以划分为小分区、适量中等分区、少量大分区)

缺点:缺乏灵活性,内存碎片

分区说明表

目标:实现各个分区的分配与回收

基本概念:每个表项对应一个分区,通常按照分区大小排列,每个表项对应分区的大小、起始地址、状态(是否已分配)

当用户程序要装入内存时,由操作系统内核程序根据用户程序大小检索该表,从中找到一个能满足大小的、系统分配的分区,将之分配给该程序,然后修改状态为”已分配“

优点:

  1. 实现简单
  2. 无外部碎片(10MB放进12MB大小的空间中,只占用了该空间,其它空间都不占用)

缺点:

  1. 当用户程序太大时,可能所有分区都不能满足需求,此时不得不采用覆盖技术来解决,但这又会降低性能
  2. 会产生内部碎片(10MB放进12MB大小的空间中,该空间中多余的2MB内存空余)
  3. 内存利用率低

动态分区分配

基本概念: 不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使用分区地大小正好适合进程地需要,因此系统分区的大小和数目是可变的

问题

  1. 系统要用什么样的数据结构记录内存的使用情况
  2. 当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配
  3. 如何进行分区的分配与回收操作

用什么样的数据结构记录内存的使用情况

空闲分区表:每个空闲分区对应一个表项。表项中包含分区号、分区大小、分区起始地址等信息

空闲分区链:每个分区的起始部分和末尾部分分别设置前驱指针和后继指针。起始部分处还可记录分区大小等信息

应该选择哪个分区进行分配

分区的分配与回收操作

分配

1、空闲分区表中某一块分区的分区大小大于进程需要的空间大小:

只需通过算法将某块分区中的部? 分空间划分给该进程即可,然后在分区表中更新该分区大小以及起始地址

2、空闲分区表中某一块分区的分区大小等于进程需要的空间大小:

将分配出去的某块空间从分区表中删除即可

回收

1、回收区后面有一个相邻的空闲分区:

将两个相邻的空闲分区合并为一个新的空闲分区,并更新分区表的分区大小和起始地址

2、会收区的前面有一个相邻的空闲分区:?

?将两个相邻的空闲分区合并为一个新的空闲分区,并更新分区表的分区大小和起始地址

3、回收区的前、后各有一个相邻的空闲分区:

将三个相邻的空闲分区合并为一个新的空闲分区,并更新分区表的分区大小和起始地址

4、回收区的前、后都没有相邻的空闲分区:

新增一个表项(各表项的顺序不一定按照地址·1递增顺序排列。具体的排列方式需要依据动态分区算法来确定)

结论

  1. 动态分区分配没有内部碎片,但是有外部碎片
  2. 内部碎片:分配给某进程的内存区域中,如果有些部分没用用上
  3. 外部碎片:指内存中的某些空闲分区由于太小而难以利用

本节思维导图

~over~

文章来源:https://blog.csdn.net/m0_73975164/article/details/135394701
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。