【av68676164(p51-p53)】虚拟内存管理(2)
虚拟内存管理(2)
7.3.4 缺页终端
分级存储体系
cache+内存+辅存

页表扩充—带中断位的页表
| 页号 | 页框号 | 中断位I | 辅存地址 | 访问位 | 修改位 |
|---|---|---|---|---|---|
| 1 | 1 | 0 | |||
| 0 | 0 | 1 |
中断位I—标志该页是否在内存
- 若I=1,不在内存
- 若I=0,在内存
辅存地址—该页在辅存上的位置
访问位——标志该页最近是否被访问
- 0:最近没有被访问
- 1:最近已被访问
修改位—标志该页的数据是否已被修改
- 0:该页未被修改
- 1:该页已被修改
缺页中断
定义:在地址映射过程中,当所要访问的目的页不在内存时,则系统产生异常中断—缺页中断
缺页中断处理程序:中断处理程序把所缺的页从页表指出的辅存地址调入到内存的某个页框中,并更新页表中该页对应的页框号以及修改中断位I为0。
访存指令的执行过程(含缺页中断处理)
A(开始) --> B[启动要处理的指令]
B --> C[给出虚拟地址]
C --> D[获得页号P]
D --> E{查页表 该页在内存吗}
E --在--> F[执行完该命令]
F --> G[获取下条指令]
E --不在--> H[缺页中断]
H --> I{有空闲页框吗}
I --没有--> J[选一页淘汰]
J --> L{是否需要重写}
L --需要--> M[该页写入外存]
L --不要--> K
M --> K
I --有--> K[从外存读取所需页]
K --> N[调整页表]
N --> O[重启被中断指令]
O --> A
O --> A
缺页(中断)率
命中率 = 1-f
\]
任务管理器中查看进程相关信息

