我一直在通过一些实验学习linux内核。最后我想知道是否可以通过将一个进程的页面插入到另一个进程的vma结构中来共享两个用户空间进程之间的页面。调用mmap并通过netlink将addr发送回内核。插入将在驱动程序模块中完成。此测试的原因是两个进程可能无法直接相互通信,并且只读内存的重复页面考虑到效率和冗余,这可能是一个糟糕的选择。
经过一番研究后,我发现了vm_insert_page函数和传统的remap_pfn_range。然而它在lxr中说:
/ ** 2020 * vm_insert_page - 将单个页面插入用户vma
2021 * @vma:用户vma映射到
2022 * @addr:此页面的目标用户地址
2023 * @page:源内核页面
2024 *
2025 *这允许司机插入他们已分配的单个页面
2026 *进入用户vma。
2027 *
2028 * 该页面必须是一个很好的干净个人内核分配。“
这是否意味着将现有页面插入另一个vma是不可能的?只能使用新创建的页面调用该函数?我一直认为页面可以与引用计数共享。