虚拟内存原理

本来最初是想知道共享库是怎么实现一个副本就行的,顺便拓展下。

虚拟内存:

当运行一个进程时,它需要的内存有可能大系统内存容量。通常一个进程会有4G独立的空间,那么n个进程就是
n * 4G的内存,很明显系统内存不够。
每个进程的4G只是虚拟内存,每次访问的时候都要转变成物理地址。
虚拟内存主要是通过请求调用和置换功能,从逻辑上对内存扩容。

页面请求/段:

一般程序在运行时,只会将当前需要运行的少数页面或段转入内存。如果访问的数据没有在内存中,便会产生
缺页中断,将需要的页调入内存。如果没有空地方,会找一个进行覆盖。
被覆盖的页如果修改过,还要将此页写会磁盘。

可以认为虚拟空间是被映射到磁盘上面(类似共享内存的mmap),然后进行上面的页面请求置换。


共享库:

在链接的时候,物理内存可以只有一份共享库的副本,然后不同的进程只需将自己的虚拟内存映射过去。


参考资料:

linux虚拟内存和物理内存:http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html
虚拟内存、物理内存:http://blog.chinaunix.net/uid-26983585-id-3364091.html

原文地址:https://www.cnblogs.com/Przz/p/6501786.html