缺少linux内核,Linux内核缺页

整个缺页异常的处理过程非常复杂,我们这里只简单介绍一下缺页涉及到的内核函数。

当CPU产生一个异常时,将会跳转到异常处理的整个处理流程中。对于缺页异常,CPU将跳转到page_fault异常处理程序中,该异常处理程序会调用do_page_fault()函数,该函数通过读取CR2寄存器获得引起缺页的线性地址,通过各种条件判断以便确定一个合适的方案来处理这个异常。

do_page_fault()该函数通过各种条件来检测当前发生异常的情况,但至少do_page_fault()会区分出引发缺页的两种情况:由编程错误引发异常,以及由进程地址空间中还未分配物理内存的线性地址引发。对于后一种情况,通常还分为用户空间所引发的缺页异常和内核空间引发的缺页异常。内核引发的异常是由vmalloc()产生的,它只用于内核空间内存的分配。我们这里需要关注的是用户空间所引发的异常情况。这部分工作从do_page_fault()中的good_area标号处开始执行,主要通过handle_mm_fault()完成。

handle_mm_fault()该函数的主要功能是为引发缺页的进程分配一个物理页框,它先确定与引发缺页的线性地址对应的各级页目录项是否存在,如何不存在则分进行分配。具体如何分配这个页框是通过调用handle_pte_fault()完成的。

handle_pte_fault()该函数根据页表项pte所描述的物理页框是否在物理内存中,分为两大类:请求调页:被访问的页框不再主存中,那么此时必须分配一个页框。写时复制:被访问的页存在,但是该页是只读的,内核需要对该页进行写操作,此时内核将这个已存在的只读页中的数据复制到一个新的页框中。用户进程访问由malloc()分配的内存空间属于第一种情况。对于请求调页,handle_pte_fault()仍然将其细分为三种情况:

1.如果页表项确实为空(pte_none(entry)),那么必须分配页框。如果当前进程实现了vma操作函数集合中的fault钩子函数,那么这种情况属于基于文件的内存映射,它调用do_linear_fault()进行分配物理页框。否则,内核将调用针对匿名映射分配物理页框的函数do_anonymous_page()。

2.如果检测出该页表项为非线性映射(pte_file(entry)),则调用do_nonlinear_fault()分配物理页。

3.如果页框事先被分配,但是此刻已经由主存换出到了外存,则调用do_swap_page()完成页框分配。

在以上三个函数中缺页异常处理函数通过alloc_zeroed_user_highpage_movable()来完成物理页的分配过程。alloc_zeroed_user_highpage_movable()函数最终调用了alloc_pages()。  经过这样一个复杂的过程,用户进程所访问的线性地址终于对应到了一块物理内存。

参考:

0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单好用的Adapter---ArrayAdapter

2019独角兽企业重金招聘Python工程师标准>>> ListView中比较简单但又非常方便的ArrayAdapter。 ArrayAdapter是BaseAdapter的派生类,在BaseAdapter的基础上,添加了一项重大的功能:可以直接使用泛型构造。 先来看一个简单的例子: Overrideprot…

表单数据自动录入_Excel总表录入、分表自动更新,只要数据透视表和一个快捷键就行...

合并多个分表到一个总表中,这样的操作很常见。但,有时候我们也需要反过来,即将一个总表拆分成多个子表,并且在总表中录入/修改数据后,每个分表都可以自动更新数据。如以下资金流动表。除了资金流水,我们还特…

.net Core中如何限制接口请求次数

.net core中如何限制接口请求次数像AspNetCoreRateLimit这种轮子我前面有给大家介绍过,今天就不说了,我们来聊聊背后的原理,欢迎各位大佬指正!像我们经常看的一些APi请求接口网站:拿请求国外主要城市的七日接口举例&am…

linux之setsid命令

1 setsid命令 setsid主要是重新创建一个session,子进程从父进程继承了SessionID、进程组ID和打开的终端,子进程如果要脱离父进程,不受父进程控制,我们可以用这个setsid命令 2 测试 比如我们ping baidu.com setsid ping baidu.com 这个时候我们再ctrl…

【深入JAVA】java注解

在阅读的过程中有不论什么问题,欢迎一起交流 邮箱:1494713801qq.com QQ:1494713801 1、什么是java注解 注解,顾名思义,注解,就是对某一事物进行加入凝视说明,会存放一些信息。这些信息可能对以后某…

vlan跨交换机 udp广播_【详解】VLAN和VXLAN有何区别?VXLAN运用场景有哪些?

随着网络技术的发展,云计算凭借其系统利用率高、人力/管理成本低以及灵活性/扩展性方面展现的优势,已经成为目前各大行业IT建设的新趋势。而服务器的虚拟化作为云计算的核心技术之一,也得到了越来越多的应用,从而极大的增加了数据…

Android开源项目SlidingMenu本学习笔记(两)

