在Linux系统下,这个虚拟内存就被叫做swap。Linux swap分区是有限制的。在安装操作系统的时候,安装向导会提示用户需要创建多少的SWaP空间。通常情况下,SWaP比较合适的大小为物理内存的1-2倍。
1. 早期的linux对虚拟内存的限制
linux2.2以前的内核,支持最大128M的Linux swap分区或文件。Linux swap的分区或文件总数不超过16个。
所以在linux2.2以前,可用的最大虚拟内存为128M*8=1G.
Swap空间是分页的,每一页的大小和内存页的大小相同,方便Swap空间和内存之间的数据交换。旧版本的Linux实现Swap空间时,用Swap空间的第一页作为任何Swap空间页的一个“位映射”(Bit map)。这就是说第一页的每一位,都对应着一页Swap空间。假如这一位是1,表示此页Swap可用;假如是0,表示此页是坏块,不能使用。这么说来,第一个Swap映射位应该是0,因为,第一页Swap是映射页。另外,最后10个映射位也被占用,用来表示Swap的版本(原来的版本是Swap_space ,现在的版本是swapspace2)。那么,假如说一页的大小为s,这种Swap的实现方法共能管理“8 * ( s - 10 ) - 1”个Swap页。对于i386系统来说s=4096,则空间大小共为133890048,假如认为1 MB=2^20 Byte的话,大小正好为128M。
之所以这样来实现Swap空间的管理,是要防止Swap空间中有坏块。假如系统检查到Swap中有坏块,则在相应的位映射上标记上0,表示此页不可用。这样在使用Swap时,不至于用到坏块,而使系统产生错误。
2. Linux2.2.x对虚拟内存的限制
现在的系统设计者认为:.
1.现在硬盘质量很好,坏块很少。.
2.就算有,也不多,只需要将坏块罗列出来,而无需为每一页建立映射。...
3.假如有很多坏块,就不应该将此硬盘作为Swap空间使用。..
于是,现在的Linux取消了位映射的方法,也就取消了128M的限制。直接用地址访问,限制为2G。.
Linux2.2.x支持最大2G的Linux swap分区或文件。Linux swap的分区或文件总数不超过8个。
所以在Linux2.2.x,可用的最大虚拟内存为 2G*8=16G
3. Linux2.4.x对虚拟内存的限制
Linux2.4.10之前支持最大2G的Linux swap分区或文件。Linux swap的分区或文件总数不超过8个。
所以在 Linux2.4.10之前,可用的最大虚拟内存为 2G*8=16G
Linux2.4.10(含)之后支持最大2G的Linux swap分区或文件。Linux swap的分区或文件总数不超过32个。
所以在 Linux2.4.10之后,可用的最大虚拟内存为 2G*32=64G
Linux2.4.x在内存管理策略上,就如Windows98向Windows2000转变一样,在内存和交换区中保存了更多的脏页,而不是及时回收内存,以此提高系统的效率。
此外,如果你有超过1块磁盘,并且分别在不同的磁盘上建立了Linux swap,那么linux会按照raid 0的方式来使用这些交换分区。