虚拟内存
虚拟内存、物理内存、硬盘空间三者的关系
物理内存:物理内存指通过物理内存条而获得的内存空间,称为RAM。
虚拟内存:虚拟内存是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存。用作虚拟内存的磁盘空间被称为交换空间(又称 swap 空间)。
作为物理内存的扩展,Linux 会在物理内存不足时,使用交换分区的虚拟内存,更详细地说,就是内核会将暂时不用的内存块信息写到交换空间,这样一来,物理内存得到了释放,这块内存就可以用于其他目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。
虚拟内存的作用
虚拟内存可以使得进程对运行内存超过物理内存大小。
为了在多进程环境下,使得进程之间的内存地址不受影响,相互隔离,于是操作系统就为每个进程独立分配一套虚拟地址空间,每个程序只关心自己的虚拟地址就可以,实际上大家的虚拟地址都是一样的,但分布到物理地址内存是不一样的。作为程序,也不用关心物理地址的事情。
每个进程都有自己的虚拟空间,而物理内存只有一个,所以当启用了大量的进程,物理内存必然会很紧张,于是操作系统会通过内存交换技术,把不常使用的内存暂时存放到硬盘(换出),在需要的时候再装载回物理内存(换入)。
那既然有了虚拟地址空间,那必然要把虚拟地址「映射」到物理地址,这个事情通常由操作系统来维护。
那么对于虚拟地址与物理地址的映射关系,可以有分段和分页的方式,同时两者结合都是可以的。
扩展内存
关于物理内存和交换空间的大小设置问题,取决于实际所用的硬盘大小,但大致遵循这样一个基本原则:
如果内存较小(根据经验,物理内存小于 4GB),一般设置 swap 分区大小为内存的 2 倍;
如果物理内存大于 4GB,而小于 16GB,可以设置 swap 分区大小等于物理内存;
如果内存大小在 16GB 以上,可以设置 swap 为 0,但并不建议这么做,因为设置一定大小的 swap 分区是有一定作用的。
将物理内存为 4 G 的服务器使用硬盘空间增加 8 G 虚拟内存:
检查现有交换分区:
1
2swapon -s
free -m创建交换分区(如果没有交换分区):
在根目录下创建 swapfile 文件,每块 1 M,总共 8192 块,总共 8 G 。
1
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
设置交换文件权限:
1
sudo chmod 600 /swapfile
将文件设置为交换空间:
1
sudo mkswap /swapfile
启用交换空间:
1
sudo swapon /swapfile