虚拟文件系统 (VFS) 简介
前言
Linux是目前蛮热门的一个操作系统。很多人都知道它很是免费的,而且它也很稳定,更重要的是,它不会出现蓝色画面。可是,你知道吗? Linux所支持的档案系统高达十几个,除了为它量身打造的Ext2之外,它还支持了Minix,FAT,VFAT,NFS,NTFS…等等。有没有想过,它是怎么做到使得可以同时支持十多个档案系统呢? 没错,就是VFS,也就是这篇文章的重点。在这篇文章里,我会跟各位介绍Linux档案系统的结构,VFS所扮演的角色。
Linux档案系统结构
图:http://linuxfab.cx/Columns/17/Image2.gif
Linux的档案系统在外型上其实跟UNIX档案系统是一样的。它是一个反转过来的树。最上层是系统的根目录,也就是"/"。系统根目录底下可以是目录也可以是档案,目录里也可以包含目录,档案等。如此就形成一个反转过来的树。我们知道,在Windows,如果你有二个partition,一个叫C,另一个叫D。当你要到D这个partition时,只要打"D:"就可以了。但是在Linux里可不是这样。要去读取另一个partition的资料必须要经由mount的动作。像
mount -t ext2 /dev/hda3 /mnt
就会将硬盘第三个partition挂在/mnt这个目录底下。Mount完之后,/mnt原本的内容会看不到,只会看到hda3里的内容。其中/mnt我们称为hda3的mount point。而/mnt这个目录则是被hda3所cover。经过mount以后,我们就可以经由/mnt去读取hda3的内容,就好象hda3的内容本来就放在/mnt底下一样。整个过程,如图1所示。
图1(a)是原本的档案结构,图1(b)则是hda3这个partition的内容,将hda3 mount到/mnt之后,整个档案系统就变成图1(c)的样子。不管如何,Linux会保持其档案系统为一个tree的形状。这样mount下去,我们很容易可以推想到,从根目录开始的这个tree很有可能包含好几种的档案系统,可能挂在/mnt上的是Ext2档案系统,挂在/home上的是FAT,而挂在/cdrom上的则是iso9660档案系统。我们知道,当使用者去读取这些目录里的内容时,他本身是不用去管这个目录挂的档案系统是什么。基本,使用者也不会感到有什么不同。而就programmer的观点来看,我们也不会说去读/mnt里的档案和去读/home里的档案要下不同的参数。Linux是怎么做到这一点的呢? 它就是利用VFS来做到的。
1. VFS架构
Linux档案系统其实可以分为三个部分,第一部分叫Virtual File System Switch,简称VFS。这是Linux档案系统对外的接口。任何要使用档案系统的程序都必须经由这层接口来使用它。另外二部分是属于档案系统的内部。其中一个是cache,另一个就是真正最底层的档案系统,像Ext2,VFAT之类的东西,整个Linux档案系统可以用图2来表示
为了避免困扰,底下我们所讲的档案系统都是指Ext2,FAT等底层的档案系统,至于包含VFS,Ext2,Buffer Cache等等我们总称为VFS。
在图2里,我们可以清楚的看到当Kernel要使用档案系统时,都是经由VFS这层接口来使用。刚才我们有提到一个问题,就是当使用者或程序设计师去读取一个档案的内容时,它不会因为这个档案位于不同的档案系统就需要使用不同的方式来读取。因为这件事VFS已经帮我们做了。当我们要读取的档案位于CDROM时,VFS就自动帮我们把这个读取的要求交由iso9660档案系统来做,当我们要读取的档案在FAT里时,VFS则自动呼叫FAT的函式来帮我们做到。当然,有需要时,VFS也会直接透过Disk driver去读取资料。但是当我们要求读写档案时,难道iso9660或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做的Cache。Directory Cache跟Inode Cache其实关系是很密切的。
Linux是目前蛮热门的一个操作系统。很多人都知道它很是免费的,而且它也很稳定,更重要的是,它不会出现蓝色画面。可是,你知道吗? Linux所支持的档案系统高达十几个,除了为它量身打造的Ext2之外,它还支持了Minix,FAT,VFAT,NFS,NTFS…等等。有没有想过,它是怎么做到使得可以同时支持十多个档案系统呢? 没错,就是VFS,也就是这篇文章的重点。在这篇文章里,我会跟各位介绍Linux档案系统的结构,VFS所扮演的角色。
Linux档案系统结构
图:http://linuxfab.cx/Columns/17/Image2.gif
Linux的档案系统在外型上其实跟UNIX档案系统是一样的。它是一个反转过来的树。最上层是系统的根目录,也就是"/"。系统根目录底下可以是目录也可以是档案,目录里也可以包含目录,档案等。如此就形成一个反转过来的树。我们知道,在Windows,如果你有二个partition,一个叫C,另一个叫D。当你要到D这个partition时,只要打"D:"就可以了。但是在Linux里可不是这样。要去读取另一个partition的资料必须要经由mount的动作。像
mount -t ext2 /dev/hda3 /mnt
就会将硬盘第三个partition挂在/mnt这个目录底下。Mount完之后,/mnt原本的内容会看不到,只会看到hda3里的内容。其中/mnt我们称为hda3的mount point。而/mnt这个目录则是被hda3所cover。经过mount以后,我们就可以经由/mnt去读取hda3的内容,就好象hda3的内容本来就放在/mnt底下一样。整个过程,如图1所示。
图1(a)是原本的档案结构,图1(b)则是hda3这个partition的内容,将hda3 mount到/mnt之后,整个档案系统就变成图1(c)的样子。不管如何,Linux会保持其档案系统为一个tree的形状。这样mount下去,我们很容易可以推想到,从根目录开始的这个tree很有可能包含好几种的档案系统,可能挂在/mnt上的是Ext2档案系统,挂在/home上的是FAT,而挂在/cdrom上的则是iso9660档案系统。我们知道,当使用者去读取这些目录里的内容时,他本身是不用去管这个目录挂的档案系统是什么。基本,使用者也不会感到有什么不同。而就programmer的观点来看,我们也不会说去读/mnt里的档案和去读/home里的档案要下不同的参数。Linux是怎么做到这一点的呢? 它就是利用VFS来做到的。
1. VFS架构
Linux档案系统其实可以分为三个部分,第一部分叫Virtual File System Switch,简称VFS。这是Linux档案系统对外的接口。任何要使用档案系统的程序都必须经由这层接口来使用它。另外二部分是属于档案系统的内部。其中一个是cache,另一个就是真正最底层的档案系统,像Ext2,VFAT之类的东西,整个Linux档案系统可以用图2来表示
为了避免困扰,底下我们所讲的档案系统都是指Ext2,FAT等底层的档案系统,至于包含VFS,Ext2,Buffer Cache等等我们总称为VFS。
在图2里,我们可以清楚的看到当Kernel要使用档案系统时,都是经由VFS这层接口来使用。刚才我们有提到一个问题,就是当使用者或程序设计师去读取一个档案的内容时,它不会因为这个档案位于不同的档案系统就需要使用不同的方式来读取。因为这件事VFS已经帮我们做了。当我们要读取的档案位于CDROM时,VFS就自动帮我们把这个读取的要求交由iso9660档案系统来做,当我们要读取的档案在FAT里时,VFS则自动呼叫FAT的函式来帮我们做到。当然,有需要时,VFS也会直接透过Disk driver去读取资料。但是当我们要求读写档案时,难道iso9660或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做的Cache。Directory Cache跟Inode Cache其实关系是很密切的。
顶(0)
踩(0)
下一篇:Linux目录切换技巧
- 最新评论