新闻详情

新闻详情

首页 / 资讯中心 / 详情

pgtable pte_mkwrite

发布时间:2026/10/1 11:36:25来源:尧图网络
pgtable pte_mkwrite
pte_mkwrite是 Linux 内核中用于将一个 PTE页表项标记为可写的架构相关函数。它位于 x86 架构的页表操作代码中是缺页异常处理和mprotect()等路径的核心辅助函数。核心作用根据 VMA 类型设置写权限这个函数接收一个 PTE 和一个vm_area_structVMA根据 VMA 的类型决定如何设置写权限pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) { if (vma-vm_flags VM_SHADOW_STACK) return pte_mkwrite_shstk(pte); pte pte_mkwrite_novma(pte); return pte_clear_saveddirty(pte); }代码逐行解析1. 影子栈特殊处理if (vma-vm_flags VM_SHADOW_STACK) return pte_mkwrite_shstk(pte);如果 VMA 标记为VM_SHADOW_STACK影子栈说明这是一个用于Intel CET控制流强制技术的影子栈区域。影子栈的写权限处理与普通内存不同需要调用专门的pte_mkwrite_shstk()来设置正确的权限位避免与 CET 的硬件保护机制冲突。2. 普通内存的可写设置pte pte_mkwrite_novma(pte);对于普通内存调用pte_mkwrite_novma()设置标准的可写位。这个函数是“无 VMA”版本因为此时已经确定不是影子栈了不需要再依赖 VMA 信息。3. 清除 saveddirty 标志return pte_clear_saveddirty(pte);pte_clear_saveddirty()清除 PTE 中的_PAGE_SAVED_DIRTY标志。这个标志是AMD 的硬件特性用于在页表项中“暂存”脏位信息。当 PTE 被重新标记为可写时需要清除这个暂存状态因为它可能会干扰后续的脏位追踪。演进背景从pte_mkwrite到pte_mkwrite_novma这个函数的重构源于 2023 年的一批补丁如mm: introduce pte_mkwrite{_shstk,}。在此之前pte_mkwrite()是一个不带参数的宏或函数。重构的目的是统一接口让所有架构的pte_mkwrite都接收vma参数为影子栈等 VMA 相关特性提供支持。区分场景引入pte_mkwrite_novma()用于不需要 VMA 信息的场景避免强制调用者传递 VMA。支持影子栈通过pte_mkwrite_shstk()为 CET 影子栈提供专门的权限设置路径。在缺页异常中的角色在do_wp_page()写时复制缺页处理中当内核决定允许写入时会调用pte_mkwrite()来更新 PTE。这个函数确保了影子栈页面获得正确的写权限不会破坏 CET 保护。普通页面获得标准的写权限并清除可能干扰的 saveddirty 标志。这个函数是 x86 页表权限管理中“写权限”这一维度的核心入口体现了内核对不同内存类型普通内存 vs. 影子栈的精细区分。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Vue cron表达式组件选型:vue-cron与Element Plus对比 2026/10/1 13:03:39

Vue cron表达式组件选型:vue-cron与Element Plus对比

做 Vue 后台管理系统的人,大概率都遇到过这样的需求:运营想自己配置定时任务,页面要能选每小时、每天、每周几执行,最后生成一串 cron 表达式交给后端。这个需求听起来简单,真到选型时却会卡住:cron 表达式…

阅读更多 →
操作系统中断详解:关中断/开中断、临界区与实时性优化 2026/10/1 13:03:39

操作系统中断详解:关中断/开中断、临界区与实时性优化

1. 中断是怎么一回事:从一个按键说起 很多人第一次接触操作系统里的中断,都是从一块开发板上那粒小小的按键开始的。按下去,灯亮了,看起来理所当然,但背后发生的事远没有那么简单:CPU并不知道有人按了按键&…

阅读更多 →
中断、关中断与开中断:临界区、延迟与多平台实战 2026/10/1 13:03:39

中断、关中断与开中断:临界区、延迟与多平台实战

1. 中断先用一句话讲清楚:它是 CPU 的一次"有事喊我"几年前带一个做数据采集的同事排查过一个很典型的问题:设备空闲时串口收数据一切正常,可只要把定时器中断打开,接收缓冲区里就会零星少几个字节,偶尔还多…

阅读更多 →
MindSpore Transformers大模型训练:并行策略与显存优化实战 2026/10/1 13:03:37

MindSpore Transformers大模型训练:并行策略与显存优化实战

在算力资源受限的现实条件下,想跑通一个大语言模型的预训练或微调任务,最痛的点往往不是模型结构本身,而是“显存放不下、算力凑不齐”。我之前在 MindSpore Transformers 框架下折腾过一段时间的 LLM 训练,从单卡实验到多卡分布式…

阅读更多 →
单类SVM异常检测原理与R语言实现避坑指南 2026/10/1 13:03:36

单类SVM异常检测原理与R语言实现避坑指南

简介:单类支持向量机(One-Class SVM)是一种典型无监督异常检测算法,本资源为基于MATLAB的完整实现源码,面向算法学习者、数据挖掘人员及需要构建数据边界模型的工程实践者。代码针对MATLAB 6.5环境编写,仅需…

阅读更多 →
跨平台兼容实战:Wine、FEX-Emu与DXMT在ARM设备上运行Windows应用 2026/10/1 13:03:29

跨平台兼容实战:Wine、FEX-Emu与DXMT在ARM设备上运行Windows应用

1. 从“Madeira”说起:一个跨平台兼容项目的整体设计思路 “Madeira”这个名字,乍一看像是个地名,但在跨平台兼容圈子里,它代表的是一个把 Windows 应用搬到非 Windows 环境里跑的项目方向。结合热搜词里的 Wine、FEX-Emu、DXMT、…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