虚拟内存管理(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. JavaScript 基础 学习 (四)

    JavaScript 基础 学习 (四) 解绑事件 dom级 事件解绑 ​ 元素.on事件类型 = null ​ 因为赋值的关系,所以给事件赋值为 null 的时候 ​ 事件触发的时候,就没有事件处理 ...

  2. Mysql---搭建简单集群,实现主从复制,读写分离

    参考博客:https://blog.csdn.net/xlgen157387/article/details/51331244 A. 准备:多台服务器,且都可以互相随意访问root用户,都可以随意进行 ...

  3. DEX文件解析--3、dex文件字符串解析

    一.前言    前两篇文章链接:     1.DEX文件头解析     2.DEX文件校验和解析    PS:前几天检查文件夹的时候发现DEX文件解析还只写了开头,正好找点事情来做,就去接着解析DEX ...

  4. Jquery如何使用动画效果改变背景色

    Jquery如何使用动画效果改变背景色 一.问题引入 jquery的animate动画虽然强大,但是无法使用其进行背景色(background-color)的动画效果变化,因为animate动画效果只 ...

  5. javascript实战 : 简单的颜色渐变

    HTML <div id="color"></div> CSS .item{ display:inline-block; margin:10px; widt ...

  6. 七牛云如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?

    一般情况下,点账户名——账户设置——安全设置,即可开通两步验证 具体步骤见链接  七牛云如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?   二次验证码小程序(官网)对比谷歌身份验证器APP ...

  7. 无法定位序数242于动态链接库,Anaconda3\Library\bin\mkl_intel_thread

    python.exe-找不到序数:无法定位序数242与动态链接库libiomp5md.dll上.或无法定位程序输入点 mkl_dft_create_descriptor_md于动态链接库 Ancond ...

  8. $0.\dot{9}=1,是指以1为极限,而非初等数学的相等“=”$

    $注:文中的讨论,没有使用严格的 \epsilon 极限定义,而是简单假设$ 按照中小学的定义,整数,有限小数,无限循环小数是有理数.无限不循环小数是无理数. $\frac{1}{3}=0.\dot{ ...

  9. 详解 awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}每个字段的意思

    用这个列子说好了如果NF代表字段 那最后应该是7 才对啊 还有最后怎么都是1呢?END前面的是查看并发吧 后面是查看 tcp连接数 是这样吗?       awk下标采用字符串来表示可能你在其它语言见 ...

  10. C# 13位时间戳(unix时间戳)

    1.转义字符用在中间. "\"' 2.C#获取13位时间戳(unix时间戳) /// <summary>   /// 将c# DateTime时间格式转换为Unix时间 ...