Linux档案系统其实可以分为三个部分第一部分叫Virtual File System Switch简称VFS这是Linux档案系统对外的接口任何要使用档案系统的程序都必须经由这层接口来使用它另外二部分是属于档案系统的内部其中一个是cache另一个就是真正最底层的档案系统像ExtVFAT之类的东西整个Linux档案系统可以用图来表示 为了避免困扰底下我们所讲的档案系统都是指ExtFAT等底层的档案系统至于包含VFSExtBuffer Cache等等我们总称为VFS 在图里我们可以清楚的看到当Kernel要使用档案系统时都是经由VFS这层接口来使用刚才我们有提到一个问题就是当使用者或程序设计师去读取一个档案的内容时它不会因为这个档案位于不同的档案系统就需要使用不同的方式来读取因为这件事VFS已经帮我们做了当我们要读取的档案位于CDROM时VFS就自动帮我们把这个读取的要求交由iso档案系统来做当我们要读取的档案在FAT里时VFS则自动呼叫FAT的函式来帮我们做到当然有需要时VFS也会直接透过Disk driver去读取资料但是当我们要求读写档案时难道iso或FAT档案系统会直接透过driver去读写吗? 不是的就像PC上除了内存之外还有一层的cache来加快速度在Linux档案系统其实也是有一个Cache的机制以加快速度叫做Buffer Cache底层的档案系统要读写磁盘上的资料时都要经过Buffer Cache如果资料在Buffer Cache里有的话就直接读取如果没有的话才透过Buffer Cache要求driver去读写除了Buffer Cache之外其实Linux档案系统里还有一个Cache叫Directory Cache你知道吗? 如果我们去统计使用者的行为的话ls这种命令其实占的比重是蛮大的每次的ls或读写档案其实都要对目录的内容做search因此如果在目录这方面能做个Cache的话那系统整统的速度就会再往上提升Directory Cache的功能就在此其实Linux档案系统里还有一个Cache叫Inode Cache故名思义它是针对Inode做的CacheDirectory Cache跟Inode Cache其实关系是很密切的 |