这是关于 Linux 的问题(与驱动程序相关)。假设我们有一些硬件,能够进行大型 DMA 访问(多千兆字节读取或写入,您可能会想到 CUDA 卡或网卡)。要传输到设备/从设备传输的数据在用户空间中分配并放置在用户空间中。
所以,我认为正确的方法是mlock()
使用 DMA 访问的内存范围。然后用户进程将调用我的驱动程序来启动 DMA 传输。开始传输后,我的用户空间进程仍在其他线程中工作。
一段时间后,当我相信数据被传输时,我想munlock()
从用户空间线程做内存范围。
合法吗?如果我munlock()
在实际 DMA 传输结束之前打电话怎么办?
这会munlock()
成功还是失败?还是会阻塞直到 DMA 传输完成?
PS:问题最初来自 Zan Lynx,ID13422 在 SO。