我怎样才能使用vm_operations结构来拦截页面错误的特定页面?

我怎样才能使用vm_operations结构来拦截页面错误的特定页面?,第1张

概述我怎样才能使用vm_operations结构来拦截页面错误的特定页面?

我想创build一个内核模块,当给定一个进程的ID可以查找其任务结构,然后它的内存映射。 当它发现它应该附加一个将页面错误提供给一组特定页面(即堆页)的函数。

中断处理和用户空间通知

让我知道以下有关USB调制解调器插件和插件通知处理程序API或linux系统调用

为什么每次从内核模块读取CR3寄存器的内容会有所不同?

unit testing的“回声”设备

使用驱动程序获取原始MAC地址

设置所需VMA的vma->vm_ops->fault 。 如果你将入侵堆分配器并用你的特殊设备的mmap来替换mmap的MMAP_ANONYMOUS,那可能会更容易一些。

相关代码: http : //lxr.free-electrons.com/source/mm/memory.c?v=3.12#L3676

3689 static int handle_pte_fault(struct mm_struct *mm,3690 struct vm_area_struct *vma,unsigned long address,3691 pte_t *pte,pmd_t *pmd,unsigned int flags) 3692 { 3693 pte_t entry; 3694 spinlock_t *ptl; 3695 3696 entry = *pte; 3697 if (!pte_present(entry)) { 3698 if (pte_none(entry)) { 3699 if (vma->vm_ops) { 3700 if (likely(vma->vm_ops->fault)) /* HERE */ 3701 return do_linear_fault(mm,vma,address,3702 pte,pmd,flags,entry); 3703 } 3704 return do_anonymous_page(mm,3705 pte,flags); 3706 } 3707 if (pte_file(entry)) 3708 return do_nonlinear_fault(mm,3709 pte,entry); 3710 return do_swap_page(mm,3711 pte,entry); 3712 }

一些文档: https ://lwn.net/Articles/242625/“fault()” – [发表于2007年7月23日由corbet],LWN

您也可以查阅第15章LDD书: http ://lwn.net/images/pdf/LDD3/ch15.pdf(有点过时了,它使用2007 年被fault()处理程序替换的 nopage hanlder)

总结

以上是内存溢出为你收集整理的我怎样才能使用vm_operations结构来拦截页面错误的特定页面?全部内容,希望文章能够帮你解决我怎样才能使用vm_operations结构来拦截页面错误的特定页面?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1156825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存