【操作系统】存储器管理

【操作系统】存储器管理


存储器

存储器多级存储结构

  • 外部存储器:用于存储不立即使用的数据和程序
  • 主存储器:用于存储一个正在运行的程序
  • 高速缓冲存储器:用于存储CPU处理时的数据

功能:可以使数据传输更加平滑,节约资源,提高硬件利用率。

存取器空间的分类

主存储器空间一般分为系统区用户区

  • 系统区:主要存放操作系统常驻内存部分,和一些系统软件常驻主存部分以及相关系统数据
  • 用户区:主要存放用户程序和数据

虚拟存储技术

当我们的内存只有1G,而某个程序运行需要2G时,我们应该怎么运行这个程序呢?

解决办法是就是虚拟存储技术。

虚拟存储技术采用逻辑地址,内存中只存放程序当前所需数据,当有所需数据不在内存中时(这种情况叫作中断),会去磁盘中寻找相应数据放入主存中。

例如,内存1G,程序运行需要2G内存,但是在运行时,处于计算状态的只有100M,所以我们只需要将这100M放入内存即可,当需要其他数据时,再从磁盘中取出放入内存中。

作业,程序,进程,线程

一个作业通常包括程序、数据和操作说明书3部分。每一个进程由PCB、程序和数据集合组成。这说明程序是进程的一部分,是进程的实体。因此,一个作业可划分为若干个进程来完成,而每一个进程有其实体——程序和数据集合。

单道程序和多道程序

多道程序设计技术是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制下,相互穿插运行,两个或两个以上程序在计算机系统中共享着计算机系统资源。

与之相对应的是单道程序,即在计算机内存中同一时刻只允许一个的程序运行。

存储器的主要任务

存储器的主要任务如下:

  1. 使多道程序的并发能在不受干扰的环境中运行
  2. 提高存储器利用率
  3. 实现虚拟存储技术,逻辑上扩充主存空间,使大程序能在小主存中运行
  4. 方便用户使用存储器,用户无需考虑存储器的分配,回收和保护等工作

存储分配的形式

存储分配要解决的问题是,多道程序之间如何共享主存的存储空间

  1. 直接存储分配方式(不推荐)
    • 通过实际物理存储地址直接操作内存
    • 要求知道存储器的可用空间有哪些,并且要知道其他程序已经应用了哪些存储空间
    • 使用起来很不方便,要求程序编写人员要了解硬件
  2. 静态存储分配(不推荐)
    • 采用逻辑地址
    • 程序装入内存后,只有运行完毕,才会释放该空间,利用率较低
  3. 动态存储分配(推荐)
    • 只将程序运行所需的一部分装入内存进行执行
    • 采用逻辑地址
    • 当不执行时,会释放占用内存
    • 可以动态的申请存储空间以满足程序的需求
    • 动态存储分配采用覆盖交换技术实现

地址的重定位

为了实现动态存储分配,我们需要通过逻辑地址去映射物理地址。

首先我们要了解逻辑地址物理地址

  1. 逻辑地址是人们为了方便变成,用一些符号或名称表示的内存地址,是虚拟的。
  2. 物理地址是实实在在对应存储器的地址。

重定位,也叫地址映射,作用是将逻辑地址转换为物理地址,常用两种方法:

  1. 静态地址重定位
    • 地址变换只是在装入时一次完成,以后不改变
    • 优点:
      • 实现容易
    • 缺点:
      • 用户必须分配一个连续的存储空间
      • 难以实现程序和数据的共享
  2. 动态地址重定位
    • 在程序执行过程中,通过地址变换机构进行转换
    • 优点:
      • 有利于提高主存的利用率和存储空间使用的灵活性
      • 有利于实现数据的共享
    • 缺点:
      • 实现存储器管理的软件比较复杂
      • 需要附加的硬件支持

覆盖与交换

覆盖和交换是从逻辑上扩充主存的两种方法,解决了在较小主存空间中如何执行大程序的问题。

覆盖

当CPU要求某一段程序执行时,才将该程序装入主存中覆盖以前的某一段程序。

要求程序设计人员给出程序段之间的覆盖结构,主要在同一个进程或作业中进行。

针对的是同一作业。

可以在较小的存储空间中运行容量较大的进程或作业。

交换

将系统暂时不用的程序或数据部分从主存中调出来,以腾出更大的存储空间。

主要在进程或作业之间进行。

针对的是不同作业。

可以在较小的存储空间中运行较多的进程或作业。

单道环境下的存储管理

单道系统的存储空间一般划分为三部分:系统区,用户区,剩余空间区。

采用单一连续区存储管理,同一时刻只允许一个用户进程使用,主要采用静态存储分配方式,即用户程序一旦调入主存后,必须等到该程序执行结束后才能释放主存空间。

这种方式的特点:

  • 优点:
    • 管理简单
    • 只需要很少的软硬件支持
  • 缺点:
    • 系统存储空间浪费较大
    • 执行效率低
    • 数据不能共享

多道程序的存储管理

分区存储管理

固定分区法

固态分区是指系统在初始化时,将主存空间划分为若干固定大小的区域,用户进程在执行过程中,不允许改变划分区域的大小。

缺点:不能充分利用存储器资源,有一部分内存会由于未被进程占用而浪费,这一部分浪费称为“碎拼”或“内零头”

动态分区法

采用动态分区时,主存部分只有一个空闲区域,随后根据程序大小分配合适的存储空间。

缺点:在程序运行时,有些数据是当前不需要的,而这部分数据仍然占据内存空间,导致空间利用率低。

分区存储管理的优缺点

  • 优点:
    • 要求的硬件支持少,管理容易,实现简单
  • 缺点:
    • 由于每次装入的都是一整个程序,有些程序数据不会被利用,导致内存资源利用率低
    • 当内存有一定空间时,由于不能满足某个作业的所需大小,这块内存空间就会被闲置,导致浪费。
    • 没有实现虚拟存储,即在小内存的计算机中,不能运行需要大内存才能运行的程序。

页式存储管理

页式管理的思想是:将程序分配在不连续的大小相同的存储区域中,实现主存“见缝插针”式的分配,同时保证作业的连续执行。

页式存储取消了存储分配的连续性,他能使用户进程分配到不连续的存储单元中。

静态页式存储管理

静态页式存储管理是指用户作业在开始执行以前,将作业的程序和数据全部装入到主存中(数同一作业数据在内存中的可以使分散的),然后,操作系统通过地址转换,利用逻辑地址完成相应操作。

缺点:无法实现虚拟存储技术

虚拟页式存储管理

采用了虚拟存储技术,在用户作业开始执行以前,只将运行时所需数据存入主存中,而后利用逻辑地址完成相应操作。

当出现所需数据不在内存中时,这种情况叫做“缺页中断”,这时我们需要采用合适的页面置换算法,将磁盘中的所需数据替换掉内存中不需要的数据。

优化算法(OPT)

这种方法是最优解,产生的缺页中断最少,但这种算法是需要根据结果来求得置换过程的,因此是一种理论上的算法。

先进先出算法(FIFO)

按照顺序进入内存,当发生缺页中断时,取出队列最底部的元素

最近最少用置换算法(LRU)

淘汰的是最近未被访问的页

时钟算法

各个页形成环形链表,淘汰最老和最近没有用的页面

段式存储管理

在页式存储管理中,要求用户程序的逻辑地址空间是连续的。就这要求用户源程序进行编译时,将各种数据按照线性装配,不方便,不灵活。

而段式存储管理把用户作业按照功能分段,分别装入内存的不同位置

段页式存储管理

段页式即将段式和页式相结合,克服了上述两种方式的缺点。


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×