|
发表于 2004-6-1 01:14:22
|
显示全部楼层
最初由 javalee 发表
/dev/shm ,tmpfs, swap,这三者之间的关系?
前两者和swap是没什么关系的概念。swap是为了实现现代操作系统中VM机制的需要(Virtual Memory)。这种机制好处多多,可以虚构一个比现实内存大的多的地址空间(一般只受制于机器字长),然后提供并发同时运行多个程序,而且容许有些程序比内存容量还大。这中间用到一种叫做Demand Paging的技术,即只在运行到需要时才将页面内容从低速介质上读入内存;并且在暂时不需要数据时,将页面从内存调出,存放在外存上。为了实现这个目的,一般会在外存上开辟一段连续的专用空间,专门用来存放暂时从内存调出的数据。在*nix下的这个实现,就是swap。
而tmpfs则完全是另外一回事。swap本质上来说,是觉得内存不够用了,没关系,我们虚拟一下,让一部分硬盘空间来顶替一下——这是用时间来换空间。而tmpfs则不同——我的内存足够大,相反,我有些文件操作需要极高的速度,硬盘不能满足我。比如假如我有2G内存,日常用足够了(1G都有余),但是编译一个软件(比如mozilla)还是慢的要死,因为硬盘访问速度则比内存速度要低几百万倍。这时可以用1G(或多或少,tmpfs可以自己决定,这时它的一个好处——见后文)的内存来虚拟一个分区,在这个分区里面进行文件操作,这样节省了最大头的I/O操作时间,cpu几乎就是全速工作,一般会快个n倍(取决于你的操作是I/O瓶颈还是CPU瓶颈)。一个比较典型的用处就是,将/tmp目录挂载为tmpfs,这样所有的临时文件都是在内存中实现,速度快上几百倍是很正常的。
这个tmpfs可能会让人想到ramfs或者ramdisk之类的东西,其实本质上都一样的。不过ramfs会要求你限制使用的大小,在超出设定值时就告诉你类似“磁盘已满”的错误信息。而tmpfs有个好处,它会自动调整你的虚拟空间所占内存的大小,而在系统内存不足时,则会将tmpfs里的东西转移到swap空间里去。这样使用上有很大的灵活性。
至于/dev/shm,好像glibc 2.2以上会将其挂载为tmpfs,其目录设有粘滞位t,可以当作临时目录用。
一般kernel的文档里面应该有tmpfs的介绍,搜搜tmpfs.txt试试 |
|