存储管理
zKing 2018-11-19  专业知识
# 定义
- 存储管理主要是对内存的管理,负责内存分配和回收,内存的保护和扩充
 - 存储管理的目的是尽量提高内存的使用效率
 
# 对换与覆盖技术
# 覆盖技术
一个作业的若干程序段或数据段的某些部分共享内存空间
# 对换技术
把内存中暂时不能运行的进程或者暂时不用的程序和数据,调到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程和进程所需要的程序和数据调入内存,如:windows系统的虚拟内存
- 分类
- 整体对换(或进程对换):以整个进程为单位
 - 页面对换(或分段对换):以页(段)为单位
 
 
# 两种分配方式
# 连续的分配方式
指为一个用户程序分配一个连续的内存空间
# 单一连续分配
适用于早期的 OS
# 固定分区分配
会产生大量的内碎片
# 动态分区分配
- 为把一个新作业装入内存,按照一定的分配算法,从空闲分区表或空闲分区链中选出一分区分配给改作业
 - 会产生外碎片
 - 常用的分配算法
- 首次适应算法
 - 循环首次适应算法
 - 最佳适应算法
 - 最坏适应算法
 
 
# 可重定位分区分配
- 将内存中的所有作业进行移动,使他们全部邻接,这样把原来分散的小分区拼接称大分区。这样称为“拼接”或“紧凑”
 - 动态重定位的实现 --针对进程管理的五种状态
- 在动态运行时装入的方式,将相对地址转换为物理地址的工作在程序指令真正要执行时才进行。
 - 地址转换需要重定位寄存器的支持。
 - 程序执行时访问的内存地址时相对地址与重定位寄存器中的地址相加而成的
 
 - 缺点
- 对 CPU 负担大,开销大
 
 
# 离散的分配方式
# 分页存储管理方式
离散分配的基本单位是页
- 页面和页表
- 页面
- 把一个进程的逻辑地址空间分成若干个大小相等的片称为页面或页
 
 - 物理块
- 把内存空间分成与页面相同大小的若干个存储块,称为块或页框
 
 - 页内碎片
- 在为进程分配内存时,以块为单位将进程的若干个页分别装到多个可以不相邻的物理块中。进程的最后一页经常装不满一快而形成“页内碎片”
 
 - 页表
- 进程中的每一页离散地存储在内存的任一存储块中,为方便查找,系统为每一进程建立一张页面映像表,简称页表
 - 页表是存放在内存中的
 - 页表 实现了从 页号 到 物理块号 的 地址映射
 
 
 - 页面
 - 地址变换机构
- 地址变换机构 实现从 逻辑地址 到 物理地址 的 转换
 - 地址变换过程
- 若给定一个逻辑地址空间中的地址为A,页面大小为L,则
- 页号 P=int(A/L)
 - (页内偏移量)页内地址 d= A % L
 
 - 注:数值的表示
- 二进制,十进制,八进制,十六进制,分别在其后加上
 - B,D,Q/O,H
 
 
 - 若给定一个逻辑地址空间中的地址为A,页面大小为L,则
 - 具有快表的地址变换机构(了解)
- 由于页表时存放在内存中的,CPU每存取一个数据,需要两次访问内存
 - 第一次:访问页表,找到指定页的物理块号,将块号与页内偏移量拼接形成物理地址。
 - 第二次:根据从第一次访问时获得的物理地址,获取所需数据或者向此地址中写入数据。
 - 存储器利用率提高,处理器处理速度降低
- 解决方法
- 在地址变换机构中,增设一个具有并行查寻能力的特殊高速缓冲寄存器,称为“联想存储器”或“快表”
 
 
 - 解决方法
 
 
 - 原理
- 对各个页面加以编号,从0开始,同时把内存空间分成与页面相同大小的若干个存储块,将页号和块号一一对应从而形成页表。通过地址变换机构将逻辑地址中的页号转换为内存中的物理块号,即对页表进行查询。获取物理块号后,与页内偏移量拼接成物理地址。
 
 - 常考点
- 通过已知的逻辑地址 A 和页面大小 L,从而求得页号 P 和页内地址 d
 - 页号再通过页表来找到物理块号 b,最终求得物理地址
 - 物理地址由块号 b 和页内地址 d 拼接形成
 - 技巧
- 十进制的逻辑地址可以通过传统的地址变换过程来求得答案
 - 十六进制,八进制的逻辑地址可以先转换成二进制
 - 通过页面大小 L,取得需要左移的位数,分割出 页号 和 页内地址
 - 再通过地址变换来求得答案
 
 
 
# 分段存储管理方式
离散分配的基本单位是段
- 段表
- 段的映射表,可以放在寄存器,但更多是存放在内存中
 - 结构
- 段号
 - 段在内存中的起始地址(基址)
 - 段长
 
 - 段是用于实现从逻辑段到物理内存区的映射
 
 - 地址变换机构
- 与分页存储管理的地址变换机构类似
 - 逻辑地址 = 段号 + 位移量
 - 通过段号去段表找基址,且位移量要小于段长,否则会越界中断
 - 物理地址 = 基址 + 位移量
 
 - 优点
- 以代码为例,段是一个完整的代码块,而页则可以是随意的一两行代码
 - 分段存储管理有利于数据的共享和保护
 
 
# 段页式存储管理
- 基本原理
- 先将用户程序分为若干段,再把每个段分为若干页,并为每个段赋予一个段名
 
 - 系统地址结构
- 段号
 - 段内页号
 - 页内地址
 
 - 地址变换
- 通过段号去段表取得页表地址
 - 再通过页号去页表取得块号,将块号与页内地址拼接成物理地址
 
 - 需要访问3次内存。解决方法:增设高速缓冲寄存器
 
# 分页与分段的主要区别
# 相似点
采用离散分配方式,通过地址映射机构实现地址变换
# 不同点
- 页是信息的物理单位,分页是为了满足系统的需要
 - 段是信息的逻辑单位,含有意义相对完整的信息,是为了满足用户的需要
 - 页的大小固定且由系统确定,由系统把逻辑地址分为页号和页内地址,由机器硬件实现
 - 段的长度不固定,取决于用户程序,编译程序对源程序编译时根据信息的性质划分
 - 分页的作业地址空间是一维的
 - 分段的作业地址空间是二维的
 
# 页面置换算法
- 最佳置换算法
- 理想化算法,无法实现
 
 - 先进先出置换算法
- 最直观,但可能性能最差,故应用极少
 
 - 最近最久未使用(LRU)算法(常考)
- 该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当需淘汰一个页面时,选择现有页面中其 t 值最大的,即最近的使用过程中将最久未使用的页面给予淘汰
 - 与最佳置换算法性能接近