iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >什么是缺页错误Page Fault
  • 844
分享到

什么是缺页错误Page Fault

2024-04-02 19:04:59 844人浏览 安东尼
摘要

本篇内容主要讲解“什么是缺页错误Page Fault”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是缺页错误Page Fault”吧!术语约定VA:Virt

本篇内容主要讲解“什么是缺页错误Page Fault”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是缺页错误Page Fault”吧!

术语约定

  • VA:Virtual Address 虚拟地址

  • PA:Physical Address 物理地址

  • MMU:Memory Manage Unit 内存管理单元

  • TLB:Translation Lookaside Buffer 旁路快表缓存/地址变换高速缓存

  • PTE:Page Table Entry 分页表项

内存的惰性分配

以32位的linux系统为例,每个进程独立拥有4GB的虚拟地址空间,根据局部性原理没有必要也不可能为每个进程分配4GB的物理地址空间。

64位系统也是一样的道理,只不过空间寻址范围大了很多很多倍,进程的虚拟地址空间会分为几个部分:

什么是缺页错误Page Fault

实际上只有程序运行时用到了才去内存中寻找虚拟地址对应的页帧,找不到才可能进行分配,这就是内存的惰性(延时)分配机制。

什么是缺页错误Page Fault

对于一个运行中的进程来说,不是所有的虚拟地址在物理内存中都有对应的页,如图展示了部分虚拟地址存在对应物理页的情况:

什么是缺页错误Page Fault

虚拟地址空间根据固定大小一般是4KB进行划分,物理内存可以设置不同的页面大小,通常物理页大小和虚拟页大小是一样的,本文按照物理页4KB大小展开。

经过前面的分析,我们将面临一个问题:如何将虚拟地址准确快速地映射到物理页呢?

>>>高能预警 敲黑板 本段小结<<<

  • 1. Linux的虚拟地址空间就是空头支票,看着很大但是实际对应的物理空间只有很少的一部分。

  • 2.内存的惰性分配是个有效的机制,可以保证内存利用率和服务器利用率,是资源合理配置的方法。

  • 3.大量的虚拟地址到物理地址的快速准确地查询转换是一个难题。

CPU如果获取内存中的数据

CPU并不直接和物理内存打交道,而是把地址转换的活外包给了MMU,MMU是一种硬件电路,其速度很快,主要工作是进行内存管理,地址转换只是它承接的业务之一。

什么是缺页错误Page Fault

一起看看MMU是如何搞定地址转换的。

MMU和Page Table

每个进程都会有自己的页表Page  Table,页表存储了进程中虚拟地址到物理地址的映射关系,所以就相当于一张地图,MMU收到CPU的虚拟地址之后开始查询页表,确定是否存在映射以及读写权限是否正常,如图:

什么是缺页错误Page Fault

对于4GB的虚拟地址且大小为4KB页,一级页表将有2^20个表项,页表占有连续内存并且存储空间大,多级页表可以有效降低页表的存储空间以及内存连续性要求,但是多级页表同时也带来了查询效率问题。

什么是缺页错误Page Fault

我们以2级页表为例,MMU要先进行两次页表查询确定物理地址,在确认了权限等问题后,MMU再将这个物理地址发送到总线,内存收到之后开始读取对应地址的数据并返回。

什么是缺页错误Page Fault

MMU在2级页表的情况下进行了2次检索和1次读写,那么当页表变为N级时,就变成了N次检索+1次读写。

可见,页表级数越多查询的步骤越多,对于CPU来说等待时间越长,效率越低,这个问题还需要优化才行。

>> 本段小结 敲黑板 划重点 <<

  • 1.页表存在于进程的内存之中,MMU收到虚拟地址之后查询Page Table来获取物理地址。

  • 2.单级页表对连续内存要求高,于是引入了多级页表,但是多级页表也是一把双刃剑,在减少连续存储要求且减少存储空间的同时降低了查询效率。

MMU和TLB的故事

MMU和TLB的故事就这样开始了...

CPU觉得MMU干活虽然卖力气,但是效率有点低,不太想继续外包给它了,这一下子把MMU急坏了。

MMU于是找来了一些精通统计的朋友,经过一番研究之后发现CPU用的数据经常是一小搓,但是每次MMU都还要重复之前的步骤来检索,害,就知道埋头干活了,也得讲究方式方法呀!

找到瓶颈之后,MMU引入了新武器,江湖人称快表的TLB,别看TLB容量小,但是正式上岗之后干活还真是不含糊。

什么是缺页错误Page Fault

当CPU给MMU传新虚拟地址之后,MMU先去问TLB那边有没有,如果有就直接拿到物理地址发到总线给内存,齐活。

TLB容量比较小,难免发生Cache Miss,这时候MMU还有保底的老武器页表 Page  Table,在页表中找到之后MMU除了把地址发到总线传给内存,还把这条映射关系给到TLB,让它记录一下刷新缓存。

什么是缺页错误Page Fault

