Linux操作系统的内存使用机制研究( 二 )


大多数操作系统都有高速缓冲(尽管可能称呼不同),但是并不是都遵守上面的原理 。有些是直接写(write-through):数据将被立刻写入磁盘(当然,数据也被放入缓存中) 。如果写操作是在以后做的,那么该缓存被称为后台写(write-back) 。后台写比直接写更有效,但也容易出错:如果机器崩溃,或者突然掉电,缓冲中改变过的数据就被丢失了 。如果仍未被写入的数据含有重要的薄记信息,这甚至可能意味着文件系统(如果有的话)已不完整 。
针对以上的原因,出现了很多的日志文件系统,数据在缓冲区修改后,同时会被文件系统记录修改信息,这样即使此时系统掉电,系统重启后会首先从日志记录中恢复数据,保证数据不丢失 。当然这些问题不再本文的叙述范围 。
由于上述原因,在使用适当的关闭过程之前,绝对不要关掉电源,sync命令倾空(flushes)缓冲,也即,强迫所有未被写的数据写入磁盘,可用以确定所有的写操作都已完成 。在传统的UNIX系统中,有一个叫做update的程序运行于后台,每隔30秒做一次sync操作,因此通常无需手工使用sync命令了 。Linux另外有一个后台程序,bdflush,这个程序执行更频繁的但不是全面的同步操作,以避免有时sync的大量磁盘I/O操作所带来的磁盘的突然冻结 。
在Linux中,bdflush是由update启动的 。通常没有理由来担心此事,但如果由于某些原因bdflush进程死掉了,内核会对此作出警告,此时你就要手工地启动它了(/sbin/update) 。
【Linux操作系统的内存使用机制研究】缓存(cache)实际并不是缓冲文件的,而是缓冲块的,块是磁盘I/O操作的最小单元(在Linux中,它们通常是1KB) 。这样,目录、超级块、其它文件系统的薄记数据以及非文件系统的磁盘数据都可以被缓冲了 。
缓冲的效力主要是由它的大小决定的 。缓冲太小的话等于没用:
它只能容纳一点数据,因此在被重用时,所有缓冲的数据都将被倾空 。实际的大小依赖于数据读写的频次、相同数据被访问的频率 。只有用实验的方法才能知道 。
如果缓存有固定的大小,那么缓存太大了也不好,因为这会使得空闲的内存太小而导致进行交换操作(这同样是慢的) 。为了最有效地使用实际内存,Linux自动地使用所有空闲的内存作为高速缓冲,当程序需要更多的内存时,它也会自动地减小缓冲的大小 。
这就是一般情况下linux内存的一般机制,当然linux内存的运行机制远远比这个复杂,但是只有了解了这个机制,我们管理服务器才能得心应手!

推荐阅读