微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在linux内核中发生页面错误?

我正在研究一个需要在Linux内核中进行大量修改的项目。 在其中一个修改中,我必须改变页面error handling程序的工作方式。 我想要拦截特定进程的页面错误,并通过从另一台机器上复制数据来满足这些错误

作为第一步,我想写一些实验代码,可以帮助我理解Linux如何满足页面错误,以及它如何告诉过程现在无法提供页面错误,并且需要在晚点。

所以,我想修改handle_mm_fault ,这样可以帮助我理解上述所有情况。 像这样的东西:

int handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma,unsigned long address,unsigned int flags) { /* some code */ if(current->pid == my_target_pid) { /* 1. Chose randomly between 1 and 2 -> rand_num 2. if rand_num from (1) is 1 then allocate a block of memory,write 'X's to it and then give it to the process and then return. 3. if rand_num from (1) is 2 then tell process to come back later and then return. */ } /* rest of handle_mm_fault for all other process here */ }

如何debuggingLinux上的本地Java崩溃?

Linux或OS X中的Web API 2.1

Debian下的Sox批处理

fseek的性能开销是多less?

亚马逊Linux AMI ec2 GUI /远程桌面

Bash:如何为ssh命令实时过滤tee输出

如何禁用QTextEdit的中间buttonfunction?

如何为dokku-persistent-storage设置音量

在Linux中简单的套接字转发

Python上的python模块错误

你可以看一下struct vm_operations_struct 。 其功能成员“故障”是用来处理页面错误的情况

您所描述的问题听起来像是要求数据中止的页面。 首先,由于内核空间或用户间的无效页面映射,可能会导致数据中止。 handle_mm_fault是在linux中修复用户间的页表的子例程。 据我所知,你的设计必须包括以下内容

您需要一个设计来跟踪正确的PID。

你有没有考虑过,你怎么决定vma的哪个部分应该依靠要求

页? 整个过程VMA或只是一些部分? Linux可以使用其他技术为用户程序(如mmap)创建内存映射。

为了避免重试,当cpu从中止位置恢复执行时,必须修改映射。 如果您无法立即从指定区域服务映射,则应该创建一个临时映射,然后再逐页输出

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