TLB容量不满的时候就直接把新记录存储了,当满了的时候就开启了淘汰大法把旧记录清除掉,来保存新记录,彷佛完美解决了问题。

在TLB和Page Table加持之下,CPU感觉最近MMU比较给力了,就问MMU怎么做到的?MMU就一五一十告诉了CPU。

CPU说是个不错的路子,随后说出了自己的建议:TLB还是有点小,缓存不命中也是经常发生的,要不要搞个大的,这样存储更多访问更快?

MMU一脸苦笑说道大哥TLB很贵的,要不你给涨点外包费?话音未落,CPU就说涨工资是不可能了,这辈子都不可能了。

>>>高能预警 敲黑板 本段小结<<<

1. CPU要根据用户进程提供的虚拟地址来获取真实数据,但是它并不自己做而是交给了MMU。

2. MMU也是个聪明的家伙,集成了TLB来存储CPU最近常用的页表项来加速寻址,TLB找不到再去全量页表寻址,可以认为TLB是MMU的缓存。

3. TLB的容量毕竟有限,为此必须依靠Page Table一起完成TLB Miss情况的查询,并且更新到TLB建立新映射关系。

缺页异常Page Fault大揭秘

设想CPU给MMU的虚拟地址在TLB和Page Table都没有找到对应的物理页帧或者权限不对,该怎么办呢?

没错,这就是缺页异常Page Fault,它是一个由硬件中断触发的可以由软件逻辑纠正的错误。

 PageFault,它来了

假如目标内存页在物理内存中没有对应的页帧或者存在但无对应权限,CPU 就无法获取数据,这种情况下CPU就会报告一个缺页错误。

由于CPU没有数据就无法进行计算,CPU罢工了用户进程也就出现了缺页中断,进程会从用户态切换到内核态,并将缺页中断交给内核的 Page Fault  Handler 处理。

什么是缺页错误Page Fault

缺页异常并不可怕,只要CPU要的虚拟地址经过MMU的一番寻址之后没有找到或者找到后无权限,就会出现缺页异常,因此触发异常后的处理流程将是重点内容。

 缺页错误的分类处理

缺页中断会交给PageFaultHandler处理,其根据缺页中断的不同类型会进行不同的处理:

  • Hard Page Fault

也被称为Major Page  Fault,翻译为硬缺页错误/主要缺页错误,这时物理内存中没有对应的页帧,需要CPU打开磁盘设备读取到物理内存中,再让MMU建立VA和PA的映射。

  • Soft Page Fault

也被称为Minor Page  Fault,翻译为软缺页错误/次要缺页错误,这时物理内存中是存在对应页帧的,只不过可能是其他进程调入的,发出缺页异常的进程不知道而已,此时MMU只需要建立映射即可,无需从磁盘读取写入内存,一般出现在多进程共享内存区域。

  • Invalid Page Fault

翻译为无效缺页错误,比如进程访问的内存地址越界访问,又比如对空指针解引用内核就会报segment fault错误中断进程直接挂掉。

什么是缺页错误Page Fault

 缺页错误出现的原因

不同类型的Page Fault出现的原因也不一样,常见的几种原因包括:

  • 非法操作访问越界

这种情况产生的影响也是最大的,也是Coredump的重要来源,比如空指针解引用或者权限问题等都会出现缺页错误。

  • 使用malloc新申请内存

malloc机制是延时分配内存,当使用malloc申请内存时并未真实分配物理内存,等到真正开始使用malloc申请的物理内存时发现没有才会启动申请,期间就会出现Page  Fault。

  • 访问数据被swap换出

物理内存是有限资源,当运行很多进程时并不是每个进程都活跃,对此OS会启动内存页面置换将长时间未使用的物理内存页帧放到swap分区来腾空资源给其他进程,当存在于swap分区的页面被访问时就会触发Page  Fault从而再置换回物理内存。

>>> 敲黑板 划重点 本段小结:<<<

触发Page Fault的原因可能有很多,归根到底也只有几种大类:

1. 如使用共享内存区域,没有存储VA->PA的映射但是存在物理页帧的软缺页错误,在Page Table/TLB中建立映射关系即可。

2.  访问的地址在物理内存中确实不存在,需要从磁盘/swap分区读入才能使用,这种性能影响会比较大,因为磁盘太慢了,尽量使用高性能的SSD来降低延时。

3. 访问的地址内存非法,缺页错误会升级触发SIGSEGV信号结束进程,这种属于可以导致进程挂掉的一种缺页错误。

什么是缺页错误Page Fault

到此,相信大家对“什么是缺页错误Page Fault”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 什么是缺页错误Page Fault

