虚拟文件系统

磁盘文件系统(Linux使用的文件系统、UNIX家族文件系统、MS文件系统、CD-ROM等DVD文件系统、其他有专利权的文件系统等等。)

网络文件系统(NFS、CIFS等等。)

特殊文件系统

3、通用文件模型 common file model

!内核负责把一组合适的指针分配给与每个打开文件相关的file变量,然后负责调用针对每个具体文件系统的函数。

超级块对象(superblock object):存放已安装文件系统的有关信息。对基于磁盘的文件系统,这类对象通常对应于存放在磁盘上的文件系统控制块(filesystem control block)。

索引节点对象(inode object):存放关于具体文件的一般信息。对基于磁盘的文件系统,这类对象通常对应于存放在磁盘上的文件控制块(file control block)。每个索引节点对象都有一个索引节点号,这个节点号唯一的标识文件系统中的文件。

文件对象(file object):存放打开文件与进程之间进行交互的有关信息。这类信息仅当进程访问文件期间存在于内核内存中。

目录项对象(dentry object):存放目录项与对应文件进行链接的有关信息。每个磁盘文件系统都以自己特有的方式将这类信息存在磁盘中。

4、VFS所处理的系统调用(三类)

普通文件、目录文件、符号链接文件的系统调用

设备文件、管道文件的系统调用

套接字系统调用

二、VFS的数据结构

1、超级块对象、索引节点对象、文件对象、目录项对象

2、目录项高速缓存

a.一个处于正在使用、未使用或负状态的目录项对象的集合

所有“未使用”目录项对象都存放在一个“最近最少使用LRU”双向链表中。

b.一个散列表,从中能够快速获取与给定的文件名和目录名对应的目录项对象。同样,如果访问的对象不在目录项高速缓存中,则散列函数返回一个空值。

三、文件系统类型

四、文件系统处理

1、system`s root filesystem: 由内核在引导阶段直接安装,并拥有系统初始化脚本以及最基本的系统程序。

2、进程的根目录是与“/”路径相对应的目录。缺省情况下,进程的根目录与系统根文件系统的根目录一致(更准确的说,与进程的命名空间中的根文件系统的根目录一致)。

a.进程的命名空间:每个进程可拥有自己的已安装文件系统树。

b.文件系统安装(vfsmount数据结构)

c.安装普通文件系统

d.安装根文件系统

安装根文件系统分为两个阶段:

1、内核安装特殊rootfs文件系统,该文件系统仅提供一个作为初始安装点的空目录;

2、内核在空目录上安装实际根文件系统。

e.卸载文件系统(sys_umount())

五、路径名查找

path_lookup()->link_path_walk()

特别注意的是,父路径名查找及符号链接查找。

六、VFS系统调用的实现

七、文件加锁

劝告锁:只有在访问文件之前其他进程合作检查锁的存在时,锁才起作用。(POSIX标准规定的fcntl()系统调用)

共享读锁与独占写锁。

Linux文件加锁:劝告锁、强制锁、共享模式强制锁、租借锁;

linux文件系统调用:fcntl()、flock()、lockf();

Linux文件锁数据结构:file_lock

 

FL_FLOCK锁:与一个文件对象相关联

FL_POSIX锁:与一个进程和一个索引节点相关联

posted @ 2013-08-10 16:35  CN.SnailRun  阅读(414)  评论(0编辑  收藏  举报