0 回顾
- 整个磁盘变成一棵目录树
- 目录树组织一堆文件
- 文件抽象
- 一个文件到一堆盘块集合
- 今天要讲的,文件系统不是一个文件到一堆盘块的集合
- 因为整个磁盘上不可能只存放一个文件
- 整个磁盘上存放的是一堆文件
- 所以就是将整个磁盘当中的所有盘块号进行抽象(用数据结构进行组织)组织
1 目录与文件系统
- 将整个磁盘的盘块存储映射关系维护结构使得在用户眼里形成一堆有组织的文件(树状的目录树)
- 也就是说,从上往下来说用户按照上述目录树的结构去存储文件,去访问文件,管理文件,那么就把这种读写,最后通过磁盘上存取的映射关系转换成对扇区的读写以及 C H S CHS CHS 的读写,最后变成真正的放在磁盘上,这就是文件系统
- 底层的这种结构就是对上层的实现,而上层就是对底层的抽象,用户眼里看到的就是这种目录树的结构,但是底层则是操作系统那种盘块号的样子,所以说,这也解释了为什么磁盘插在哪台电脑上,用户看到的东西都是一样的原因,因为里面的结构已经形成文件系统了,可以完成这个抽象,所以在另外一台机器上,根据程序就可以建立起这样一个视图,所以这种磁盘组织成这样以后,可以插在机器1上也可以插在机器2上,然后用户看到的都是目录树
- 文件系统:将整个磁盘的盘块最后抽象成目录树结构
- 目录树:用户使用磁盘的基本样子,用户不关心磁盘有什么,插在哪里,怎么运做的,只关心这个磁盘里有哪些文件,分别放在哪些目录下
1.1 映射
- 上次讲的是一个文件怎么映射一堆盘块,现在讲的是一堆文件怎么映射成整个磁盘
- 这样放太多太杂了
- 引出目录树
1.2 目录树
- 典型的分治
- 上方的data,my等,都是目录,表示一个文件集合
- 这个结构就是对多个文件的一种组织结构
- 主题就是操作系统如何做出映射结构,将多个文件映射到磁盘上
- 现在多个文件就组织成这样的一种结构,关键就是目录
- 实现目录,树状结构就有了
1.3 实现目录
- 上节课当中,a是字符流,已知a的inode(FCB)就可以找到这个文件(一旦知道inode就知道映射表了,再根据字符流的位置,就可以读写文件)
- 现在是给出a的路径,能够把a的inode找到,把a的inode找到,再和前面的知识接上即可就可以访问整个目录树了,即可访问目录树的任意位置
- 目录树的任意位置都是路径给定义的
- 最终的关键:给你路径名,路径名体现了树状结构,根据树状结构产生的路径名,得到文件的inode(FCB),和前面知识接上,给inode,给读写位置,就能找到对应的盘块,再往前面接上,给我盘块,就能放到电梯队列上,再和前面接上,给我电梯队列,在磁盘中断的时候把盘块读出来,算出CHS,就可以发给控制器,再和前面接上,控制器说了,一旦给我CHS,就可以驱动马达,去读写那个盘块
根据目录树获得FCB和inode,通过inode和读写位置找到盘块,将盘块放入电梯队列,磁盘中断获取队列算出CHS发给磁盘控制器
1.4 树状目录的完整实现
- 那么磁盘块上该存放什么信息来实现目录?
- 找到文件就是找到其对应的FCB
- 根据my找到my下面的data文件
- my目录下是data,那么什么东西才能找到data?
- 肯定是my下面的东西来描述data
- 所以是FCB
- my存放文件描述符 然后使用文件描述符去找到FCB
- 存放FCB的编号就可以使得效率更高,就不用全部导入了
- 可不可以这样理解:所谓的文件,目录,其实都是一层层的索引
- 用一个位图来表示哪些块是空闲的
- 蓝色的块是除文件名外的文件其他信息,包括像所有者,时间戳,块大小等