虚拟内存管理(2)

7.3.4 缺页终端

分级存储体系

cache+内存+辅存

页表扩充—带中断位的页表

页号 页框号 中断位I 辅存地址 访问位 修改位
1 1 0
0 0 1
  1. 中断位I—标志该页是否在内存

    • 若I=1,不在内存
    • 若I=0,在内存
  2. 辅存地址—该页在辅存上的位置

  3. 访问位——标志该页最近是否被访问

    • 0:最近没有被访问
    • 1:最近已被访问
  4. 修改位—标志该页的数据是否已被修改

    • 0:该页未被修改
    • 1:该页已被修改

缺页中断

定义:在地址映射过程中,当所要访问的目的页不在内存时,则系统产生异常中断—缺页中断

缺页中断处理程序:中断处理程序把所缺的页从页表指出的辅存地址调入到内存的某个页框中,并更新页表中该页对应的页框号以及修改中断位I为0。

访存指令的执行过程(含缺页中断处理)

graph TD
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

缺页(中断)率

\[缺页率f = \frac{缺页次数}{访问页面总次数}\\
命中率 = 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

\[缺页次数=7\\
缺页率=\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

\[缺页次数=9\\
缺页率=\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

\[缺页次数=10\\缺页率=\frac {10} {12} = 83\%
\]

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)的更多相关文章

  1. 【av68676164(p48-p50】虚拟内存管理(1)

    7.3.1 页式虚拟内存管理概念 物理内存(即实内存)管理 特点 缺点 1 源程序直接使用内存的物理地址 程序间容易访问冲突 2 程序必须全部装入内存才能运行 内存太小程序无法运行 3 程序占用连续的 ...

  2. 十问 Linux 虚拟内存管理 (glibc) (二)

    版权声明:本文由陈福荣原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/184 来源:腾云阁 https://www.qclo ...

  3. SoC嵌入式软件架构设计II:没有MMU的CPU虚拟内存管理的设计和实现方法

    大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其它代码. 我们PC然在同一时间大量的应用,地址空间差点儿能够整个线性地址空间(除了部分留给操作系统或者预留它用).能够觉 ...

  4. SoC嵌入式软件架构设计II:否MMU的CPU虚拟内存管理的设计与实现方法

    大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其他代码.我们PC然在同一时间大量的应用,能够整个线性地址空间(除了部分留给操作系统或者预留它用),能够觉得每一个应用程序 ...

  5. windows虚拟内存管理

    内存管理是操作系统非常重要的部分,处理器每一次的升级都会给内存管理方式带来巨大的变化,向早期的8086cpu的分段式管理,到后来的80x86 系列的32位cpu推出的保护模式和段页式管理.在应用程序中 ...

  6. OS之内存管理 --- 虚拟内存管理(二)

    关于虚拟内存管理之前的请看:OS之内存管理 - 虚拟内存管理(一) 帧分配 每个进程对的最小帧数是由操作系统的体系结构决定的,但是最大帧数是由可用物理内存的数量决定的.所以在这之间,对于进程的帧的分配 ...

  7. linux内核内存分配(三、虚拟内存管理)

    在分析虚拟内存管理前要先看下linux内核内存的具体分配我開始就是困在这个地方.对内核内存的分类不是非常清晰.我摘录当中的一段: 内核内存地址 ============================ ...

  8. Linux的虚拟内存管理-如何分配和释放内存,以提高服务器在高并发情况下的性能,从而降低了系统的负载

    Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...

  9. Unix系统编程()虚拟内存管理

    在之前学到过进程的内存布局中忽略了一个事实:这一布局存在于虚拟文件中. 因为对虚拟内存的理解将有助于后续对fork系统调用.共享内存和映射文件之类的主题阐述,这里还要学习一下有关虚拟内存的详细内容. ...

随机推荐

  1. linux09 /消息队列、saltstack工具

    linux09 /消息队列.saltstack工具 目录 linux09 /消息队列.saltstack工具 1. 消息队列之rabbitmq 2. 云计算 3. 远程过程调用的实现:rpc 4. s ...

  2. EM算法理论与推导

    EM算法(Expectation-maximization),又称最大期望算法,是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计(或极大后验概率估计) 从定义可知,该算法是用来估计参数的,这 ...

  3. python生成器原理剖析

    python生成器原理剖析 函数的调用满足"后进先出"的原则,也就是说,最后被调用的函数应该第一个返回,函数的递归调用就是一个经典的例子.显然,内存中以"后进先出&quo ...

  4. 数据可视化之PowerQuery篇(十三)Power BI总计行错误,这个技巧一定要掌握

    https://zhuanlan.zhihu.com/p/102567707 ​前一段介绍过一个客户购买频次统计的案例: Power BI 数据分析应用:客户购买频次分布. 我并没有在文章中显示总计行 ...

  5. HotSpot的对象模型(6)

    接着上一篇,我们继续来讲oopDesc相关的子类. 3.instanceOopDesc类 instanceOopDesc类的实例表示除数组对象外的其它对象.在HotSpot中,对象在内存中存储的布局可 ...

  6. 用CBrother脚本实现smtp协议发送一份邮件

    用CBrother脚本实现smtp协议发送一份邮件 之前用CBrother脚本写了一个拯救“小霸王服务器”的程序,公司人用着都挺好用,但是有时候谁重启了服务器其他人不知道,造成了多人多次重启,每个人都 ...

  7. Python Ethical Hacking - WEB PENETRATION TESTING(1)

    WHAT IS A WEBSITE Computer with OS and some servers. Apache, MySQL ...etc. Cotains web application. ...

  8. Git、Github、Gitkraken 学习笔记

    <Git.Github.Gitkraken 学习笔记> 一.写在前面 1.参考资料 本文参考 <Pro Git> 一书. 在官网有免费在线版可供阅读:https://git-s ...

  9. Porter 进入 CNCF 云原生全景图,新版本即将发布!

    近日,KubeSphere 社区子项目面向物理机环境的负载均衡器 Porter 正式进入 CNCF Landscape.CNCF Landscape 在云原生实践过程中的每个环节帮助用户了解有哪些具体 ...

  10. NVIDIA GPU Volta架构简述

    NVIDIA GPU Volta架构简述 本文摘抄自英伟达Volta架构官方白皮书:https://www.nvidia.com/content/dam/en-zz/Solutions/Data-Ce ...