虚拟内存管理(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. Mysql 实例:mysql语句练习50题(普通sql写法)

    为了练习sql语句,在网上找了一些题,自己做了一遍,收益颇多.很多地方换一种思路,有更好的写法,欢迎指正. 题目地址:https://blog.csdn.net/fashion2014/article ...

  2. web 部署专题(二):gunicore 并发部署(用gunicorn+gevent启动Flask项目)

    转自:https://blog.csdn.net/dutsoft/article/details/51452598 Flask,webpy,Django都带着 WSGI server,当然性能都不好, ...

  3. 数据可视化之powerBI技巧(七)从Excel到PowerBI,生成笛卡尔积的几种方式

    假如分别有100个不重复的姓和名,把每个姓和名进行组合匹配,就可以得到一万个不重复的姓名组合,这种完全匹配的方式就是生成一个姓名的笛卡尔积. 下面就来看看生成笛卡尔积的几种方式,为了展现的方便,以5个 ...

  4. 网页排名算法PagaRank

    网页排名算法PageRank PageRank,网页排名,又叫做网页级别.是一种利用网页之间的超链接数据进行计算的方法.它是由Google的两位创始人提出的. 对于用户而言,网页排名一般是比较主观的, ...

  5. Java8——方法引用

    方法引用就是通过类名或方法名引用已经存在的方法来简化lambda表达式.那么什么时候需要用方法引用呢?如果lamdba体中的内容已经有方法实现了,我们就可以使用方法引用. 一.方法引用的三种语法格式 ...

  6. 题解 洛谷 P5324 【[BJOI2019]删数】

    先考虑对于一个序列,能使其可以删空的的修改次数. 首先可以发现,序列的排列顺序是没有影响的,所以可以将所有数放到桶里来处理. 尝试对一个没有经过修改的可以删空的序列来进行删数,一开始删去所有的\(n\ ...

  7. Netty 学习笔记(4) ------ EventLoopGroup

    EventLoopGroup负责管理Channel的事件处理任务,继承自java.util.concurrent包下的Executor,所以其结构类似与线程池,管理多个EventLoop. 而一个Ev ...

  8. JS获取格式为YYYY-MM-DD的当前日期

    JS获取格式为YYYY-MM-DD的当前日期 var date = new Date();  var mon = date.getMonth() + 1; var day = date.getDate ...

  9. 大数据框架Hive优化方法

    常规调优手段 Fetch抓取 某些情况查询不必用MapReduce计算,比如select*,可以直接读取文件 本地模式 有时数据量比较小,hive可以通过本地模式在单台机器上处理所有任务,对于小数据集 ...

  10. java基础(六)--常用转义字符

    1.换行:"\n"