gpt4 book ai didi

linux - do_mmap_pgoff 用于其他进程

转载 作者:太空狗 更新时间:2023-10-29 11:20:19 26 4
gpt4 key购买 nike

在 linux 内核系统调用中,我想以与从用户模式调用 mmap 类似的方式映射内存区域。如果我想映射当前进程的区域,我可以简单地使用 do_mmap_pgoff。但是,相反,我想在内核模式下运行时将区域映射到不同的进程中。 do_mmap_pgoff 假设/知道它正在为当前进程映射并且不允许任何其他内容。

我计划做的是复制 do_mmap_pgoff 以获取额外的参数来指定我想要映射的任何进程的 task_struct 和 mm_struct。然而,这是非常不受欢迎的,因为我必须手动遍历内核源代码中的许多函数,并基本上复制这些函数,以便它们不再假设它们正在代表 current 工作。

在内核模式下运行时,是否有更好的方法在 current 之外的进程中映射内存?

最佳答案

毫不奇怪,内核源代码中的那些函数假定它们更改了当前进程的映射,并且在 Linux 存在的 20 年中它没有改变。进程不更改其他进程的内存映射是有原因的。

它非常“非 UNIXy”。

如果您详细说明了您想要完成的目标,那么也许人们可以建议一种更符合 UNIX 风格的方法。

无论如何,为了专注于手头的问题,如果您不想对 mm/* 代码进行大量修改,那么我建议您实现一个解决方法:

  1. 找到一个可以让您的内核代码在目标进程的上下文中运行的上下文。例如,以模块化方式 - /sys/proc 文件。或者,以非模块化方式:修改被频繁调用的系统调用,或其他代码路径 - 例如信号处理代码。
  2. 实现一个“RPC”,源进程可以在映射更改时排队请求,然后,它可以休眠直到目标进程进入该上下文并接收请求,当它是时唤醒源进程完成修改自己的映射。这实际上是对 do_mmap_pgoff() 的“远程”调用的模拟,它可以使用 linux/wait.h 中公开的机制来实现。

关于linux - do_mmap_pgoff 用于其他进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8094577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com