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 段式和段页式虚拟存储