在Linux中,我们知道我们可以使用用户空间应用程序中的mmap调用将物理内存映射到用户虚拟地址空间,并在我们的设备驱动程序中实现mmap函数指针(使用remap_pfn_range)。但是没有任何其他方法可以在没有mmap调用的情况下将物理内存映射到用户虚拟地址空间。可能是我们可以使用malloc调用并通过用户虚拟起始地址进行“IOCTL”调用,然后使用kmalloc和remap_pfn_range进行映射。
我试过一次但失败了。这是正确的方式还是其他任何方式。
-Sumeet
答案 0 :(得分:0)
操作系统会自动将物理内存映射到虚拟地址空间,而不进行任何mmap调用。它被称为内存管理或memory paging。这意味着您的流程需要任何新的内存,例如通过malloc
,或者在堆栈段中,进程要求新页面,OS会自动创建从虚拟内存到物理内存的映射。但是,你不需要知道所有这些 - 操作系统将隐藏你的一切。只是在虚拟地址空间中感到高兴,这就足够了: - )
mmap
是将文件映射到虚拟内存。这是映射的特例。您还可以使用IPC共享内存(shmget
)在进程之间共享内存。您也可以使用mmap
执行此操作,而无需实际写入文件。
取决于你想做什么。