Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix mmap()和munmap()_Unix_Memory Management_Shared Memory_Virtual Memory - Fatal编程技术网

Unix mmap()和munmap()

Unix mmap()和munmap(),unix,memory-management,shared-memory,virtual-memory,Unix,Memory Management,Shared Memory,Virtual Memory,mmap()在调用进程的虚拟地址空间中创建一个新映射,从addr和len字节和munmap()开始删除包含进程地址空间任何部分的整个页面的所有映射,该地址空间从addr开始,持续到len字节 我想问一下,在释放内存之前,修改后的mmap文件是否由munmap写入磁盘,或者我们必须调用其他函数来同步修改。如果使用MAP\u PRIVATE标志调用mmap(),您的更改将永远不会保存。如果使用MAP\u SHARED标志,则在munmap()返回之前的某个不确定时间,您的更改将被保存,而无需额外调用

mmap()
在调用进程的虚拟地址空间中创建一个新映射,从
addr
len
字节和
munmap()开始
删除包含进程地址空间任何部分的整个页面的所有映射,该地址空间从
addr
开始,持续到
len
字节

我想问一下,在释放内存之前,修改后的mmap文件是否由munmap写入磁盘,或者我们必须调用其他函数来同步修改。

如果使用
MAP\u PRIVATE
标志调用
mmap()
,您的更改将永远不会保存。如果使用
MAP\u SHARED
标志,则在
munmap()
返回之前的某个不确定时间,您的更改将被保存,而无需额外调用。您可以使用
msync()
调用强制将更改写入文件

Per:

说明

MAP_SHARED和MAP_PRIVATE描述写入的配置 对内存对象的引用。如果指定了MAP_SHARED,则写入 引用将更改基础对象。如果MAP_PRIVATE是 指定调用进程对映射数据的修改 应仅对呼叫过程可见,且不得改变 基础对象

映射文件的最后数据访问时间戳可以标记为 在
mmap()
调用和相应的
munmap()
调用。对映射区域的初始读或写引用 应使文件的最后一次数据访问时间戳标记为 如果尚未将其标记为更新,则进行更新

上次数据修改和上次文件状态更改的时间戳 映射为MAP_SHARED和Prote_WRITE的文件应标记为 在对 映射区域和下一次使用MS\U ASYNC或MS\U SYNC调用
msync()
对于文件的该部分,请执行任何进程。如果没有这样的电话 如果由于写操作而修改了基础文件 参考,则应标记这些时间戳,以便在某些时间更新 写入引用后的时间

说明

如果要删除的映射是私有的,则在此过程中所做的任何修改 应丢弃地址范围


在什么操作系统上?您要将哪些标志传递给
mmap
?“mmap文件”和“munmap文件”是什么意思?Unix操作系统。mmap文件是指写入映射内存的数据。如果将数据加载到内存映射中,然后对其执行一些修改。提供的参数是mmap(NULL、大小、只读?PROT_READ:PROT_READ | PROT_WRITE、MAP_SHARED、fd、0)。您的问题是,mmap是一个万能函数。这种行为取决于你实际上是如何做的。您应该更具体地说明您在调用中使用的设置。很抱歉,Andrew,但我在这里没有看到任何短语可以证实您的陈述“您的更改将在不确定的时间保存,而不需要额外调用,但在munmap()返回之前”。请你给我指一下好吗?