虚拟内存管理(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. 数据可视化之DAX篇(十三)熟练使用FORMAT函数,轻松自定义数据格式

    https://zhuanlan.zhihu.com/p/64420449 在进行数据分析时,需要对某个数据进行格式调整的情形经常会遇到,在DAX中有一个专门进行格式调整的函数:FORMAT. 其实对 ...

  2. Flask 基础组件(七):蓝图

    1 蓝图资源 蓝图有自己的目录,它的所有资源都在其目录下.蓝图的资源目录是由创建Blueprint对象时传入的模块名”__name__”所在的位置决定的.同时,我们可以指定蓝图自己的模板目录和静态目录 ...

  3. mysql数据delete后的数据恢复

    误删除了一个订单,订单号为:D200711008, 现根据binlog对该订单数据进行恢复. 1. 查看binlog日志, 取最新的一个 mysql-bin.000635 show binary lo ...

  4. Substance Designer学习资料参考及学习入门感受

    先奉上大佬写的: 名称:Substance Designer 萌新入门流程 地址:https://zhuanlan.zhihu.com/p/56194917 作者:ShadowjackLeeSD小菜鸡 ...

  5. vscode用MinGW和Clang配置C++环境

    vscode是个不错的编辑器,简洁轻量,就是一开始的时候需要对环境进行配置,开个贴记录一下怎么用MingGW64+clang来配置. 下载地址 LLVM Download Page Pre-Built ...

  6. Puppeteer爬虫实战(二)

    连接浏览器 上一篇说到了Puppeteer本质是使用了Chrome Devtools协议控制浏览器,本篇就说说连接方式. 常规Hook浏览器 此方式其实就是需要一个浏览器可执行文件(不同平台需要下载对 ...

  7. 学会这个,助你升值加薪自动化框架之python+selenium+pytest

    1.概述 selenium: 基于JavaScript代码库的自动化测试框架,通过脚本语言,模拟用户行为操作,最接近用户真实场景,实现对web自动测试. Selenium,是目前的最火爆企业最主流的w ...

  8. CentOS 下的验证码显示问题

    开发环境 AND 生产环境.gif 问题: 项目部署到 CentOS 的服务器后,图片验证码请求时出现 500 错误, 日志一直是 ArrayIndexOfBoundsException:0,数组第 ...

  9. DJANGO-天天生鲜项目从0到1-009-购物车-Ajax实现添加至购物车功能

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  10. Android 文件存储浅析

    最近做的一个需求和文件存储有关系.由于之前没有系统梳理过,对文件存储方面的知识一直很懵懂.趁着周末有时间,赶紧梳理一波. 这首从网上找到的一张图,很好的概括了外部存储和内部存储. 下面我们再来具体介绍 ...