虚拟内存管理(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. 数据可视化之PowerQuery篇(三)学会使用PowrQuery的自定义函数

    https://zhuanlan.zhihu.com/p/64415763 使用Power Query进行复杂一些的数据处理,离不开M函数,目前已经有超过700个函数了,基本上各式各样的数据处理需求都 ...

  2. 计算机网络期末实验考题(Pacekt Tracer搭建网络拓扑实现通信)

    期末考试的这一道实验题目具体要求如下:    搭建一个包含5个路由器.两个交换机和3个PC机的连通网络,网络拓扑结构自定,网络IP地址,子网掩码等信息自定, 最后实现3个PC机互通.要求:1)3个PC ...

  3. (2)简单理解和使用webpack-dev-server

    webpack-dev-server能做什么? 每次打包都得像之前一样使用webapck 入口文件 -o 出口文件,每次修改都得打包一次过于麻烦,可以使用webpack-dev-server实现自动打 ...

  4. 图灵学院笔记-java虚拟机底层原理

    Table of Contents generated with DocToc 一.java虚拟机概述 二.栈内存解析 2.1 概述 2.2 栈帧内部结构 2.2.1 我们来解析一下compute() ...

  5. Saas Erp以及分销 助手

    首先贴一下相关的截图 SaasErp 登陆页 Saas Erp主页 Saas Erp 其中的商品页 Saas Erp  打印模板设计页 分销助手登录页/手势密码页/主页 1.SaaS是Software ...

  6. SQL Server数据类型对应.Net Core中的数据类型

    SQL C# bigint(sql大小:8byte) long(64位) int, integer(sql大小:4byte) int(32位) smallint(sql大小:2byte) short( ...

  7. 全卷积神经网络FCN详解(附带Tensorflow详解代码实现)

    一.导论 在图像语义分割领域,困扰了计算机科学家很多年的一个问题则是我们如何才能将我们感兴趣的对象和不感兴趣的对象分别分割开来呢?比如我们有一只小猫的图片,怎样才能够通过计算机自己对图像进行识别达到将 ...

  8. MySQL组复制MGR(一)-- 技术概述

    (一)复制技术的发展 MySQL的复制技术主要经历了异步主从复制,半同步复制,组复制(Group Replication)3个阶段. (1)传统的异步主从复制 传统的MySQL提供了一种简单的主从复制 ...

  9. Django学习路9_流程复习

    以下图示为 学习过程中,在千锋教育视频上截图的                     视频链接: https://www.bilibili.com/video/BV1rx411X717?p=11 2 ...

  10. pdb 进行调试

    import pdb a = 'aaa' pdb.set_trace( ) b = 'bbb' c = 'ccc' final = a+b+c print(final) import pdb a = ...