7.3.5 页面淘汰
淘汰策略
选择淘汰哪一页的规则称淘汰策略
页面抖动
- 页面在内存和辅存间频繁交换的显现
- “抖动”会导致系统效率下降
好的淘汰策略
- 具有较低的缺页率(高命中率)
- 页面都中较少
最佳算法(OPT算法,Optimal)
思想
淘汰以后不再需要或最远的将来才会用到的页面
例子
分配3个页框。页面序列:A、B、C、D、A、B、E、A、A、B、C、D、E。分析其按照OPT算法淘汰页面的缺页情况
| 序列 | A | B | C | D | A | B | E | A | B | C | D | E |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 記憶體 | A | A | A | A | A | A | A | A | A | C | C | C |
| B | B | B | B | B | B | B | B | B | D | D | ||
| C | D | D | D | E | E | E | E | E | E | |||
| 缺頁 | X | X | X | X | X | X | X |
缺页率=\frac 7 {12} = 58\%
\]
特点
理论上最佳,实践中该算法无法实现。
先进先出淘汰算法(FIFO算法)
思想
淘汰在内存中停留时间最长的页面
例子
分配3个页框。页面序列:A、B、C、D、A、B、E、A、A、B、C、D、E。分析其按照FIFO算法淘汰页面的缺页情况
| 序列 | A | B | C | D | A | B | E | A | B | C | D | E |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 記憶體 | A | A | A | D | D | D | E | E | E | E | E | E |
| B | B | B | A | A | A | A | A | C | C | C | ||
| C | C | C | B | B | B | B | B | D | D | |||
| 缺頁 | X | X | X | X | X | X | X | X | X |
缺页率=\frac 9 {12} = 75\%
\]
优点
实现简单:页面按进入内存的时间排序,淘汰队头页面
缺点
进程只有按顺序访问地址空间时页面命中率才最理想
异常现象:对于一些特定的访问序列,随分配的页框增多,缺页率反而增加
最久未使用算法(LRU,Least Recently Used)
思想
淘汰最长时间未被使用的页面
例子
分配3个页框。页面序列:A、B、C、D、A、B、E、A、A、B、C、D、E。分析其按照LRU算法淘汰页面的缺页情况
| 序列 | A | B | C | D | A | B | E | A | B | C | D | E |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 記憶體 | A | A | A | D | D | D | E | E | E | C | C | C |
| B | B | B | A | A | A | A | A | A | D | D | ||
| C | C | C | B | B | B | B | B | B | E | |||
| 缺頁 | X | X | X | X | X | X | X | X | X | X |
\]
LRU算法的实现
- 页面设置一个移位寄存器R,每当页面被访问的将其重置1
- 周期性地(周期很短)将所有页面的R左移1位(右边补0)
- 当需要淘汰页面时选择R值最大的页
- R值越大,对应页未被使用的时间越长
- R的位数越多且移位周期越小就越精确,但硬件成本也越高
- 若R的位数太少,可能同时出现多个位0的页面,难以比较
LRU近似算法
- 利用页表访问位,页被访问时其值由硬件置1
- 软件周期性(T)地将所有访问位置0
- 当淘汰页面根据该页访问位来判断是否淘汰
- 访问位为1:在时间T内,该页被访问过,保留该页
- 访问位为0:在时间T内,该页未被访问过,淘汰该页
缺点:周期T难定
- 太小,访问位为0的页过多,找不到合适的页淘汰
- 太大,访问位为1的页过多,找不到合适的页淘汰
最不经常使用(LFU)算法
Least Frequently Used
算法原则
- 选择到当前时间为止被访问次数最少的页面
- 每页设置访问计数器,每当页面被访问时,该页面的访问计数器加1
- 发生缺页中断时,淘汰计数值最小的页面,并将所有计数清零
7.3.6 缺页因素与缺页系统缺点
缺页的因素
- 淘汰算法
- 分配给进程的页框数
- 页框越少,越容易缺页
- 页本身的大小
- 页面越小,容易缺页
- 程序的编制方法
- 局部性越好,越不容易缺
- 跳转或分支越多越容易缺页
页面大小的选择
页面太大
浪费内存:极限时分区存储
页面太小
- 页面增多,页表长度增加,浪费内存
- 换页频繁,系统效率低
页面的常见大小
2的整数次幂:1KB、2KB、4KB
页式系统的不足
- 页面划分无逻辑含义
- 页的共享不灵活
- 页内碎片
【av68676164(p51-p53)】虚拟内存管理(2)的更多相关文章
- 【av68676164(p48-p50】虚拟内存管理(1)
7.3.1 页式虚拟内存管理概念 物理内存(即实内存)管理 特点 缺点 1 源程序直接使用内存的物理地址 程序间容易访问冲突 2 程序必须全部装入内存才能运行 内存太小程序无法运行 3 程序占用连续的 ...
- 十问 Linux 虚拟内存管理 (glibc) (二)
版权声明:本文由陈福荣原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/184 来源:腾云阁 https://www.qclo ...
- SoC嵌入式软件架构设计II:没有MMU的CPU虚拟内存管理的设计和实现方法
大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其它代码. 我们PC然在同一时间大量的应用,地址空间差点儿能够整个线性地址空间(除了部分留给操作系统或者预留它用).能够觉 ...
- SoC嵌入式软件架构设计II:否MMU的CPU虚拟内存管理的设计与实现方法
大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其他代码.我们PC然在同一时间大量的应用,能够整个线性地址空间(除了部分留给操作系统或者预留它用),能够觉得每一个应用程序 ...
- windows虚拟内存管理
内存管理是操作系统非常重要的部分,处理器每一次的升级都会给内存管理方式带来巨大的变化,向早期的8086cpu的分段式管理,到后来的80x86 系列的32位cpu推出的保护模式和段页式管理.在应用程序中 ...
- OS之内存管理 --- 虚拟内存管理(二)
关于虚拟内存管理之前的请看:OS之内存管理 - 虚拟内存管理(一) 帧分配 每个进程对的最小帧数是由操作系统的体系结构决定的,但是最大帧数是由可用物理内存的数量决定的.所以在这之间,对于进程的帧的分配 ...
- linux内核内存分配(三、虚拟内存管理)
在分析虚拟内存管理前要先看下linux内核内存的具体分配我開始就是困在这个地方.对内核内存的分类不是非常清晰.我摘录当中的一段: 内核内存地址 ============================ ...
- Linux的虚拟内存管理-如何分配和释放内存,以提高服务器在高并发情况下的性能,从而降低了系统的负载
Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...
- Unix系统编程()虚拟内存管理
在之前学到过进程的内存布局中忽略了一个事实:这一布局存在于虚拟文件中. 因为对虚拟内存的理解将有助于后续对fork系统调用.共享内存和映射文件之类的主题阐述,这里还要学习一下有关虚拟内存的详细内容. ...
随机推荐
- celery 基础教程(二):简单实例
前言 使用celery包含三个方面:1. 定义任务函数.2. 运行celery服务.3. 客户应用程序的调用. 实例一: #1. 定义任务函数 创建一个文件 tasks.py输入下列代码: from ...
- 数据可视化之DAX篇(十)在PowerBI中累计求和的两种方式
https://zhuanlan.zhihu.com/p/64418286 假设有一组数据, 已知每一个产品贡献的利润,如果要计算前几名产品的贡献利润总和,或者每一个产品和利润更高产品的累计贡献占总体 ...
- Python面试【315+道题】
第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解释型和编译型编程语言? P ...
- Ant-Design-Vue中关于Table组件的使用
1. 如何自定义表格列头: <a-table :columns="columns" :dataSource="dataSource"> <sp ...
- PyQt5绘图
QPainter 功能:QPainter实现在QWidget上画图功能 说明:绘图必须在paintEvent中完成,且要在bengin和end之间作图 接口: 方法 描述 begin 开始画图 end ...
- 高效C++:模板和泛型编程
模板和泛型编程的关注重点在编译期,所有的行为都在编译期确定,因此其规则和玩法也有自己特殊的一套,和其他模块不通用. 了解隐式接口和编译期多态 元编程------编译器多态,决定哪个重载函数被调用 cl ...
- css的一些小技巧。修改input样式
在第一次正式写项目的时候,遇到了几个布局的小技巧.记录一下. 我们常常会遇到图片和文字对齐的一种样式.比如 这样的样式,我们写的时候有时候会出现不对齐的情况.我们有俩种方法 一种就是flex的布局,还 ...
- 小白必看,Python入门你要懂那些
Python作为为数不多的全场景开发语言之一,近年来已经获得了越来越多人的关注,而整个IT行业也释放出了大量的Python就业岗位.因此,当前学习Python语言是非常不错的选择,文泽带你进一步走进P ...
- django表单使用
一.表单常用字段类型及参数 表单可以自动生成html代码,每一个字段默认有一个html显示样式,大多数默认为输入框. 字段相当于正则表达式的集合,能够对表单传入的数据进行校验,并且某一部分校验失败时会 ...
- Socket通信,基本方法介绍
Socket是什么呢? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口. 在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口 ...