卡罗拉凯立德导航地图下载多少钱

Linux kernel 分析之二十二:内存管理-page fault处理流程
page&fault是Linux内存管理中比较关键的部分。理解了page&fault的处理流程,有助于对Linux内核的内存管理机制的全面理解。因为要考虑到各种异常情况,并且为了使内核健壮高效,所以page&fault的处理流程是比较复杂的。我把这个繁琐的处理流程放在最后。在page&fault处理函数中使用了很多lazy&algorithm。它的核心思想是,由于磁盘IO非常耗时,所以把这些操作尽可能的延迟,从而省略不必要的操作。
以下是几种会导致page&fault的情景:1.用户态按需调页:
为了提高效率,Linux实现了按需调页。应用程序在装载时,并不立即把所有内容读到内存里,而仅仅是设置一下mm_struct,直到产生page&fault时,才真正地分配物理内存。如果没有分配对应的页表,首先分配页表。这种情况下的缺页可能是匿名页(调用do_no_page),可能是映射到文件中的页(调用do_file_page),也可能是交换分区的页(调用do_swap_page)。此外,还可以判断是不是COW(写时复制)。2.主内核页目录的同步:
内核页表信息保存在主内核页全局目录中,虚存段信息放在vm_struct中。进程页表的内核部分要保持与主内核页全局目录的同步。当内核调用vmalloc等函数,对内核态虚拟地址进行非线性映射时,修改主内核页全局目录,但是不修改进程页表的内核部分。这会引起page&fault。page&fault&处理函数会执行vmalloc_fault里的代码,对进程的页表进行同步。
3.对exception&table中的异常操作的处理
内核函数通过系统调用等方式访问用户态的buffer,可能会在内核态导致page&fault。这一类page&fault是可以被fixup的,所有这些代码的地址都放在exception&table中。并且这些代码有异常处理函数,被称为fixup&code。page&fault&处理函数查找对应的fixup&code,并且把返回时的rip设置为fixup&code。当page&fault处理完毕,内核会调用fixup&code,对异常进行处理。典型的例子是copy_from_user。4.堆栈自动扩展
并不是所有的指针越界都会导致SEGV段错误。当指针越界的量很小,并且正好在当前堆栈的下方时,内核会认为这是正常的堆栈扩展,为堆栈分配更多物理内存。5.对用户态指针越界的检查
如果指针越界,并且不是堆栈扩展,那么内核认为是应用程序的段错误,向应用程序强制发送SEGV信号。6.oops
如果page&fault不是应用程序引起,并且不是内核中正常的缺页,那么内核认为是内核自己的错误。page&fault会调用__die()打印这时的内核状态,包括寄存器,堆栈等等。
Page&fault的处理流程如下:1.对参数有效性的检查:
a)如果出错地址在内核态,并且不是vmallloc引起的,那么oops,内核bug
b)如果内核在执行内核线程或者进行不容打断的操作(中断处理程序,延迟函数,禁止抢占的代码),oops
c)如果出错地址在用户态,并且可以在exception&table中找到,那么执行exception的处理函数,正常返回,否则,oops2.如果在进程的地址空间vma找不到对应的vma,
a)判断是不是堆栈扩展,如果是,扩展堆栈。
b)如果错误在内核态发生,在exception&table寻找异常处理函数:fixupc)如果在用户态,向当前进程发送一个SIGV的信号。
3.如果在进程的地址空间内
a)如果是写访问
i.如果没有写权限,非法访问
ii.如果vma有写权限,pte没有写权限,判断是不是COW,是的话调用
do_wp_page。
b)如果是读访问,没有读权限,非法访问
c)如果不是权限问题,是普通的缺页,调用handle_mm_fault来解决
i.handle_mm_fault,如有需要,分配pud,pmd,pteii.如果页不在内存中
1.如果还没有分配物理内存,调用do_no_page
2.如果映射到文件中,还没有读入内存,调用do_file_page3.如果该页的内容在交换分区上,调用do_swap_page
4.如果在内核态缺页,并且是由于vmalloc引起
a)根据master&kernel&page&table&同步
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?标签:至少1个,最多5个
浏览器的内核是多线程的,它们在内核控制下相互配合以保持同步,一个浏览器至少实现三个常驻线程:JavaScript引擎线程,GUI渲染线程,浏览器事件触发线程。
JavaScript引擎是基于事件驱动单线程执行的,JavaScript引擎一直等待着任务队列中任务的到来,然后加以处理,浏览器无论什么时候都只有一个JavaScript线程在运行JavaScript程序。
GUI渲染线程负责渲染浏览器界面,当界面需要重绘(Repaint)或由于某种操作引发回流(Reflow)时,该线程就会执行。但需要注意,GUI渲染线程与JavaScript引擎是互斥的,当JavaScript引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到JavaScript引擎空闲时立即被执行。
事件触发线程,当一个事件被触发时,该线程会把事件添加到待处理队列的队尾,等待JavaScript引擎的处理。这些事件可来自JavaScript引擎当前执行的代码块如setTimeout、也可来自浏览器内核的其他线程如鼠标点击、Ajax异步请求等,但由于JavaScript的单线程关系,所有这些事件都得排队等待JavaScript引擎处理(当线程中没有执行任何同步代码的前提下才会执行异步代码)。
0 收藏&&|&&2
你可能感兴趣的文章
3 收藏,242
4 收藏,506
5 收藏,244
分享到微博?
明天提醒我
我要该,理由是:
扫扫下载 AppPage fault in nonpaged area蓝屏解决【windows10吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:269,465贴子:
Page fault in nonpaged area蓝屏解决收藏
若您的电脑出现蓝屏报错:Page fault in nonpaged area, 请试试下面的步骤:首先,请先进入安全模式:强制重启(按电源键关机,再按电源键开机),一直点按F8,进入安全模式如果上述方法无效,请尝试:强制重启三次,进入疑难解答--高级选项--启动设置--重启之后按F4进入安全模式然后,把C:\windows\system32\drivers文件夹里的peckp.sys文件重命名为peckp.sys.dak。重启电脑。-教程来自微软工程师
windows10,正品行货,精致服务,天天低价,多仓直发,极速配送,货到付款!京东JD.COM-专业的综合网上购物商城!
【windows10】进入“安全模式”,以修复蓝屏重启方案
【windows10】安装失败,无法开机,无限重启,回滚到原系统教程!
这是因为目前网银不兼容win10,特别是邮政
手贱重置,无限蓝屏重启怎么办?
出现这个问题卸载显卡驱动没用,刚回滚,就看到这帖子置顶了
交通银行的某个插件也会把系统搞蓝屏 后来我就卸载了
求N卡开机黑屏解决办法,不用N卡驱动也不是办法,玩游戏不能一直用集显
2017全新windows10,运行稳定,万能驱动兼容,下载速度快,一键安装;windows10 电脑装机必选.
我看了 没有这个文件 还有其他的原因吗?
我有过这种蓝屏,重置了
重置了有用吗 ✎﹏﹏ 尐忆昔丶为您报时: 日 周六 20时55分12秒012毫秒
第二次推送升级,出现这个错误代码8007002
重置系统无限重启,没办法进安全模式怎么办?
C盘没有出现下载包
就今天玩lol的时候载入游戏时试过一次,其它时间没试过蓝屏,有必要按照以上方法做吗?
正在回滚中,今天第三次了。。先后卸了杀软和显卡驱动,都没用
没有这个文件呀
天气软件无法使用
我就没有这个文件, 我改不了
还好我都用支付宝。。
C盘太小了吗?
建议用旧的显卡驱动。我就是用回win7的。开机不会黑屏了。直接顺利通过。15s开机。
进不去安全模式,进安全模式也是一直无限重启,每次都只能回滚到win7,试了好多次了,一直升不了win10
没有这个文件如何解决?
楼主,我进入不了疑难解答那个页面,我连续几次开关机后,会卡在键盘页面,求问,这样该怎么办啊?
没有找到这个文件怎么办
登录百度帐号推荐应用该日志不存在或已删除1980人阅读
Linux(22)
page&fault是Linux内存管理中比较关键的部分。理解了page&fault的处理流程,有助于对Linux内核的内存管理机制的全面理解。因为要考虑到各种异常情况,并且为了使内核健壮高效,所以page&fault的处理流程是比较复杂的。我把这个繁琐的处理流程放在最后。在page&fault处理函数中使用了很多lazy&algorithm。它的核心思想是,由于磁盘IO非常耗时,所以把这些操作尽可能的延迟,从而省略不必要的操作。
以下是几种会导致page&fault的情景:1.用户态按需调页:
为了提高效率,Linux实现了按需调页。应用程序在装载时,并不立即把所有内容读到内存里,而仅仅是设置一下mm_struct,直到产生page&fault时,才真正地分配物理内存。如果没有分配对应的页表,首先分配页表。这种情况下的缺页可能是匿名页(调用do_no_page),可能是映射到文件中的页(调用do_file_page),也可能是交换分区的页(调用do_swap_page)。此外,还可以判断是不是COW(写时复制)。2.主内核页目录的同步:
内核页表信息保存在主内核页全局目录中,虚存段信息放在vm_struct中。进程页表的内核部分要保持与主内核页全局目录的同步。当内核调用vmalloc等函数,对内核态虚拟地址进行非线性映射时,修改主内核页全局目录,但是不修改进程页表的内核部分。这会引起page&fault。page&fault&处理函数会执行vmalloc_fault里的代码,对进程的页表进行同步。
3.对exception&table中的异常操作的处理
内核函数通过系统调用等方式访问用户态的buffer,可能会在内核态导致page&fault。这一类page&fault是可以被fixup的,所有这些代码的地址都放在exception&table中。并且这些代码有异常处理函数,被称为fixup&code。page&fault&处理函数查找对应的fixup&code,并且把返回时的rip设置为fixup&code。当page&fault处理完毕,内核会调用fixup&code,对异常进行处理。典型的例子是copy_from_user。4.堆栈自动扩展
并不是所有的指针越界都会导致SEGV段错误。当指针越界的量很小,并且正好在当前堆栈的下方时,内核会认为这是正常的堆栈扩展,为堆栈分配更多物理内存。5.对用户态指针越界的检查
如果指针越界,并且不是堆栈扩展,那么内核认为是应用程序的段错误,向应用程序强制发送SEGV信号。6.oops
如果page&fault不是应用程序引起,并且不是内核中正常的缺页,那么内核认为是内核自己的错误。page&fault会调用__die()打印这时的内核状态,包括寄存器,堆栈等等。
Page&fault的处理流程如下:1.对参数有效性的检查:
a)如果出错地址在内核态,并且不是vmallloc引起的,那么oops,内核bug
b)如果内核在执行内核线程或者进行不容打断的操作(中断处理程序,延迟函数,禁止抢占的代码),oops
c)如果出错地址在用户态,并且可以在exception&table中找到,那么执行exception的处理函数,正常返回,否则,oops2.如果在进程的地址空间vma找不到对应的vma,
a)判断是不是堆栈扩展,如果是,扩展堆栈。
b)如果错误在内核态发生,在exception&table寻找异常处理函数:fixupc)如果在用户态,向当前进程发送一个SIGV的信号。
3.如果在进程的地址空间内
a)如果是写访问
i.如果没有写权限,非法访问
ii.如果vma有写权限,pte没有写权限,判断是不是COW,是的话调用
do_wp_page。
b)如果是读访问,没有读权限,非法访问
c)如果不是权限问题,是普通的缺页,调用handle_mm_fault来解决
i.handle_mm_fault,如有需要,分配pud,pmd,pteii.如果页不在内存中
1.如果还没有分配物理内存,调用do_no_page
2.如果映射到文件中,还没有读入内存,调用do_file_page3.如果该页的内容在交换分区上,调用do_swap_page
4.如果在内核态缺页,并且是由于vmalloc引起
a)根据master&kernel&page&table&同步
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:115197次
积分:1984
积分:1984
排名:第18502名
原创:83篇
评论:10条
(1)(1)(1)(25)(1)(10)(15)(1)(5)(5)(4)(22)}

我要回帖

更多关于 凯立德导航升级要钱吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信