操作系统 内存管理概念和连续分配方式

前言

本文梳理内存管理相关概念:

  • 内存空间的扩充
    覆盖技术
    交换技术
    虚拟存储技术(下篇介绍)

  • 内存空间的分配与回收

    • 连续分配方式

      1. 单一连续分配
      2. 固定分区分配
      3. 动态分区分配
    • 非连续分配方式(下篇介绍)

      1. 基本分页存储管理
      2. 基本分段存储管理
      3. 段页式存储管理

内存管理的概念

操作系统 内存管理概念和连续分配方式_第1张图片

地址转换

操作系统 内存管理概念和连续分配方式_第2张图片

操作系统需要提供地址转换功能,负责程序的逻辑地址与物理地址的转换。
操作系统在可执行文件装入内存时进行地址转换,参考三种转入方式。

存储保护

操作系统需要内存保护功能,保证各个进程在各自地址空间内运行,互补干扰

  • 方式一:在CPU中设置一对上下限寄存器,存放进程的上下限地址;进程的指令要访问某个地址时,CPU检查是否越界;
  • 方式二:采用重定位寄存器(基址寄存器)和界地址寄存器(限长寄存器)进行越界检查。重定位寄存器中存放的是进程的起始地址,界地址寄存器中存放的是进程的最大逻辑地址;

内存空间的扩充

操作系统 内存管理概念和连续分配方式_第3张图片

  • 操作系统使用如下三种技术技术从逻辑上对对内存空间进行扩充
    覆盖技术
    交换技术
    虚拟存储技术

覆盖技术

引入覆盖技术,用来解决程序大小超过物理内存总和的问题。
该技术只用于早期的操作系统,现在已成为历史。

  • 覆盖技术的思想:
    将程序分为多个段,常用的段常驻内存,不常用的段在需要时调入内存;

  • 内存中分为一个固定区和若干个覆盖区:
    需要常驻内存的段放在固定区中,调入后就不再调出(除非运行结束);
    不常用的段放在覆盖区,需要用到时调入内存,用不到时调出内存;

  • 缺点:
    必须由程序员声明覆盖结构,操作系统完成自动覆盖;对用户不透明,增加了用户编程负担。

交换技术

  • 交换技术的思想:
    内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)。

  • CPU调度中级调度就是交换技术实现的。

  • 应该在磁盘的什么位置保存被换出的进程?
    通常把磁盘分为文件区和对换区两部分。
    文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;
    对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区,由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此对换区空间的管理采用连续分配方式,
    对换区的IO速度比文件区更快;

  • 应该什么时候进行交换?
    交换通常在许多进程运行且内存吃紧时进行,而系统负荷降低就暂停。
    例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程,如果缺页率明显下降,就可以暂停换出。

  • 应该换出那些进程?
    可以优先换出阻塞进程、可优先换出优先级低的进程;
    为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间…

操作系统 内存管理概念和连续分配方式_第4张图片

虚拟存储技术

之后单独写文章梳理。

内存空间的分配与回收

内存空间的分配分为两种方式:连续分配方式和非连续分配方式

  • 内部碎片:
    是指分配给某进程的内存区域中,如果有些部分没有用上,就是内存碎片;

  • 外部碎片:
    是指内存中的某些空闲分区由于太小而难以利用;

连续分配方式

操作系统 内存管理概念和连续分配方式_第5张图片

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

单一连续分配

在单一连续分配方式中,内存被分为系统区和用户区。
系统区通常位于内存的地地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。
内存中只能有一道用户程序,用户程序独占整个用户区空间。

  • 优点:
    实现简单,无外部碎片;
    可以采用覆盖技术扩充内存;
    不一定需要采取内存保护。

  • 缺点:
    只能用于单用户、单任务的操作系统;
    有内部碎片;
    存储器利用率极低;

  • 如图所示:
    操作系统 内存管理概念和连续分配方式_第6张图片

固定分区分配

为了能在内存中装入多道程序,且这些程序直接不会相互干扰,于是将整个用户空间划分为若干个固定大小的分区,在每个分区中只装入一道作业,这样就形成了最早的、最简单的一种可运行多道程序的内存管理方式。

  • 固定分区分配方式又有两种分配方式:
    分区大小相等、分区大小不等;

    1. 分区大小相等:
      缺乏灵活性,但适合用于一台计算机控制控制多个相同对象的场合;

    2. 分区大小不等:
      增加了灵活性,可以满足不同大小的进程需求。
      根据常在系统中运行的作业大小情况进行划分。

  • 分区说明表
    操作系统需要建立一个分区说明表这样的一个数据结构,来实现各个分区的分配与回收。
    每个表项对应一个分区,通常按分区大小排列,每个表项包括对应分区的大小、起始地址、是否已分配。
    当用户程序要要装入内存时,由操作系统内核程序根据用户程序大小检测该表,从中找到一个能满足大小的、未分配的分区,将之分配给该程序,然后修改分区说明表。
    操作系统 内存管理概念和连续分配方式_第7张图片

  • 优点:
    实现简单、无外部碎片;

  • 缺点:
    当用户程序太大时,可能所有分区都不能满足需求,此时不得不采用覆盖技术来解决,会降低系统性能;
    会产生内存碎片,内存利用率低。

动态分区分配

这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态的建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的;
又称为可变分区分配。

  • 用空闲分区表或者空闲分区链来记录内存的使用情况。
    操作系统 内存管理概念和连续分配方式_第8张图片

  • 内存回收时,如果有相邻的内存分区,则会合并为一个,并修改内存分区表;

  • 动态内存分没有内部碎片,但是有外部碎片;

  • 紧凑技术
    如果内存中的空闲空间总和本来可以满足某进程的要求,但是由于进程需要的是一整块连线的内存空间,此时可以通过紧凑技术来解决这种外部碎片的问题。
    将各个已经分配的内存分区紧凑在一块,剩出一大块完整的地址,以满足新进程的内存。

  • 动态分区分配算法
    当把一个新的进程装入内存时,按照动态分区分配算法,从空闲分区表中选出一个分区分配给该作业。

非连续分配方式

  • 连续分配方式的缺点:
    固定分区分配:缺乏灵活性,会产生大量内存碎片,内存的利用率极低。
    动态分区分配:会产生很多外部碎片,虽然可以用紧凑技术来处理,但是紧凑的时间代价很高。

  • 非连续分配
    如果可以将一个进程分散的装入到许多不相邻的分区中,便可以充分的利用内存,而无需再进行紧凑。于是变产生了非连续分配方式。
    连续分配:为用户进程分配的是一个连续的内存空间;
    非连续分配:为用户进程分配的是一些分散的内存空间;

  • 下面会单独写文章整理这块,比较重要。操作系统 内存管理概念和连续分配方式_第9张图片

你可能感兴趣的:(计算机网络,操作系统等,操作系统,内存管理)