gpt4 book ai didi

memory-management - linux中vmsplice()系统调用是否有逆向操作?

转载 作者:行者123 更新时间:2023-12-01 21:15:00 28 4
gpt4 key购买 nike

vmsplice 系统调用允许使用“SPLICE_F_GIFT”标志从一组用户级页面实现零复制发送到管道。我的问题是是否有反向操作,例如,我可以在管道的另一端有一个进程,它不只是 read()aio_read()管道,而是简单地将管道数据映射到其地址空间的操作?这最终意味着将内存映射从发送方传输(移动)到接收方进程而无需任何复制。这可能吗?

编辑:我的用例如下所示。我有两个进程 A 和 B。A 生成数据(> 兆字节)并希望将其传递给 B 进行进一步处理,然后终止。我想避免复制,只是告诉内核‘看,我这里有这些页面,不再需要它们了。请将它们附加到 B 的地址空间并完成它。'。

简单的共享内存对我不起作用,因为 A 发送的内存可能位于其地址空间中的任何位置,除非我限制 A 使用适用于共享内存或临时文件的特定内存分配器,我希望这样避免。

最佳答案

我认为您正在寻找 process_vm_readvprocess_vm_writev

These system calls transfer data between the address space of the calling process ("the local process") and the process identified by pid ("the remote process"). The data moves directly between the address spaces of the two processes, without passing through kernel space.

有关详细信息,请参阅手册页。

关于memory-management - linux中vmsplice()系统调用是否有逆向操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15914382/

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