操作系统03-内存管理
操作系统
第三章: 内存管理
存储器的层次结构
CPU寄存器
- 寄存器
主存
高速缓存
主存储器
磁盘缓存
辅存
- 固定磁盘
- 可移动存储介质
装入和链接
-
装入
-
绝对装入
- 目标模块采用绝对地址
- 逻辑地址和实际地址完全相同
- 适用于单道环境
- 目标模块采用绝对地址
-
可重定位装入
- 在程序装入的时候装入
- 存在地址变换,但是是直接找的当前合适的内存位置
- 程序需要连续空间
- 不存在在程序执行的过程中在内存移动
- 在程序装入的时候装入
-
动态运行时装入
- 地址转换在程序需要真正执行时才进行
- 可以在内存之中移动
- 可以实现虚拟存储
- 地址转换在程序需要真正执行时才进行
-
链接
-
静态链接
- 在程序运行之前,将各目标模块以及它们需要的库函数链接成一个完整的转入模块
-
装入时动态链接
- 在装入的时候边装入边链接
- 便于修改和更新
- 便于实现目标模块的共享
- 在装入的时候边装入边链接
-
运行时动态链接
- 当程序需要的时候采取链接
- 节约内存空间、加快装入过程
- 当程序需要的时候采取链接
连续分配方式
-
单一连续分配
-
固定分区分配
-
分区使用表
-
内存利用与回收
-
缺点
- 规定了分区大小,大程序无法装入
- 限制了活跃进程的最大数
- 碎片过多
- 扩充和贡献困难
-
-
动态分区分配
-
算法
- 首次适应算法
-
-
每一次从头开始 导致空闲区间分配不均
-
循环首次适应算法
- 从上次找到的空闲分区的下一个空闲分区开始查找-
可能会有小的程序占据大的空闲分区,会缺乏大的空闲分区
- 最佳适应算法
-
-
以分区的容量大小 寻找第一个符合要求的
- 会导致更多的小空间- **最坏适应算法** - 和上面的算法让容量递减
- 会导致大的空闲空间不足
-
管理空闲分区
- 空闲分区表
- 空闲分区链
-
分区回收
- 要回收的分区上或下存在空闲分区,则合并
-
上下都有是则分区数减一,将下面的空闲分区从空闲表或链表中删掉
- 上或者下有(只有一个)则不变
-
不存在则自己新建为新 空闲分区数加一
-
分区分配
- 存在一个最小不可再分割的大小
-
没有程序数目和大小的限制但是会产生过多的碎片
-
-
动态重定位分配
- 重定位寄存器
- 地址变换机构
- 目标程序
-
伙伴系统
- 伙伴算法
- 内存分配
- 内存回收
- 在进程释放存储空间时,寻找伙伴合并,
可以做到类似递归进行,知道找不到可以合并的伙伴为止
-
交换
- 以进程为单位
- 以页或段为单位
基本分页存储管理方式
-
存储空间
- 主存中为块
- 进程的逻辑结构中为页
-
页面与页表
-
页表存放
- 页表
- 为记录页面在内存中对应的物理块
-
页表
-
逻辑地址构成
-
页号
- 即在第几页
-
页内位移
- 即距离页面里面第一个地址的距离
- 总的大小为页面大小,如1KB的页面,会有2的10次方的地址
-
逻辑地址从0开始
-
-
-
为解决连续分配方式存在的碎片
-
地址变换机构
-
分页逻辑地址
- 页号和页内位移
二进制:
逻辑地址大小2m 页面大小2
n
则前m-n位表示页号 后n位表示页内位移
十进制:
记A为逻辑地址,L为页面大小,则:
页号:P=int(A/L); 页内地址:d=A mod L
- 页号和页内位移
-
映射
-
页号得到物理地址的基地址
- 基地址:页号对应的物理块号乘以页面大小即(块大小)
-
基地址加上页内位移即实际物理地址
-
-
快表
-
设置的一个认为常用的页面集合
- 因为:访问页表要访问2次以上主存
-
局部性原理:所有的存储单元都趋于聚集在一个较小的连续区域
-
增设一个具有并行查找能力的高速缓冲存储器
-
存储频繁访问的页表项
-
-
两级和多级页表
-
每多一次页表会多一次对主存的访问
-
将原来一张大的页表分为多个页表
-
将地址组成部分的页表号分为多个部分
- 每多一个部分表示多出一个页表对其进行记录,
就相当于形成了多表结构
- 每多一个部分表示多出一个页表对其进行记录,
-
实现可非连续存储页表
-
级别增多会导致访问次数的增多
-
-
-
信息共享
-
可重入代码
基本分段存储管理方式
-
逻辑地址结构
-
段表
-
与分页的区别
-
信息共享
-
大小
-
逻辑地址结构
-
段号
- 通过段号可以知道最多允许有多少分段
-
段内地址
- 可以知道每段的最大长度
- 不定
-
-
段页式存储管理方式
-
逻辑地址结构
-
先分段再分段
- 所以会先访问段表再访问页表
- 最后访问信息
-
段表和页表
程序局部性原理
局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
- 程序运行时,无需全部装入内存,装载部分即可
- 如果访问页不在内存,则发出缺页中断,发起页面置换
- 从用户层面看,程序拥有很大的空间,即是虚拟内存
虚拟存储器
-
原理
-
概念
- 在一开始放入部分内存就开始执行
- 请求调入和置换
- 时间上表现为一个对象会在一个较短时间内执行
- 空间上表现为当前执行的指令在一个较小的范围
-
请求调入
- 所访问的信息不在内存的时候
-
置换
- 操作系统将内存中暂时不使用的内容换出到外存
-
局部性原理
-
概念
- 局部性原理是指程序在执行过程中一个较短时间内
,程序所执行的指令地址和操作数地址分别局限于一定区域内
- 局部性原理是指程序在执行过程中一个较短时间内
-
程序中少量分支和过程调用大都是顺序执行
-
过程调用深度有限,
-
存在着许多循环
-
数组等数据结构
-
体现
- 时间局部性
- 空间局部性
-
-
-
物质基础
- 相当数量的外存
- 一定容量的内存
- 地址变换机构
-
内存分配和分配算法
-
进程需要的最小物理块数
-
执行一条指令所涉及的页面数确定
-
单地址指令
- 直接寻址
- 间接寻址
- 功能较强时
-
-
进程的物理块数是固定还是可变
- 固定分配局部置换
- 可变分配全局置换
- 可变分配局部置换
-
按什么原则为进程分配物理块数
- 平均分配算法
- 按比例分配算法
- 按优先级分配算法
- 实现方案
-
局部范围内
-
页面置换算法
-
最佳置换算法
-
将来最长时间不会使用
-
仅具有理论意义
-
-
-
先进先出算法
- 选择调入主存时间最长的页面予以淘汰
-
最近最久未使用置换算法
-
选择最近一段时间内最长时间没有被访问过的页面予以淘汰
-
实现
-
基于寄存器的方法
- 配置一个n位寄存器,在进程访问页面的时候最左置1
- 每过一段时间则计数器右移1位
- 最小数值的寄存器即最近最久未使用的页面
- 配置一个n位寄存器,在进程访问页面的时候最左置1
-
基于栈的方法
- 栈顶存放最近使用过的页面
-
-
时钟置换算法
-
将页面设置成循环队列
- 首次调入内存,置访问位置1
- 被访问置访问位置1
-
缺页中断的时候
-
访问为0则淘汰
- 不为0则置为0
- 接上次判定界面位置
-
改进:访问位和修改位分开考虑
-
有四种情况
- 先寻找访问位和修改位都为0的页面淘汰
- 没有则再寻找访问页为0,修改位为1的淘汰,并将访问位设置为0
- 没有重复一操作
-
-
其他置换算法
-
-
-
-
性能分析
-
有效访问时间
- 访问存储器所需时间的平均值
- 在快表中,则需要访问一次主存
-
不在内存,则要缺页中断时间
-
缺页中断时间
- 缺页中断时间
- 界面传送时间
- 进程重新执行时间
- 仅考虑页面传送时间
-
影响缺页率的因素
- 分配给进程的物理块数
- 页面本身大小
- 程序编制方法
- 页面置换算法
-
-
抖动现象
- 全局抖动 - 局部抖动
-
产生原因
- 进程分配物理块太少 - 置换算法选择不当
- 全局置换使抖动传播
-
预防与解除
- 采用局部置换策略 - 增加分配给相应进程的物理块
- 挂起进程
-
-
页面大小的选择
- 有个最佳界面大小可以选择 - 每个页表项需e个字节 - 内存大小为m - 进程的平均长度为s - 计算开销 碎片项和页表项的总和(pm/2s + me/p)求最小值 - p=2es的算术平方根
-
-
实现方法
-
请求分页存储管理方式
-
调页策略
-
何时
- 预调页策略
- 请求调页策略
-
何处
-
文件区
- 存放文件
- 离散分配
-
对换区
- 存放对换页面
- 连续分配
- 磁盘I/O较高
-
-
情况
-
对换区空间足够
-
对换区空间不够
- 将进程中可能被修改的调入对换区
-
UNIX方式
- 全部存放在文件区
- 运行过调出的放于对换区
- 存在页面共享
-
-
-
支持机构
-
页表
- 扩充的页表
-
缺页中断机构
- 缺页中断
- 中断过程
-
地址变换机构
- 类似于分页存储管理
- 进行缺页中断处理
-
-
-
请求分段存储管理方式
-
请求调段
-
分段置换
-
支持结构
-
段表
-
缺段中断机构
-
类似缺页中断
-
内存管理
-
段的置换
- 有空间则直接调入
- 没有就检查空闲区之后是否满足
- 再不符合则淘汰若干段
-
-
地址变换机构
- 动态地址变换
-
-
分段共享
-
实现
- 为了实现分段共享,可在系统中设置一张共享段表,所有共享分段都在其中占有一表项
- 增加共享进程计数
- 存取控制字段
- 共享段在不同进程中有不同的段号
-
-
分配
- 对于第一个请求使用该段的进程,系统为该共享段分配一个内存区,在将共享段调入
- 同时将该区的始地址填入请求进程的段表
- 在共享段表中增加一项,填写有关数据将count置1
- 填入相关的数据结构
-
回收
- 释放该进程段,将count减一
- 如果变为0则需要系统回收共享段的物理内存及有关表项
-
-
分段保护
-
越界保护
- 用段表长度与逻辑地址中的段号比较
- 段长与逻辑地址中的段内位移比较
-
存取方式检查
- 本段的访问方式
-
环保护结构
- 低编号环具有高优先权
-
原则
- 一个程序可以访问在相同的环或者较低环中的数据 - 一个程序可以调用驻留在相同环或较高环中的服务
-
-
-
-
特征
- 多次性
- 对换性
- 虚拟性
🐳 作者:hiszm 📢 版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,万分感谢。 💬 留言:同时 , 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |