操作系统-存储管理

1. 存储管理功能

1.1 地址映射

定义:把程序中的虚拟地址/逻辑地址转换成内存真实的地址/物理地址的过程

地址映射的实现方式

这里提前声明:

  • VA: 逻辑地址 Virtual Address
  • BA: 装入地址 Base Address
  • MA: 物理地址 Memory Address/Phisical Address
固定地址映射
静态地址映射

程序装入时由操作系统完成逻辑地址到物理地址的映射。
MA = BA + VA 即 物理地址 = 基地址 + 偏移地址

例:加入逻辑地址 VA = X, X存放内容即为(X)且(X)=1234。基地址为BA。则有
MA = BA + X
在这里插入图片描述

静态地址映射的特点
  • 程序执行前确定
  • 程序装入后不能移动,如果要移动必须放回原来的位置
  • 程序占用连续的内存空间
动态地址映射

定义:在程序执行过程中将逻辑地址转换为物理地址。

例如: MOV AX, [500] ; 访问500单元时才执行地址转换

注意:如果程序有移动,BA可能会有改变,自动计算新的MA。如下图示:
在这里插入图片描述

特点
  • 程序占用的内存空间可动态变化,要求及时更新BA
  • 程序不要求占用连续的内存地址空间,每段放置基地址BA系统知道
  • 以便于多个进程共享代码(共享代码作为独立的一段存放)

1.2 虚拟存储

虚拟存储是面向用户的虚拟封闭的存储空间。

解决问题:

  • 程序过大时内存不够,无法运行
  • 多个地址并发执行导致地址冲突,不能运行
1.2.1 虚拟内存管理的目标
  • 使得大程序能在较小的内存中运行
  • 使得多个程序能在较小的内存总运行
  • 使得多个程序并发运行时地址不冲突
  • 使得内存的利用效率高:无碎片化,共享方便

1.3 内存分配功能

为程序运行分配足够的内存空间

需要解决的问题:

  • 放置策略
    • 程序调入内存时将其放到哪个内存区
  • 调入策略
    • 何时将运行的代码和要访问的数据调入内存
  • 淘汰策略
    • 内存不够时,释放哪些代码或数据腾出内存空间

1.4 存储保护功能

保证在内存中的多道程序只能在给定的存储区域内活动且互不干扰。

  • 防止访问越界
  • 防止访问越权
1.4.1 实现方法:界址寄存器
  • 在CPU中设置一对下限寄存器和上限寄存器,存放程序在内存中的上下限地址。
  • 基址寄存器和限长寄存器

2. 物理内存管理

2.1 分区内存管理

  • 单一分区存储管理
  • 分区存储管理
    • 固定分区
    • 动态分区
2.1.1 单一分区存储管理(部分区存储管理)

定义:用户区不分区,完全被一个程序占用。如DOS

2.1.2 固定分区存储管理

分区存储管理是指把用户区内存划分为若干个大小不等的分区,供不同的程序使用。适合单用户单任务系统

固定分区定义:把内存固定地划分为若干个大小不等的分区。每个分区的大小和位置都固定,系统运行期间不再重新划分。

分区表

记录分区的位置,大小和使用标志。如下图示:
在这里插入图片描述

在这里插入图片描述

使用特点
  • 在程序装入前,内存已经分区且不再改变。
  • 每个分区大小不同适应不同代销的程序。
  • 系统要维护分区表。
缺点
  • 浪费内存:程序比所在分区小时会产生内存碎片
  • 大程序可能无法运行:程序比最大分区还大

但是如果知道程序的大小、个数、装入顺序时,内存的使用效率很高。

2.1.3 动态分区

定义:在程序装入时创建分区,使分区的大小刚好和程序的大小相等。
图:

2.2 分区放置策略

2.2.1 分区的分配

首先要介绍一下啊分区表的概念。空闲区表是用来描述内存空闲区的位置和大小的数据结构。
在这里插入图片描述

分配过程(假定用户要求的空间大小为s)
  • 从空闲区表的第1个区开始,寻找>= s的空间去
  • 找到后从分区中分割出大小为s的部分给用户使用
  • 分割后的剩余部分作为空间去仍然记录在空闲区表中

注意:分割空闲区时一般从底部分割。

2.2.2 空闲区如何排序-放置策略
  • 按照空闲区位置递增/减排序
  • 按照空闲区大小递增/减排序
2.2.3 分区回收

回收程序释放区,登录到空闲表中,以便再分配。

回收过程如下图所示,其中

  • 白色区代表当前空闲区
  • 红色区代表释放区
  • 灰色区代表占用区

在这里插入图片描述

2.3 内存覆盖技术

内存分区
  • 常驻区:被某段单独固定地占用,可划分多个
  • 覆盖区:能被多段共用,可划分多个
覆盖的缺点
  • 编程复杂:程序员需要划分模块并确定覆盖关系
  • 程序执行时间长:从外存装入内存耗时
  • 程序模块可能比覆盖区大小还大导致无法装入

在这里插入图片描述

3. 虚拟内存管理

3.1 页式虚拟内存管理概念

3.2 页表和页式地址映射

3.3 块表技术和页面共享技术

3.4 缺页中断

3.5 页面淘汰策略

3.6 缺页因素与页式系统缺点

3.7 段式和段页式虚拟存储