连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)

文章目录

  • 前言
  • 知识总览
  • 单一连续分配
  • 固定分区分配
  • 动态分区分配
    • 1. 系统要用什么样的数据结构记录内存的使用情况?
    • 2. 当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?
    • 3. 如何进行分区的分配与回收操作?
      • 分配方式一
      • 分配方式二
      • 回收情况一:回收区的后面有一个相邻的空闲分区
      • 回收情况二:回收区的前面有一个相邻的空闲分区
      • 回收情况三:回收区的前、后各有一个相邻的空闲分区
      • 回收情况四:回收区的前、后都没有相邻的空闲分区
    • 碎片问题
    • 4. 思考==动态分区分配==应使用哪种装入方式?“紧凑”之后需要做什么处理?
  • 知识回顾与重要考点

前言

此篇文章是我在B站学习时所做的笔记,大部分图片都是课件老师的PPT,方便复习用。此篇文章仅供学习参考。


提示:以下是本篇文章正文内容

知识总览

连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第1张图片
连续分配:指为用户进程分配的必须是一个连续的内存空间

单一连续分配

连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第2张图片

重点!!!
MS—DOS 的存储管理采用了单一连续分配方式
只能用于单用户、单任务的操作系统!!! 内存中只能有一道用户程序,用户程序独占整个用户区空间。
缺点:会产生内部碎片

解说
由于整个系统当中同一时刻只会有一个用户程序的运行,所以采用这种分配方式的系统当中,不一定需要采用内存保护,有的系统当中,它也会设置那种越界检查了一些机制,但是像早期的个人操作系统,微软的MS-DOS系统就没有采用这种内存保护的机制,因为系统中只会运行一个用户程序,那么即使这个用户程序出问题了,那也只会影响用户进程本身,或者说即使这个用户程序越界,把操作系统的数据损坏了,那这个数据一般来说也可以通过重启计算机就可以很方便地这进行修复,所以说采用单一连续分配的系统当中,不一定采取内存保护,那这也是它的优点呐,另一方面这个方式的缺点也很明显,就是只适用于单用户,单任务的操作系统,它并不支持多道程序并发运行,并且这种方式会产生内部碎片,那所谓的内部碎片就是指我们分配给某一个进程,或者说程序的内存区间当中,如果有重要部分没有被用上,那这就是所谓的内部碎片,像这个例子当中,本来整个用户区都是分配给这个用户进来的,但是有这么大一块,它是空闲的,暂时没有用起来,那本来给这个进程分配了,但是这个进程没有用上了这一部分内存区就是所谓的内部碎片,所以这个方式也会导致存储器的利用率很低

固定分区分配

连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第3张图片
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第4张图片

无外部碎片,会产生内部碎片

动态分区分配

动态分区分配又称为可变分区分配。这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的。(eg:假设某计算机内存大小为64MB,系统区8MB,用户区共56 MB.….)
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第5张图片

连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第6张图片

1. 系统要用什么样的数据结构记录内存的使用情况?

两种数据结构:空闲分区表空闲分区链
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第7张图片

2. 当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?

连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第8张图片

3. 如何进行分区的分配与回收操作?

假设系统采用的数据结构是“空闲分区表”…
如何回收?
空闲分区表为例

分配方式一

连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第9张图片

分配方式二

连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第10张图片
解说
还是相同的例子,有一个进程五需要4MB(四兆字节),那如果说我们采用了某种分配算法,最后决定把这4M字节的空闲分区分配给进程5,那么本来这个空闲分区(分区号3,分区大小4)的大小,就和此次申请的这个内存空间大小是相同的,所以如果把这个分区空闲分区全部分配给这个进程的话,那么显然空闲分区的数量会-1,所以我们需要把这个分区对应的这个表项给删除,那如果说我们采用的是空闲分区链的话,那我们就是需要把其中的某一个而空闲分区链的节点给删掉。那这是分配的时候可能会遇到的两种情况。

回收情况一:回收区的后面有一个相邻的空闲分区

合并前的分区:
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第11张图片
合并后:
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第12张图片

回收情况二:回收区的前面有一个相邻的空闲分区

合并前:
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第13张图片
合并后:
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第14张图片

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

合并前:
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第15张图片
合并后:
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第16张图片

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

合并前:
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第17张图片
合并后:
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第18张图片

碎片问题

连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第19张图片

重点!!!
动态分区分配没有内部碎片,但是有外部碎片。

可以通过紧凑(拼凑,Compaction)技术来解决外部碎片。即将各个进程挪位,挪出一个连续的空闲区域出来
连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第20张图片

4. 思考动态分区分配应使用哪种装入方式?“紧凑”之后需要做什么处理?

:①显然之前介绍的三种装入方式当中,动态重定位的方式,其实是最方便实现进程在内存当中移动位置这件事,所以我们应该采用的是 动态重定位 的方式。
②紧凑之后,需要各个进程的起始地址给修改掉,进程的起始地址信息一般存放在进程对应的PCB当中,当进程要上CPU运行之前,会把进程的起始地址那个信息放到重定位寄存器里或者叫基址寄存器里。

知识回顾与重要考点

连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)_第21张图片

你可能感兴趣的:(操作系统原理(理论),操作系统,连续分配管理方式)