【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系统调用.共享内存和映射文件之类的主题阐述,这里还要学习一下有关虚拟内存的详细内容. ...
随机推荐
- 数据可视化基础专题(六):Pandas基础(五) 索引和数据选择器(查找)
1.序言 如何切片,切块,以及通常获取和设置pandas对象的子集 2.索引的不同选择 对象选择已经有许多用户请求的添加,以支持更明确的基于位置的索引.Pandas现在支持三种类型的多轴索引. .lo ...
- 数据可视化之powerBI基础(二十)Power BI度量值和新建表,有什么异同?
https://zhuanlan.zhihu.com/p/101812525 PowerBI中,有三个地方可以使用DAX,分别是度量值.新建列和新建表,这三个功能并成一排摆放在这里,如图所示, 之前 ...
- 数据可视化之DAX篇(一)Power BI时间智能函数如何处理2月29日的?
https://zhuanlan.zhihu.com/p/109964336 今年是闰年,有星友问我,在Power BI中,2月29日的上年同期是怎么计算的? 这是个好问题,正好梳理一下,Power ...
- Flask 基础组件(六):Session
除请求对象之外,还有一个 session 对象.它允许你在不同请求间存储特定用户的信息.它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥. 设 ...
- 数据分析02 /pandas基础
数据分析02 /pandas基础 目录 数据分析02 /pandas基础 1. pandas简介 2. Series 3. DataFrame 4. 总结: 1. pandas简介 numpy能够帮助 ...
- 牛客网Java工程师能力评估
感觉很奇怪,出的题做完之后感觉自己没学过Java一样,不过凭借一些做题的技巧和一些记忆,正确率百分之50,排名前百分之30多,记录一下这次的题目,方便我以后进行二次复习吧 1.下面有关JVM内存,说法 ...
- CAS底层原理与ABA问题
CAS定义 CAS(Compare And Swap)是一种无锁算法.CAS算法是乐观锁的一种实现.CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B.当预期值A和内存值V相同时,将内存值V修 ...
- 推荐收藏:100道Linux笔试题,能拿90分以上的都去了BAT
本套笔试题共100题,每题1分,共100分.(参考答案在文章末尾) 1. cron 后台常驻程序 (daemon) 用于: A. 负责文件在网络中的共享 B. 管理打印子系统 C. 跟踪管理系统信息和 ...
- spring tx——TransactionManger
TransactionDefinition--事务定义 定义事务属性,包括传播级别.隔离级别.名称.超时.只读等 TransactionStatus--事务状态 事务状态,包含事务对象(jdbc为Da ...
- git的核心命令使用和底层原理解析
文章目录: GIT体系概述 GIT 核心命令使用 GIT 底层原理 一.GIT体系概述 GIT 与 svn 主要区别: 存储方式不一样 使用方式不一样 管理模式不一样 1.存储方式区别 GIT把内容按 ...