page cache是一种策略,就是使用完的page并不是立即放到内核的 
free page list中,而是暂时缓存着已被再次使用。这样系统中的 
缓冲的page就越来越多,系统中的free page就越来越少,怎么办? 
系统通过内核线程来完成缓存中页面的回收工作,这些内核线程是 
定期被调用的,平时则处在睡眠的状态,如果进程需要page而free 
page严重短缺的时候,进程可以唤醒这些内核线程来回收缓存的页面, 
这样,一方面缓存,一方面回收达到一种平衡,同时改善了系统的性能。 
 内核中在多处使用了page cache策略,最典型的有:页面交换,和磁盘 
文件的读取。不过实现的方法无非是让不同状态的page,处在不同的 
list中,而回收的内核线程从可以回收的队列中回收page。

swap cache主要是存放那些无根(就是说没有文件系统中的某个文件和其 
对应)的page,例如你用malloc分配出来的。 
它对应的file device就是swapfile。 
它和page cache的区别在于,当文件从file system上读取出来的时候, 
它的内容就会同时读入page cache中。但是当你用malloc分配内存的 
时候,并不马上放到swap cache中,而是在进程中不再使用该内存的 
时候它才被读入swap cache中。 
buffer cache和page cache在2.4 内核里面几乎么啥大区别,我们完全 
可以通过对page cache的操作来实现把数据写入到disk中,而不一定要 
通过buffer cache。如果要说区别的话,主要是page cache的大小是固定 
的,如果你是要从软盘设备(它的block大小是512字节),就可以用一页 
来保存好几个block。这样buffer cache可以同时拥有连续的好几页page cache 
中的page。

〔未必正确,进攻参考]

Logo

更多推荐