Linux中关于swap、虚拟内存和page的区别
上一篇 / 下一篇 2012-11-26 09:49:07 / 个人分类:Linux
k"q9P2~y#H0 最近看了Linux的一些内存管理知识,发现一些既熟悉又陌生的几个名词,swap、虚拟内存、page分页,都是与内存相关的一些信息,但他们之间有什么区别呢?要明白这个首先要知道什么是保护模式和实模式。51Testing软件测试网n$U xTBU*W!_%M4_]
51Testing软件测试网:gl3rU `/t{e以前的操作系统是实模式,例如dos。每个时候只有一个进程在跑,这个进程使用全部的物理内存。51Testing软件测试网'r4c6lL@2Tu/rz_)O
51Testing软件测试网K6R'L1?tS7U:Y K后来发展到保护模式,分时多进程。一个CPU上跑多个进程, 但进程不知道到底有多少内存可以用,它能访问内存最大地址。例如16位系统就能访问2^16byte,32位就是2^32位。但是实际上没有那么多内存阿?怎么办?保护模式就应运而生了。
+E }2k]2SjS"J0w` JN4Ga(JC0 假设进程是一个刘翔,裁判(系统)一发令他就开始跑步。但是裁判说给你1秒,可以跑100米。于是刘翔开始跑步(内存地址),一秒后刘翔只跑了10米, 裁判吹哨说:刘翔你先歇会,我要去给王军霞吹哨呢,现记住你跑到哪里了(保护),等会从这里开始。裁判给王军霞吹哨,一只跑一秒,回来再给刘翔吹哨再跑1 秒,如此往复。开始跑步的人少,刘翔还可以站在跑道上休息。后来跑步的人越来越多,跑道都挤满了人,那么只能把一些人移动到跑道旁的草地上休息(交换)。 后来发现有些人横七竖八的躺着,占了不少空间,于是规定每个人只能站着(page),这样可以容纳很多的人。51Testing软件测试网uBn ~'a Z^1\I&y2q
o G$k2^'sFJ0 swap -- 草地,就是存放page的硬盘空间。51Testing软件测试网|5P|5_Z6?KD
8i(WVs4a0 virtual memory -- 假设刘翔跑n圈就已经是到北京的距离了,可是他们还在原地。虚拟就是不存在的。
b)N3w]+g3r3G0C0|?([1P&Go0 page -- 草地上的格,每次只容纳一个人。
r'H\%eT0@8`Kss(Y y0 为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache.前者针对磁盘块的读写,后者针对文件inode的读写.这些Cache有效缩短了I/O系统调用(比如 read,write,getdents)的时间.
)j;t}i gp&e0x(w5Y/dzZ%P9Z$M0 内存活动基本上可以用3个数字来量化:活动虚拟内存总量,交换(swapping) 率和调页(paging)率.其中第一个数字表明内存的总需求量,后两个数字表示那些内存中有多少比例正处在使用之中.目标是减少内存活动或增加内存量, 直到调页率保持在一个可以接受的水平上为止.51Testing软件测试网"S$~!X.rSR o?$R
51Testing软件测试网`)pr\Yv(L活动虚拟内存的总量(VM)=实际内存大小(size of real memory)(物理内存)+使用的交换空间大小(amount of swap space used)
0{)^T c:Ka#} va0-F W8I5v&C:?fU0 当程序运行需要的内存大于物理内存时,Linux系统采用了调页机制,即系统copy一些内存中的页面到磁盘上,腾出来空间供进程使用。
RPYK SN'h051Testing软件测试网'T-i4z-B0G#hM)g大多数系统可以忍受偶尔的调页,但是频繁的调页会使系统性能急剧下降。