【发布时间】:2023-03-27 19:51:01
【问题描述】:
我有一个需要由多个进程访问(只读)的大文件。我想在启动时将文件内容加载到易失性内存中,然后让进程在不相互通信的情况下访问它。
我正在考虑为此目的留出物理内存,然后在每个进程中硬编码相同的物理地址。我会让每个进程自己映射到虚拟内存,并让其中一个进程在启动时写入加载文件内容。这在 Linux (Android) 上可行吗?有没有更好的办法?
更多观点。该文件约为 0.5 GB,读取速度尽可能快很重要。然而内存是有限的(嵌入的),所以我不想在物理内存中有同一个文件的多个副本。理想情况下,我会留出一部分连续的物理内存。
根据我对 mmap 的了解,它不会将文件直接加载到内存中,而是以一种惰性的方式加载,也不允许指定分配到哪个物理内存?
我正在考虑使用 ION,因为我在 Android 上,但它似乎需要 IPC 来共享内存句柄。
【问题讨论】:
-
mmap呢? -
使用
mmap和mlock? -
您能否提供更广阔的视角——真正应该做什么?无法从用户进程访问物理内存(也许用户空间驱动程序允许这样做 - tldp.org/LDP/khg/HyperNews/get/devices/fake.html)但我认为这不是一个好的解决方案。
-
@Nabuchodonozor 我给出了更多观点。我不想访问物理内存,我只想确保我访问的虚拟内存转换为相同的物理内存。
-
一个想法让我印象深刻。也许我可以有一个小的内核驱动程序来创建共享 ION 句柄并将其导出到用户空间。
标签: android c linux memory embedded-linux