对于linux和windows,在同一个过程中,如何让两个页面条目引用同一个物理页面?
对于Windows,通过在MSDN上阅读,看起来我可以通过传递CreateFileMapping
来调用INVALID_HANDLE_VALUE
来创建没有文件支持的文件映射。然后,我可以使用不同的MapViewOfFileEx
两次调用lpBaseAddress
,这实际上使两个不同的地址引用相同的物理地址。
我的问题是,在linux下如何做到这一点?我阅读mmap
的手册,并没有找到办法,除非该区域由文件(带有标志MAP_SHARED
)支持,但对该区域的修改将写入文件,这不是我想要的。有人知道这样做吗?我不反对文件支持,只要写入该区域实际上不会进入磁盘。使用tmpfs
不是一种选择,因为我无法保证用户已安装tmpfs
。
顺便说一句,代码应该是用户模式代码,而不是内核模式。
答案 0 :(得分:1)
使用shm_open()
为mmap()
创建文件。
“我想写一些模拟器”与我使用此技巧时的目的相同。
我确实使用过ipc / shm,但我忘记了细节。非常非常非常可能:shmget()+shmat()