Chinaunix

标题: 共享内存和共享库的区别 [打印本页]

作者: plscareme    时间: 2006-01-08 15:45
标题: 共享内存和共享库的区别
小弟有个问题请教大家,关于共享内存(进程间的)和共享库的区别

本来这两个东西应该也没有什么关系的,但是从共享库的本质来说,它共享的含义有两个,一个是存储共享,不需要
编译进二进制目标文件中,只在运行时候加载.这是一个共享.第二个共享是一旦有一个进程加载了这个共享库的
代码和数据到内存,别的进程就可以共享这个个内存.如果我在共享库中定义了一些全局变量,是否可以说这种
情况下,共享库的作用和进程间的通信用的共享内存作用就有些类似.

同样,如果存在这种定义了全局变量共享的共享库,那如何能保证不同进程间的数据一致性呢.还是说在共享库
中不允许使用全局变量?
作者: albcamus    时间: 2006-01-08 17:13
》》同样,如果存在这种定义了全局变量共享的共享库,那如何能保证不同进程间的数据一致性呢.还是说在共享库
中不允许使用全局变量?

每个进程一份拷贝, 并不需要互斥。 共享库中的全局量是通过Copy-on-Write的方法在不同进程间共享的。
作者: wolf0403    时间: 2006-01-08 22:43
Unix 的 shared object 貌似不支持 Win32 DLL 的那种共享数据段?
作者: plscareme    时间: 2006-01-09 23:58
》》同样,如果存在这种定义了全局变量共享的共享库,那如何能保证不同进程间的数据一致性呢.还是说在共享库
中不允许使用全局变量?

每个进程一份拷贝, 并不需要互斥。 共享库中的全局量是通过Copy-on-Write的方法在不同进程间共享的。

查阅了一下 赵克佳等等编著的unxi程序设计教程。里面有介绍一个存储映射IO的概念,感觉有点类似。

那是不是意味着每个进程一份拷贝,这里的拷贝是仅仅数据段(甚至仅仅是全局变量)的拷贝?这个拷贝当且仅当需要写(改变)这个全局变量?如果只读就不拷贝,仅仅还是用共享的那块内存?通过在进程空间的映射指引过去? (这两天看那个深入计算机系统)发现这个映射的概念,不知道和真正的内存共享有啥区别。

同时,是不是代码段就不用拷贝了,只是简单的共享? 不知道我的理解有没有问题?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2