内存管理概念
内存管理的基本原理和要求
- 内存管理
- 主要功能
程序的链接与装入
- 链接方式
- 静态链接
- 装入时动态链接
- 运行时动态链接
- 装入方式
- 绝对装入
- 可重定位装入(静态重定位)
- 在装入时一次性完成重定位
- 需完整装入
- 无法动态分配内存
- 动态运行时装入(动态重定位)
- 把相对地址的修改推迟带真正运行的时候进行,需要重定位寄存器的支持
- 可部分装入
- 可不连续分配内存
- 可动态分配内存
- 便于共享程序段
逻辑地址与物理地址
进程的内存映像
- 代码段:只读的,可以被多个进程共享
- 数据段:包括全局变量和静态变量
- PCB
- 堆:动态分配的变量
- 栈:用来实现函数调用
内存保护
- 目的:防止进程越界访问内存
- 方式
- CPU设置上、下界限寄存器
- 重定位寄存器(基地址寄存器)和界地址寄存器(限长寄存器)配合
内存共享
- 可重入代码(纯代码)是只读的
内存分配与回收
- 单一连续分配
- 固定分区分配
- 动态分区分配
- 页式存储管理(离散分配方式)
连续分配管理方式
- 单一连续分配
- 简单、无外部碎片
- 只适用于单用户、单任务;有内部碎片存储器利用率极低
- 固定分区分配
- 分区大小相等
- 分区大小不等
- 存在两个问题
- 动态分区分配
- 维护一个空闲分区表(或链)
- 分配策略
- FF:最简单,最好
- NF:内存空间小碎片,比FF要差
- BF:性能很差,产生最多的外部碎片
- WF:导致没有大内存块,性能也非常差
基本分页存储管理
基本概念
- 页面和页面大小
- 页(页面,Page)
- 页框(页帧,Page frame)
- 块(盘块,Block)
- 逻辑地址结构([页号P|页内偏移量W])
- 页号P
- 页内偏移量W
- 页表
- 页号(隐含)
- (物理)块号
- 页表一般存放在PCB中
- 物理地址:逻辑地址中的W和页表中的块号共同组成
基本地址变换机构
- 是一组硬件机构
- 页表寄存器(PTR)
- 记录进程页表的起始地址和页表长度(页表中有多少页)
- 进程运行时,将PCB中的信息放在PTR中
- 变换过程
- P,W
- 越界检测
- 取页表项
- 计算物理地址
- 页面多大合适
具有快表的地址变换机构
- 快表(相联存储器,Translation Lookaside Buffer,TLB)
- 并行能力
- 高速缓冲存储器(不是内存)
- 每次切换进程都需要清空TLB
- 专门用于存页表项
- 变换过程
两级页表
- 二级页表(页目录表)
- 外层页表/顶级页表
- 两级页表的逻辑地址格式
- 需要注意的几个细节
- 页表大小不得超过一个页面
- 访存次数
基本分段存储管理
- 分段
- 段表
- 地址变换机构
- 段的共享与保护
段页式管理
虚拟内存管理
虚拟内存的基本概念
- 传统存储管理方式的特征
- 一次性
- 驻留性
- 局部性原理
- 虚拟存储器的定义和特征
- 定义
- 特征
- 多次性
- 对换性
- 虚拟性
- 虚拟内存技术的实现
- 内存管理方式
- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
- 硬件支持
- 一定容量的内存和外存
- 页/段表机制
- 中断机制
- 地址变换机构
- 内存管理方式
请求分页管理方式
- 页表机制
- 两个基本问题
- 页表项新增4个字段
- 状态位P
- 访问字段A
- 修改位M
- 外存地址
- 缺页中断机构
- 同样经过中断处理的步骤
- 特殊之处
- 指令执行期间产生中断信号,属于内部异常
- 一条指令可能产生多次缺页中断

页框分配
- 驻留集大小
- 驻留集
- 大小考虑因素
- 内存分配策略(分配和调整驻留集)
- 固定分配局部置换
- 可变分配全局置换
- 可变分配局部置换
- 固定分配
- 平均分配
- 按比例分配
- 优先权分配
- 调入页面的时机
- 预调页策略
- 请求调页策略
- 从何处调入页面
- 如何调入页面
页面置换算法
- OPT
- FIFO
- LRU
- CLOCK
- 简单CLOCK
- 改进型CLOCK
抖动和工作集
- 抖动(颠簸)
- 定义
- 根本原因
- 系统中同时运行的进程太多
- 工作集
内存映射文件
- 目的
- 方便读写
- 方便通信
虚拟存储器性能影响因素
- 页面大小
- 大
- 缺页率低、碎片多、页表短
- 小
- 缺页率高、碎片少、页表长
- 大
- 驻留集
- 小
- 缺页率高 抖动
- 中
- 缺页率低
- 很大
- 改善不明显
- 小
- 页面置换算法
- 应采用LRU、CLOCK等
- 写磁盘频率
- 通过建立待写链表 批量写入
- 程序局部化程度
- 高
- 缺页率低
- 低
- 缺页率高
- 高
地址翻译
分段、分页管理的对比
(1)页是信息的物理单位。分页的主要目的是提高内存利用率。分页是透明的、一维的 (2)段是信息的逻辑单位。主要目的是更好地满足用户需求。分段需要显式指令。分段是二维的。分段更容易实现信息的共享与保护。
分页、分段优缺点分析
| 优点 | 缺点 | |
|---|---|---|
| 分页管理 | 内存空间利用率高,不会产生外部碎片,只会有少量内部碎片 | 不方便按逻辑模块实现信息共享&保护 |
| 分段管理 | 很方便按照逻辑模块实现信息共享和保护 | 如果段长过大,为其分配很大的连续空间会很不方便,段式管理会产生外部碎片 |