Presentation is loading. Please wait.

Presentation is loading. Please wait.

第4节 虚拟文件系统 virtual filesystem (VFS)

Similar presentations


Presentation on theme: "第4节 虚拟文件系统 virtual filesystem (VFS)"— Presentation transcript:

1 第4节 虚拟文件系统 virtual filesystem (VFS)
通常一个操作系统会支持使用几个文件子系统 不同的文件系统的磁盘数据在内存怎么放? Linux支持的文件系统 Linux的VFS 进程与文件

2 FAT外、内存数据结构 CDS(当前目录结构) DBF(磁盘缓冲区) 外存: 内存: SFT(系统文件表) DPB链(驱动器参数块链)
数据块 FAT1 FAT2 目录区 盘卷总信息 Open()返回这个表的行号 内存: CDS(当前目录结构) DPB链(驱动器参数块链) SFT(系统文件表) 文件子系统的安装程序 文件子系统的建立程序 文件子系统拆除程序 打开、读写、关闭文件程序 ……….. DBF(磁盘缓冲区)

3 ext2的外、内存数据结构 外存: 内存: 块组3 块组2 块组1 块组0 引导块 数据块 索引节点表 组描述符 块位图 索引节点位图
超级块 内存: superblock inode dentry file

4 虚拟文件系统的引入 文件系统1 磁盘 驱动 虚拟文件系统 I/O系统 文件系统2 …….. 虚拟文件系统是在内存的 第4层抽象 第3层抽象
第2层抽象 第1层抽象 sec cyl head 文件系统1 磁盘 驱动 虚拟文件系统 I/O系统 文件系统2 …….. 虚拟文件系统是在内存的

5 Linux支持的文件系统 由于Linux自由软件的特点,很多人为Linux添加文件系统,所以。。。。。。。

6 文件系统分类 支持的文件系统可分为三类 基于磁盘的文件系统 网络文件系统 特殊文件系统
e.g ext2、ext3、VFAT、NTFS、ISO9660 CDROM… 网络文件系统 e.g NFS、Coda… 特殊文件系统 不占磁盘空间,e.g /proc

7 Linux支持的部分文件系统

8 虚拟文件系统(vfs) 第四层抽象

9 virtual filesystem (VFS)
正是这种抽像和映射,保证了Linux系统可以支持多种 介质的不同文件系统,使所有文件系统都具有基本相 同的外部表现

10 virtual filesystem (VFS)
操作函数 操作函数由实际的文件系统实现 VFS依据这些对象提供的信息和操作函数来完成将用 户的文件请求映射到实际文件系统的操作

11 数据结构的建立 结构体的数据由实际文件系统的相应的数据来填充 各个数据结构的对象存在于内存 只内存有 superblock inode
dentry file 只内存有

12 Superblock VFS的superblock和文件系统一一对应,代表一个实 际的文件系统
设备标识符、文件系统标志、数据块大小、文件系统的特殊 信息、文件系统的使用信息、超级块操作集指针 VFS的superblock和文件系统一一对应,代表一个实 际的文件系统 superblock在文件系统挂载时建立,在文件系统卸 载后撤销 存在同步更新的问题,所以,VFS也会周期性地将 所有发生改变的Superblock写回磁盘

13 Superblock与介质文件系统 ext2: FAT: 块组3 块组2 块组1 块组0 引导块 数据块 索引节点表 组描述符 块位图
索引节点位图 超级块 FAT: 数据块 FAT1 FAT2 目录区 盘卷总信息

14 inode inode结构体代表文件系统中的一个文件 inode信息的获取 inode信息同步
仅当文件被打开时,其对应的VFS inode结构体才在内存中创建 inode信息的获取 从磁盘读入文件的FCB inode信息同步 与超级块相同,inode也存在同步更新的问题,所以,VFS也会周 期性地将所有发生改变的inode写回磁盘

15 inode与介质文件系统 ext2: FAT: 块组3 块组2 块组1 块组0 引导块 数据块 索引节点表 组描述符 块位图 索引节点位图
超级块 FAT: 数据块 FAT1 FAT2 目录区 盘卷总信息

16 file、dentry、inode三者关系
用户可见

17 举例 printf("从键盘输入%d个字符:",N); for(i=0;i<N;i++) { ch=getchar(); fputc(ch,fp); } fclose(fp); printf("文件的内容如下:\n"); if((fp=fopen("file2.txt","r"))==NULL) { printf("不能打开文件!\n"); exit(0); } while(!feof(fp)) { ch=fgetc(fp); putchar(ch); } } #include <stdio.h> #include "stdlib.h" #define N 8 void main() { int i; char ch; FILE *fp; if((fp=fopen("file2.txt","w"))==N ULL) {printf("不能打开文件!\n"); exit(0); }

18 file 从用户(进程)角度看 file结构体描述进程打开的文件 file结构体因open()系统调而创建,因close()而销毁
进程直接处理文件,关心文件的访问模式、以及读、 写等操作,而不是superblock、inode、dentry file结构体描述进程打开的文件 当进程open()一个文件,VFS将为它建立一个file结构 file结构 文件打开模式(f_mode) 读/写位置指针(f_pos) 文件访问计数(f_count) 文件的目录项指针(f_dentry) 文件操作集指针(f_op) file_operations文件操作集结构体 它由一组对文件内容进行操作的函数指针组成,如read()、 wirte()、lseek()等。 file结构体因open()系统调而创建,因close()而销毁

19 dentry dentry 结构体用来记录目录项(directory entry) 路径名中的每一个目录项都对应一个dentry
e.g., /home/lkp/Chapter06.txt 为/, home, lkp, and Chapter06.txt分别创建dentry 当VFS首次解析一个路径名时,它依次读取路径中的每个目录或文件,为每个分量建立一个dentry结构 VFS将这些已建立的dentry结构按目录关系链接在一起 在后续的文件查找操作中,VFS只需沿dentry的链接结构进行查找,可以很快地找到目标文件的dentry结构,然后得到它的VFS inode

20 为什么要dentry linux在定位一个文件时需要沿该文件的路径逐级访问路径中的 目录
如果每次都要从磁盘读取目录文件的话,访问文件的效率就会很 低。 为了方便查找操作,VFS引入了目录项(dentry)的概念。

21 dentry 与 inode 的关系 dentry是对文件的逻辑描述 dentry与inode结合可以完整地表示一个文件
VFS inode描述文件的属性及其内容的物理存储 dentry与inode结合可以完整地表示一个文件 dentry可看作是访问一个文件的入口,查找文件就是 在dentry链表中沿路径找到目标dentry的过程 文件路径名

22 进程与其相关文件之间的关系 多个进程可以同时打开和操作同一个文件 一个文件 同一个文件在内存中可能存在多个file结构体对象
对应inode是唯一的 但其对应的file结构体对象可能不唯一(被多个进程打开 “读”)

23 多个进程同时打开同一个文件 PCB1 file dentry inode PCB2 file dentry

24 多个进程同时打开同一个文件 PCB1 file dentry inode PCB2 file

25 多个进程同时打开同一个文件 PCB1 file dentry inode PCB2

26 总结 每个文件系统在内存都有: superblock inode dentry file 高级语言编程者可以看到file结构


Download ppt "第4节 虚拟文件系统 virtual filesystem (VFS)"

Similar presentations


Ads by Google