内存管理基本原理
内存管理功能
- 内存空间的分配与回收
- 地址转换
- 内存空间的扩充
- 覆盖技术 :分固定区和覆盖区 对用户不透明
- 交换技术
- 虚拟存储技术
- 存储保护
- 设置上下限寄存器
- 利用重定位寄存器、界地址寄存器进行判断
进程运行基本原理
- 编译
- 链接
- 静态链接
- 装入时动态链接
- 运行时动态链接
- 装入
- 绝对装入
- 可重定位装入
- 动态运行时装入 需要设置重定位寄存器
覆盖技术
交换技术
-
具有交换功能的操作系统中,磁盘分为文件区和对换区两部分,对换区的I/O速度更快
-
交换通常在许多进程运行且内存吃紧时进行
-
PCB会常驻内存,不会被换出内存
覆盖是在同一个程序或进程中的,交换是在不同进程之间的。
连续分配管理方式
连续分配指为用户进程分配的必须是一个连续的内存空间
单一连续分配
内存分为系统区和用户区,系统区存放操作系统相关数据,用户区存放用户进程相关数据。
内存中是由一道用户程序,用户程序独占整个用户空间。
实现简单,无外部片。只能用于单用户、单任务的操作系统中,有内部碎片,存储器利用率低
固定分区分配
将整个用户空间划分为若干个固定大小的分区,在每一个分区中只装入一道作业。
-
内存大小相等
- 缺乏灵活性,但很适合用于一台计算机控制多个相同对象的场合
-
内存大小不等
- 增加灵活性,可以满足不同大小的进程需求
- 无外部碎片,有内部碎片
建立分区说明表,来实现各个分区的分配与回收
动态分区分配
不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要
-
记录内存的使用情况
- 空闲分区表
- 空闲分区练
-
应该选择哪个分区进行分配
- 四种动态分区分配算法
-
如何进行分区的分配与回收
内部碎片: 分配给某进程的内存区域中,有些部分没有用上
外部碎片: 指内存中的某些空闲分区由于太小而难以利用
外部碎片可以用“紧凑”技术来解决
动态分区分配算法
在又多个空闲分区都能满足要求时,应该选择哪个分区进行分配
- 首次适应算法
- 从头到尾找适合的分区
- 空闲分区以地址递增次序排列
- 综合看性能最好,算法开销低
- 最佳适应
- 优先使用更小的分区,以保留更大的分区
- 空闲分区以容量递增次序排列
- 会有更大的大分区被保留下来
- 会产生很多小碎片,算法开销大
- 最坏适应
- 优先使用更大的分区,以防产生太多太小的碎片
- 容量递减排列
- 可减少小碎片
- 大分区容易被用完,不利于大进程,算法开销大
- 邻近适应
- 由首次适应演化而来。每次从上次查找结束外置开始查找
- 地址递增排列
- 算法开销小
- 会使搞地质的大分区也被用完
非连续分配管理方式
基本分页存储管理
把进程分页,各个页面可离散的放在各个内存块中
-
地址转换
-
计算逻辑地址对应的页号
-
找到对应页面在内存中的存放位置
-
算出逻辑地址对应的页位移分量
-
物理地址=页面地址+页内偏移量
-
-
页表
- 页表记录进程页面和实际存放的内存块之间的关系
- 一个进程对应一张页表,进程的每一页对应一个页表项,每个页表项由页号和块号组成
- 每个页表项的长度是相同的,页号是隐含的
基本地址变换机构
-
页表寄存器的作用
- 存放页表起始地址
- 存放页表长度
-
地址变换过程
- 根据逻辑地址算出页号、页内偏移量
- 页号的合法性检查(与页表长度对比)
- 若页号合法,再根据页表起始地址、页号找到对应项表项
- 根据页表项中记录的内存块号、页内偏移量得到最终物理地址
- 访问物理内存对应的内存单元
快表
- 算页号,页内偏移量
- 检查页号合法性
- 查快表,若命中,即可知道页面存放的内存块号,可直接进行5,否则进行4
- 查页表,找到页面存放的内存块号,将页表项复制到快表中
- 根据内存块号和页内偏移量得到物理地址
- 访问目标内存单元
快表命中,一次访存,否则,两次访存。页表在内存中,快表不在内存中。
两级页表
各级页表的大小不能超过一个页面。
套娃
基本分段存储管理
段页式存储管理
虚拟内存
传统存储管理方式的特征
- 一次性 作业必须一次性全部装入内存后,才能开始运行
- 驻留性 作业被装入内存后就一直驻留在内存中,其任何部分都不会被换出
虚拟存储器只是由于系统提供了部分装入、请求调入和置换功能后,给用户的感觉是一个比实际物理内存大得多的存储器
- 多次性
- 对换性
- 虚拟性
虚拟存储实现的硬件支持
- 一定容量的内存、外存
- 页表机制
- 中断机构
- 地址变换机构
请求分页管理方式
- 页表机制
- 页表项包含 页号、物理块号、状态位、访问字段、修改位、外存地址
- 缺页中断机构
- 地址变换机构
页面置换算法
- 最佳置换算法 OPT
- 缺页中断不一定发生页面置换
- 先进先出页面置换算法 FIFO
- 会产生所分配的物理块数增大而页故障数不增反减的异常现象
- 最近最久未使用置换算法 LRU
- 时钟置换算法 CLOCK
页面分配策略
驻留集:请求分页存储管理中给进程分配的物理块的集合,一般小于进程的总大小
操作系统分配策略
- 固定分配局部置换
- 可变分配全局置换
- 可变分配局部置换
调入页面的时机
- 预调入策略
- 主要用于进程的首次调入,由程序员指出先调入那些页
- 请求调页策略
- 每次只调入一页,调入调出过多时会花费过多的I/O开销
从何处调入页面
分页系统的外存分两部分,用于存放文件的文件区和存放对换页面的对换区
- 系统有足够对换区 全部从对换区调入所需页面
- 系统缺少足够的对换区 凡不会被修改的文件直接从文件区调入,不必换出。可能修改的在换出时要调到对换区
- UNIX方式 未运行过的页面都应在文件区调入
抖动