本来最初是想知道共享库是怎么实现一个副本就行的,顺便拓展下。
虚拟内存:
当运行一个进程时,它需要的内存有可能大系统内存容量。通常一个进程会有4G独立的空间,那么n个进程就是
n * 4G的内存,很明显系统内存不够。 每个进程的4G只是虚拟内存,每次访问的时候都要转变成物理地址。 虚拟内存主要是通过请求调用和置换功能,从逻辑上对内存扩容。页面请求/段:
一般程序在运行时,只会将当前需要运行的少数页面或段转入内存。如果访问的数据没有在内存中,便会产生
缺页中断,将需要的页调入内存。如果没有空地方,会找一个进行覆盖。 被覆盖的页如果修改过,还要将此页写会磁盘。可以认为虚拟空间是被映射到磁盘上面(类似共享内存的mmap),然后进行上面的页面请求置换。
共享库:
在链接的时候,物理内存可以只有一份共享库的副本,然后不同的进程只需将自己的虚拟内存映射过去。
参考资料:
linux虚拟内存和物理内存:
虚拟内存、物理内存: