文件系统VFS理解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• VFS负责将标准文件操作映射到实际文件系统的操作。 • 正是这种抽像和映射,保证了Linux系统可以支持多种
介质的不同文件系统,使所有文件系统都具有基本相 同的外部表现
virtual filesystem (VFS)
• VFS通过一组统一的数据结构和操作函数接口实现抽 象
• 操作函数
• 操作函数由实际的文件系统实现
• superblock结构用来存储文件系统的相关信息
• 设备标识符、文件系统标志、数据块大小、文件系统的特殊 信息、文件系统的使用信息、超级块操作集指针
• VFS的superblock和文件系统一一对应,代表一个实 际的文件系统
• superblock在文件系统挂载时建立,在文件系统卸 载后撤销
• 存在同步更新的问题,所以,VFS也会周期性地将 所有发生改变的Superblock写回磁盘
符
点位图 点表
FAT:
盘卷总 FAT1 FAT2 目录区 信息
数据块
file、dentry、inode三者关系
用户可见
举例
#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("不能tf("从键盘输入%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");
符
点位图 点表
内存:
• superblock • inode • dentry • file
虚拟文件系统的引入
虚拟文件 系统
文件系统1 文件系统2
……..
I/O系统
磁盘
head
驱动
第4层抽象
第3层抽象
第2层抽象
虚拟文件系统是在内存的
第1层抽象
cyl sec
Linux支持的文件系统
由于Linux自由软件的特点,很多人为Linux 添加文件系统,所以。。。。。。。
exit(0); } while(!feof(fp)) { ch=fgetc(fp);
putchar(ch); } fclose(fp); }
file
• 从用户(进程)角度看
• 进程直接处理文件,关心文件的访问模式、以及读、 写等操作,而不是superblock、inode、dentry
• file结构体描述进程打开的文件
DPB链(驱动器参
数块链)
SFT(系统文件表)
CDS(当前目录结
构)
DBF(磁盘缓冲区)
文件子系统的安装程序 文件子系统的建立程序 文件子系统拆除程序 打开、读写、关闭文件程序
………..
ext2的外、内存数据结构
外存: 引导块 块组0 块组1 块组2 块组3
超级块 组描述 块位图 索引节 索引节 数据块
• inode信息的获取
• 从磁盘读入文件的FCB
• inode信息同步
• 与超级块相同,inode也存在同步更新的问题,所以,VFS也会周 期性地将所有发生改变的inode写回磁盘
inode与介质文件系统
ext2: 引导块 块组0 块组1 块组2 块组3
超级块 组描述 块位图 索引节 索引节 数据块
文件系统分类
• 支持的文件系统可分为三类
• 基于磁盘的文件系统
• e.g ext2、ext3、VFAT、NTFS、ISO9660 CDROM…
• 网络文件系统
• e.g NFS、Coda…
• 特殊文件系统
• 不占磁盘空间,e.g /proc
Linux支持的部分文件系统
虚拟文件系统(vfs)
第 四 层 抽 象
第4节 虚拟文件系统 virtual filesystem (VFS)
通常一个操作系统会支持使用几个文件子系统
不同的文件系统的磁盘数据在内存怎么放? Linux支持的文件系统 Linux的VFS 进程与文件
FAT外、内存数据结构
外存:
盘卷总 FAT1 FAT2 目录区 信息
数据块
内存:
Open()返回这 个表的行号
Superblock与介质文件系统
ext2: 引导块 块组0 块组1 块组2 块组3
超级块 组描述 块位图 索引节 索引节 数据块
符
点位图 点表
FAT:
盘卷总 FAT1 FAT2 目录区 信息
数据块
inode
• inode结构体代表文件系统中的一个文件
• 仅当文件被打开时,其对应的VFS inode结构体才在内存中创建
virtual filesystem (VFS)
• VFS不直接操作文件,所有对文件的实际操作都要通 过实际作用于某个介质的文件系统来完成
• 引入VFS的目的是为了屏蔽各种文件系统的差异
• VFS对实际文件系统进行抽像,采用统一的数据结构在 内存中描述所有实际的文件系统,向用户提供一组标 准的文件操作函数。
• 当进程open()一个文件,VFS将为它建立一个file结构
• file结构
• 文件打开模式(f_mode) • 读/写位置指针(f_pos) • 文件访问计数(f_count) • 文件的目录项指针(f_dentry) • 文件操作集指针(f_op)
• file_operations文件操作集结构体
• VFS依据这些对象提供的信息和操作函数来完成将用 户的文件请求映射到实际文件系统的操作
数据结构的建立
• 结构体的数据由实际文件系统的相应的数据来填充 • 各个数据结构的对象存在于内存
• superblock
• inode
• dentry • file
只内存有
Superblock
• 每个文件系统都有自己的superblock结构(卷总结构)
• 它由一组对文件内容进行操作的函数指针组成,如read()、 wirte()、lseek()等。
• file结构体因open()系统调而创建,因close()而销毁
dentry
• dentry 结构体用来记录目录项(directory entry)
• 路径名中的每一个目录项都对应一个dentry • e.g., /home/lkp/Chapter06.txt
介质的不同文件系统,使所有文件系统都具有基本相 同的外部表现
virtual filesystem (VFS)
• VFS通过一组统一的数据结构和操作函数接口实现抽 象
• 操作函数
• 操作函数由实际的文件系统实现
• superblock结构用来存储文件系统的相关信息
• 设备标识符、文件系统标志、数据块大小、文件系统的特殊 信息、文件系统的使用信息、超级块操作集指针
• VFS的superblock和文件系统一一对应,代表一个实 际的文件系统
• superblock在文件系统挂载时建立,在文件系统卸 载后撤销
• 存在同步更新的问题,所以,VFS也会周期性地将 所有发生改变的Superblock写回磁盘
符
点位图 点表
FAT:
盘卷总 FAT1 FAT2 目录区 信息
数据块
file、dentry、inode三者关系
用户可见
举例
#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("不能tf("从键盘输入%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");
符
点位图 点表
内存:
• superblock • inode • dentry • file
虚拟文件系统的引入
虚拟文件 系统
文件系统1 文件系统2
……..
I/O系统
磁盘
head
驱动
第4层抽象
第3层抽象
第2层抽象
虚拟文件系统是在内存的
第1层抽象
cyl sec
Linux支持的文件系统
由于Linux自由软件的特点,很多人为Linux 添加文件系统,所以。。。。。。。
exit(0); } while(!feof(fp)) { ch=fgetc(fp);
putchar(ch); } fclose(fp); }
file
• 从用户(进程)角度看
• 进程直接处理文件,关心文件的访问模式、以及读、 写等操作,而不是superblock、inode、dentry
• file结构体描述进程打开的文件
DPB链(驱动器参
数块链)
SFT(系统文件表)
CDS(当前目录结
构)
DBF(磁盘缓冲区)
文件子系统的安装程序 文件子系统的建立程序 文件子系统拆除程序 打开、读写、关闭文件程序
………..
ext2的外、内存数据结构
外存: 引导块 块组0 块组1 块组2 块组3
超级块 组描述 块位图 索引节 索引节 数据块
• inode信息的获取
• 从磁盘读入文件的FCB
• inode信息同步
• 与超级块相同,inode也存在同步更新的问题,所以,VFS也会周 期性地将所有发生改变的inode写回磁盘
inode与介质文件系统
ext2: 引导块 块组0 块组1 块组2 块组3
超级块 组描述 块位图 索引节 索引节 数据块
文件系统分类
• 支持的文件系统可分为三类
• 基于磁盘的文件系统
• e.g ext2、ext3、VFAT、NTFS、ISO9660 CDROM…
• 网络文件系统
• e.g NFS、Coda…
• 特殊文件系统
• 不占磁盘空间,e.g /proc
Linux支持的部分文件系统
虚拟文件系统(vfs)
第 四 层 抽 象
第4节 虚拟文件系统 virtual filesystem (VFS)
通常一个操作系统会支持使用几个文件子系统
不同的文件系统的磁盘数据在内存怎么放? Linux支持的文件系统 Linux的VFS 进程与文件
FAT外、内存数据结构
外存:
盘卷总 FAT1 FAT2 目录区 信息
数据块
内存:
Open()返回这 个表的行号
Superblock与介质文件系统
ext2: 引导块 块组0 块组1 块组2 块组3
超级块 组描述 块位图 索引节 索引节 数据块
符
点位图 点表
FAT:
盘卷总 FAT1 FAT2 目录区 信息
数据块
inode
• inode结构体代表文件系统中的一个文件
• 仅当文件被打开时,其对应的VFS inode结构体才在内存中创建
virtual filesystem (VFS)
• VFS不直接操作文件,所有对文件的实际操作都要通 过实际作用于某个介质的文件系统来完成
• 引入VFS的目的是为了屏蔽各种文件系统的差异
• VFS对实际文件系统进行抽像,采用统一的数据结构在 内存中描述所有实际的文件系统,向用户提供一组标 准的文件操作函数。
• 当进程open()一个文件,VFS将为它建立一个file结构
• file结构
• 文件打开模式(f_mode) • 读/写位置指针(f_pos) • 文件访问计数(f_count) • 文件的目录项指针(f_dentry) • 文件操作集指针(f_op)
• file_operations文件操作集结构体
• VFS依据这些对象提供的信息和操作函数来完成将用 户的文件请求映射到实际文件系统的操作
数据结构的建立
• 结构体的数据由实际文件系统的相应的数据来填充 • 各个数据结构的对象存在于内存
• superblock
• inode
• dentry • file
只内存有
Superblock
• 每个文件系统都有自己的superblock结构(卷总结构)
• 它由一组对文件内容进行操作的函数指针组成,如read()、 wirte()、lseek()等。
• file结构体因open()系统调而创建,因close()而销毁
dentry
• dentry 结构体用来记录目录项(directory entry)
• 路径名中的每一个目录项都对应一个dentry • e.g., /home/lkp/Chapter06.txt