当前位置:网站首页>page fault-页异常流程
page fault-页异常流程
2022-08-03 05:23:00 【SEVENTHD7】
缺页异常(Page Faults) 和 Kernel Oops打印调用流程_痒痒挠963的博客-CSDN博客
阶段1:判断缺页异常是否发生在内核线程或原子上下文中(中断也属于一种原子上下文),是的话执行do_kernel_fault尝试修复或报段错误。
阶段2:判断是否是内核态访问用户地址空间的情况,是的话判断是否是指定的三种情况,是则报段错误。
阶段3:进入_do_page_fault, 查找异常地址所在的vm_area_struct域,并走表(page table walk)查找address对应PGD PUD PMD,最终找到PTE。
阶段4:进入handle_pte_fault(),判断PTE为空的话,说明用户空间申请了虚拟地址后第一次访问,尚未映射物理页面。在根据页面类型分别执行do_anonymous_page或do_fault。
阶段5:PTE非空表示已经建立过映射。判断PTE的present位是否为真,非真说明页面被swapping到磁盘上,随即执行do_swap_page。
阶段6:判断PTE_PROT_NONE是否为真,若为真执行do_numa_page产生页面迁移。
阶段7:判断错误类型,若是写类型的错误,再判断PTE的读写权限。只读的话说明页面是写保护的,调用do_wp_page。
阶段8: 为了兼容ARM32,ARM32体系架构的Hardware PTE中不支持DIRTY YOUNG等bit位,所以通过软件上配合缺页异常进行模拟。
------------------------------------------------------------------其他文章的扩展-------------------------------------------------------------------
由于造成内核空间和用户空间的page fault的原因不尽相同,因此其处理流程也有所区别。
对于用户空间,需要区分多种情况,page fault的处理显得更为复杂。
首先,访问的内存地址必须是合法的,所谓「合法」,就是该地址一定是落在进程的某个VMA区间内。
假设现在一个进程的地址空间分布如下,那么address B是合法的(good area),address A就是非法的(bad area)
边栏推荐
- 自监督论文阅读笔记 Self-supervised Learning in Remote Sensing: A Review
- 中国柔性制造系统(FMS)市场发展动态及未来趋势预测报告2022~2028年
- Qlik Sense 判空详解(IsNull)
- php连接数据库脚本
- BeanFactory和FactoryBean的区别
- 【源码解读】火爆的二舅币真的跑路了吗?
- 自监督论文阅读笔记: MoCoV2使用动量对比学习改进基线
- Try setting CHROME_EXECUTABLE to a Chrome executable
- 自监督论文阅读笔记SELF-SUPERVISED SPECTRAL MATCHING NETWORK FOR HYPERSPECTRAL TARGET DETECTION
- 中国生物反应器行业发展现状及前景规划分析报告报告2022~2028年
猜你喜欢
【DC-4 Range Penetration】
softmax和最大熵
自监督论文阅读笔记SELF-SUPERVISED SPECTRAL MATCHING NETWORK FOR HYPERSPECTRAL TARGET DETECTION
自监督论文阅读笔记 S3Net:Self-supervised Self-ensembling Network for Semi-supervised RGB-D Salient Object Det
docker mysql 容器中执行mysql脚本文件并解决乱码
EIP-5058 能否防止NFT项目方提桶跑路?
神经网络基础
【Arduino】关于“&”和“|” 运算-----多个参数运算结果异常的问题解决
MySQL 下载和安装详解
BeanFactory和FactoryBean的区别
随机推荐
中国生物反应器行业发展现状及前景规划分析报告报告2022~2028年
Mysql 存储过程详解(procedure)
mysql 客户端SSL错误2026 (HY000)
Qlik Sense 赋值详解(Set、Let)
HoloLens联合发明人:打造理想的全天AR需要解决这些问题
Sqli-labs-master靶场1-23关通关详细教程(基础篇)
【Arduino】关于“&”和“|” 运算-----多个参数运算结果异常的问题解决
Mysql 外键详解(Foreign Key)
Android学习 | 08.SQLiteOpenHelper
【DC-5 Range Penetration】
HANA 常用数据类型详解
php连接数据库脚本
Qlik Sense 判空详解(IsNull)
Oracle 日历表详解(含节假日)
网络间通信
用户登录验证程序的实现
深度学习基本概念
[frp intranet penetration]
Oracle 分区索引详解(local、global)
ASP.NET MVC3的伪静态实现