在linux中是否有系统调用来保留虚拟地址空间(不是内存,只是地址空间)

时间:2016-04-13 15:14:59

标签: c linux process mmap virtual-address-space

我有一个用户空间"平台"分叉不同的过程。所有这些进程开始执行平台plat_init()函数,然后运行一些其他应用程序代码(这不是我的。即我无法更改此代码)。 在某些时间点,这些进程中的一些可以执行plat_shared_mem_alloc()来分配共享内存。此函数返回句柄H(每次调用时为每个共享内存块分配一个句柄)。可以调用另一个函数plat_get_shared_memory_address(H)来检索H的地址(在进程虚拟空间中)。 H可以发送到其他Linux进程(使用通常的IPC)。 我希望任何进程调用plat_get_shared_memory_address(H)来返回相同的地址(对于相同的句柄H)。

换句话说,我想在使用它的所有进程中将共享物理内存映射到相同的虚拟地址,无论映射何时完成。

我认为plat_shared_mem_alloc()可以调用shm_open()来创建一个"文件"在文件系统中,我知道mmap()MAP_FIXED标志来强制映射的虚拟地址。

但是没有任何保证如果进程P1在地址 A 处映射共享内存句柄,那么相同的地址 A 将在另一个进程P2地址空间中可用。在调用plat_get_shared_memory_address(H)之前,P2的应用程序代码已经在地址 A 上映射了一些内容,而mmap()将失败。

所以我想在plat_init()调用期间阻塞每个进程中的一些地址空间(我知道第一个)。并在mmap()需要时使用一些地址空间。

换句话说,是否有一个系统调用阻塞(保留)进程的某个虚拟地址空间(此时没有分配任何内存),所以我可以在以后根据需要在同一地址映射事物在我的不同过程中?

0 个答案:

没有答案