文字上说:虚拟内存 = 交换空间
但是图片上说 : 虚拟内存 = 物理内存 + 交换空间
解决方案 »
- Hadoop配置nodemanager出错
- makefile里加了个变量,结果编译错误,求解
- UNIX环境表在C进程中的内存位置
- 求大神指导!!~~急
- ubuntu下qt交叉编译环境的配置,为什么交叉编译环境都配好了,使用qt creator生成的可执行文件是x86_64的,不是arm的?
- arm-Linux内核交叉编译 出现错误 selected processor does not support movt r2 32768
- 关于find . -mtime给出结果的问题
- linux查看软件依赖动态库中的哪些函数
- 新手求问
- 哪位大神可以知道这是什么语言写的程序?
- 大佬求救!uboot-2012 移植dm9000 tftp下载不成功,uboot会重启
- 在recovery模式下往misc分区写值并不被清除,如何实现?
交换空间是硬盘上的交换分区空间,虚拟内存是内核维护用来给用户空间进程的。
因为实际物理内存比较小(假如8G),其中内核占用1G,其余7G是给用户空间进程使用的。内核按照一定的规则虚出一个内存空间(虚拟内存),让每个用户空间的进程看到的都是8G。如果A进程占用1G,B进程占用2G,实际上他们在物理内存中占用了3G(内核知道并管理),但是进程A、进程B都认为自己总空间是8G。
这样会导致一个问题,如果所有进程占用虚拟内存的总量达到了内核分配给用户空间的物理内存极限,就会提示内存不足。比如进程C还占用了4G,进程D就没法创建。
解决办法就是通过交换空间(swap),把进程正常运行下去所缺少的实际内存空间分配到交换空间上,这样进程就能继续运行先去。
所以,当使用了交换空间,意味着分配给用户空间的物理内存快要用完了甚至已经用完了。但是显然,硬盘上的交换空间IO速度比内存的速度慢了好多个数量级。
这些名词不同的人理解未必完全相同,有差异是正常的,强求一致即无可能,也没有必要。
一台机器物理内存1g,交换空间1g,那么可以使用的内存是2g,操作系统根据一定的算法把它认为不怎么需要用的放在交换空间,最近急着要用的放物理内存。对于应用来说它有2g可用,应用除非有特殊情况,否则它不需要分辨这2g是物理内存还是有一部分在交换空间,从这个角度上看我们可以认为虚拟内存就是2g。