linux下共享内存mmap()方法和shmget()方法的疑问?
先贴出两个写得比较好的文章,以供大家参考:
http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html
http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index2.html
1,在上面的第一篇文章中,第一部分的第3,4两点,讲的其实是:第一次调用mmap后,要访问时,进程空间并没有和物理地址进行映射,会返回一个缺页异常,然后会去找相应的物理内存页面,没找到的话再把磁盘文件加载物理内存中。
而我之前的理解一直是:第一次调用mmap后,要访问时,进程空间已经和物理地址进行映射,但磁盘文件还没有加载到物理内存,所以会返回一个缺页异常,然后缺页处理程序会去把磁盘文件加载物理内存中。
不知道上面是我的理解正确,还是文章作者的正确,不过估计是我错了,在这里是想再确认一下。
2,还有,如果要做共享内存,第一个进程调用完mmap,要访问的时候会引发缺页异常。那么当第一个进程访问完比如说已经写了一段数据到共享内存区了。第二个进程再调用mmap,要访问的时候还会报缺页异常吗?其实如果上面那个问题解决了,那这个问题的答案也就知道了。
3,在实际应用中,shmget和mmap哪个用的比较多啊?
4,shmget是创建一个共享内存区域与一个文件对应起来,这个文件的目录不一定是/dev/shm/×××下吧,别的目录也可以吧?只要这个文件存在,那这个文件一开始的格式有什么要求吗?
跪谢!