本文链接: https://www.lsjlt.com/news/84890.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 什么是缺页错误Page Fault
    本篇内容主要讲解“什么是缺页错误Page Fault”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是缺页错误Page Fault”吧!术语约定VA:Virt...
    99+
    2022-10-19
  • 手机网页错误101指的是什么意思
    这篇文章给大家分享的是有关手机网页错误101指的是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。错误101在微软Internet Explorer存在的意义是404或者403,如果使用Internet E...
    99+
    2023-06-20
  • List列表标签和Page分页标签的通用参数是什么
    这篇“List列表标签和Page分页标签的通用参数是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“List列表标签和Pa...
    99+
    2023-06-26
  • java中的错误是什么
    在Java中,根据错误性质将运行错误分为两大类:错误和异常。 (推荐学习:java课程)Java中的所有异常都是由Throwable类的子类生成的对象,所有的异常类都是Throwable类的子类或子类的子类。Thro...
    99+
    2021-08-15
    java入门 java
  • php中302是什么错误
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑302 代表暂时性转移(Temporarily Moved ),是HTTP响应状态码并不是错误。302是临时重定向的意思,表示被访问页面因为各种需要被临时跳转到其他页面...
    99+
    2020-11-05
    php
  • php中401是什么错误
    PHP 401错误码是指服务器拒绝访问用户请求的资源。这个错误可能会让许多用户感到困惑,因为通常人们认为 401 错误码只有在需要提供对服务器的身份验证时才会出现。 实际上,这种错误码在许多不同的网络设置中都可能出现,包括 Web 应用程序...
    99+
    2023-05-14
    php 错误码 401
  • oracle中12154错误是什么
    Oracle中的12154错误是指TNS解析器无法解析给定的服务名或连接描述符。这个错误通常发生在尝试连接到Oracle数据库时,而...
    99+
    2023-08-24
    oracle
  • golang错误是什么意思
    golang错误是一个特殊的类型,用于表示函数执行期间可能发生的问题或异常情况,当函数无法正常执行时,可能会返回一个错误对象作为函数的结果,错误对象通常包含一个描述错误的字符串,以及其他属性,如错误代码或错误源。本文操作环境:Windows...
    99+
    2023-07-19
  • 网页设计中7个令人抓狂的错误是什么
    这期内容当中小编将会给大家带来有关网页设计中7个令人抓狂的错误是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。所有人都知道网页设计的重要性,糟糕的网页设计会给用户带来糟糕的体验,从而影响网页的流量,或...
    99+
    2023-06-10
  • go语言eof错误是什么
    在go语言中,eof是指文件结尾错误,是Go语言中最重要的错误变量,存在于io包中,用于表示输入流的结尾。因为每个文件都有一个结尾,所以“io.EOF”很多时候并不能算是一个错误,它更重要的是表示一个输入流结束了。本教程操作环境:windo...
    99+
    2023-05-14
    eof错误 go语言
  • oracle错误3114是什么问题
    oracle错误3114是Oracle客户端无法与服务器进行通信的问题,解决方法:1、检查网络配置,确认网络连接正常;2、检查防火墙设置,确保允许客户端访问服务器的端口;3、检查监听器的状态,确保它正在运行,并且配置正确;4、检查数据库实例...
    99+
    2023-07-10
  • PHP页面静态化的优缺点是什么
    这篇文章主要介绍“PHP页面静态化的优缺点是什么”,在日常操作中,相信很多人在PHP页面静态化的优缺点是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP页面静态化的优缺点是什么”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • 网页设计人员应该注意的Web设计错误是什么
    这篇文章的内容主要围绕网页设计人员应该注意的Web设计错误是什么进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!1. 用户必须在几秒钟知道网站是做什么...
    99+
    2023-06-08
  • springmvc错误处理机制是什么
    这篇“springmvc错误处理机制是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springmvc错误处理机制是什么...
    99+
    2023-06-17
  • php执行错误是什么意思
    本文操作环境:Windows7系统、PHP7.1、Dell G3电脑。php执行错误是什么意思?具体问题描述:php程序执行提示错误,这是什么错误啊我在网上下载的PHP版许愿树留言板程序,来测试一下自己机子搭建的PHP环境,运行phpinf...
    99+
    2014-10-20
    php
  • php中401错误指的是什么
    本文小编为大家详细介绍“php中401错误指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“php中401错误指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。PHP 401错误码是指服务器拒绝访问...
    99+
    2023-07-05
  • php.ini详细错误指的是什么
    这篇文章主要讲解了“php.ini详细错误指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php.ini详细错误指的是什么”吧!PHP ini详细错误是一种配置错误,通常会在服务器上...
    99+
    2023-07-06
  • linux中500错误指的是什么
    这篇文章主要讲解了“linux中500错误指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux中500错误指的是什么”吧!在linux中,500错误指的是“500 Intern...
    99+
    2023-07-02
  • 美国服务器网页错误代码所代表的意思是什么
    美国服务器常见网页错误代码所代表的意思:1、Client Request Errors指的是客户端请求出错;2、4xx指的是客户端错误;3、404 Not Found指的是没有找到相关网页;4、Server Errors指的是美国服务器出现...
    99+
    2022-10-24
  • 服务器405错误指的是什么
    本文小编为大家详细介绍“服务器405错误指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“服务器405错误指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2023-03-07
    服务器
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作