当前位置: 技术问答>linux和unix
内存映射文件问题疑惑:
来源: 互联网 发布时间:2016-06-22
本文导语: 请教大家一个问题: 内存映射文件, 有多个(比如10个)进程, 同时通过mmap(MAP_SHARED方式)并发的将同一个大文件(比如100M)映射到进程地址空间, 请教大侠们: 到底这十个进程是各个开辟了地址空间来保存...
请教大家一个问题:
内存映射文件,
有多个(比如10个)进程, 同时通过mmap(MAP_SHARED方式)并发的将同一个大文件(比如100M)映射到进程地址空间,
请教大侠们:
到底这十个进程是各个开辟了地址空间来保存映射?(10进程*100M = 共计占用1G内存)
还是十个进程共享了一个地址空间? (100M)
如果是各自保存, 内存映射文件 如何 体现 共享内存的特性?
如果是共享一个地址空间,这个空间是在什么位置?
谢谢。
内存映射文件,
有多个(比如10个)进程, 同时通过mmap(MAP_SHARED方式)并发的将同一个大文件(比如100M)映射到进程地址空间,
请教大侠们:
到底这十个进程是各个开辟了地址空间来保存映射?(10进程*100M = 共计占用1G内存)
还是十个进程共享了一个地址空间? (100M)
如果是各自保存, 内存映射文件 如何 体现 共享内存的特性?
如果是共享一个地址空间,这个空间是在什么位置?
谢谢。
|
是十个进程共享了一个地址空间? (100M)
如果是共享一个地址空间,这个空间是在什么位置?
=======================================
你可以通过查看
PID= yourprogram
cat /proc/$PID/maps 来了解空间的地址。
如果是共享一个地址空间,这个空间是在什么位置?
=======================================
你可以通过查看
PID= yourprogram
cat /proc/$PID/maps 来了解空间的地址。
|
每个进程的逻辑地址空间是独立的,但是这些逻辑地址被映射到了相同的物理地址。
|
不是,基本上如四楼所说。。
所有的进程的虚拟空间地址都是独立的,大家互不干扰。
但对应的物理地址应该是一整块100M大小的东西。
所以就消耗100M大小内存。
所有的进程的虚拟空间地址都是独立的,大家互不干扰。
但对应的物理地址应该是一整块100M大小的东西。
所以就消耗100M大小内存。
|
如楼上所讲,就因如此,各个进程操作的是同一段地址,这就要程序之间来协调相互操作步骤。