目录
一、文件系统的全局结构
1.文件系统在外存中的结构
文件系统通过物理格式化、逻辑格式化在外存当中如何一步步被建立?
(1)物理格式化
一个磁盘刚被生产出来时,没有划分扇区。所以第一步要低级格式化(即物理格式化)把磁盘分为一个个扇区
还需检测磁盘中有无坏扇区,有的话使用备用扇区来替换坏扇区
os访问某坏扇区时,会用一个备用扇区替换坏扇区,所以坏扇区的存在对操作系统来说是透明的
(2)逻辑格式化
逻辑格式化会把磁盘分为多个分区
灰色部分的分区表记录每个分区的大小,地址范围
每个分区可以建立各自独立的文件系统 ,如下图C盘建立了一个UNIX文件系统
逻辑格式化完成了各分区的文件系统初始化,上图也就是文件系统在外存中的结构
2.文件系统在外存中的结构
内存分为用户区和内核区
举例,open系统调用打开文件的背后过程
用户读文件A时,使用返回文件描述符进行读文件,先获得系统打开文件索引,然后从系统打开文件表中获得文件A的目录项就找到了文件
二、虚拟文件系统
1.特点1
计算机上难免会插上各种各样的外部存储设备,它里面的文件系统格式可能是各不相同的。对于不同的文件系统,生产者定义的函数接口各不相同 。
如下图普通的文件系统所示,open打开文件的系统调用可能函数名不同、参数列表不同、参数格式不同等,那么我们要从一个文件系统打开一个文件,如操作UFS文件系统时就得按照该系统规范来写代码,操作其它系统就又是另一种不一样的函数。
所以,在操作系统当中引入了虚拟文件系统,程序员只需根据虚拟文件系统制定的标准来写代码即可
虚拟文件系统VFS的特点:①向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
2.特点2
现在VFS可以处理上层用户发来的一个标准的系统调用请求,去操作底层一个具体的文件系统。
下层的这些文件系统对外提供的函数调用接口不统一,那么VFS在调用一个具体文件系统时,函数调用代码也需根据不同的文件系统来进行改变,所以VFS会要求底层的文件系统实现VFS规定的函数接口
虚拟文件系统VFS的特点:②VFS要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求
简而言之,VFS向上给用户提供统一接口,向下要让这些文件系统实现这些统一的接口
3.特点3
不同的文件系统,表示文件数据结构各不相同。打开文件后,其在内存中的表示就不同
为此,当我们open打开一个文件后,VFS会给这个文件在内存中新建一个vnode,即v结点,并将文件信息复制到vnode中,这样虚拟文件系统就可以用一个统一的数据结构来表示任何一个文件的信息
虚拟文件系统VFS的特点:③每打开一个文件,VFS就在主存中新建一个vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统
vnode只存在于主存中,而inode既会被调入主存,也会在外存中存储
vnode中的函数功能指针指向了对应文件系统的函数功能列表,当open打开了一个文件后,后续对文件进行的任何操作都可以先找到这个文件的vnode,然后根据vnode中记录的函数功能指针找到具体对应的这个文件系统的函数功能列表,然后执行具体的函数。这样就可以实现从上至下一层一层的函数调用
4.文件系统挂载
即文件系统安装/装载——如何将一个文件系统挂载到操作系统中?
- 在VFS中注册新挂载的文件系统。内存中的挂载表包含每个文件系统的相关信息,包括文件系统类型、容量大小等
- 新挂载的文件系统,要向VFS提供一个函数地址列表
- 将新文件系统加到挂载点,也就是将新文件系统挂载在某个父目录下