我们已经出台SlidingMenu使用:Android开源项目SlidingMenu本学习笔记(一个),接下来再深入学习下。依据滑出项的Menu切换到相应的页面 文件夹结构: 点击Bluetooth能够切换到对应的界面 关键代码 MainActivity.java pack…

扒开系统调用的三层皮(下)

5234 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.给MenuOS增加time和time-asm命令 步骤 rm menu -rf //强制删除git clonehttp://github.com/menging/menu.git // 克隆相关信息到menucd menumake rootfs //自动编…

Hello Playwright:(1)从开发到部署

前言虽然前面写过几篇 C# 使用 Playwright 的文章,但是讲解的不太全面。看到有朋友有学习这方面的需要:因此,就有了《Hello Playwright》这个系列的产生。Playwright 介绍Playwright 是微软开源的一个基于 Node.js 的工具库,可使用…

没有主清单属性_原神:晴知的主C诺艾尔大型进阶攻略初版

作者:NGA-最可爱的晴知前言大家好我是晴知,一个诺艾尔主C玩家(目前是0命座),截至10月8日,我的账号等级为41级,深境螺旋11层打通,但星数不够12层,一者因为圣遗物太烂而我想45级再刷圣遗物&#x…

【ArcGIS风暴】ArcGIS栅格数据(分区)统计方法总结

【问题描述】如图所示,如何根据中国植被区划分区,统计各个区域内NDVI的平均值? 目录 1、Layer Properties 2、Zonal Statistics as Table 3、Band Collection Statistics 分区统计及根据统计区域或赋值栅格为每个区域计算统计数据。分区统计包括众数、最大值、均值、中位…

快速合并同一个excel表中的多个sheet

很多朋友会遇到这样的问题,就是很有很多页的数据,少的有几十页,多的可能有几百页,然后需要合并到一个页面做数据分析,如果一页页的复制粘贴的话,就比较麻烦。下面我就介绍一种利用excel的宏计算来解决这个问题。 一、数据准备 二、合并效果

释放内存软件_原来苹果手机这样清理内存,可以释放大量空间,真是太好用了...

相信大家都喜欢用苹果手机,给人感觉就是流畅,但是苹果手机使用久了,内存不足也会导致卡顿的,今天就来教大家清理苹果手机内存的方法,可以释放大量空间。一、正确卸载软件很多人在使用手机时,发现有些软件不…

gitlab永久设置密码

在 .gitconfig 文件中加入: [credential] helper store .git-credentials close address转载于:https://www.cnblogs.com/rhxuza1993/p/7355952.html

程序对拍

在一些特殊的比赛中&#xff0c;我们需要用一个暴力程序来验证一个采取了高效算法的程序是否正确&#xff0c;所以就有了对拍。 对拍程序&#xff1a; echo off :loop rand.exe>data.in std.exe<data.in>std.outmy.exe<data.in>my.out fc my.out std.out …

Xamarin效果第二十三篇之离线语音识别

在前面文章中简单玩了玩GIS的基本操作、Mark相关、AR、测距、加载三维白模、可扩展浮动操作和录音效果;今天抽空再来分享一下最近摸索的基于讯飞的离线语音识别效果,其实就简单用了一下离线命令词识别,看效果:1、先去控制台创建应用:https://console.xfyun.cn/app/myapp2、去组…

linux脚本漏洞,Silver Peak VX跨站脚本漏洞(CVE-2014-2975)

发布日期&#xff1a;2014-07-28更新日期&#xff1a;2014-07-30受影响系统&#xff1a;silver peak Silver Peak VX描述&#xff1a;--------------------------------------------------------------------------------BUGTRAQ ID: 68923CVE(CAN) ID: CVE-2014-2975Silver P…

JSON.parse()和JSON.stringify()

为什么80%的码农都做不了架构师&#xff1f;>>> parse用于从一个字符串中解析出json对象,如 var str {"name":"huangxiaojian","age":"23"} 结果&#xff1a; JSON.parse(str) Object age: "23"name: "hu…

如果编程语言是女孩子

试想一下&#xff0c;当Java、C、Python、Ruby、PHP、C#、JS等编程语言变成了动漫人物会是怎样的一幅场景呢&#xff1f;下面就一起看看在日本作家渡辺将人的笔下&#xff0c;各种编程语言都是哪类可爱的女孩子的吧&#xff01; 究竟心里有多喜欢&#xff0c;才能画出如此可爱的…

在MAUI中使用Masa Blazor

Masa Blazor是什么在此之前我们已经介绍过什么是Masa Blazor&#xff0c;以及如何使用Masa Blazor&#xff0c;如果还有不了解Masa Blazor的同学可以看我上篇文章【初识Masa Blazor】。那么今天就带大家探索一下如何在MAUI中使用Masa Blazor,那么我们先来了解一下什么是MAUI&am…