细谈操作系统导论之文件系统

1.文件系统概念总览——从VSFS开始

什么是文件系统?文件系统是纯粹的软件,它的目的在于对磁盘进行虚拟化,为用户提供一个抽象概念“文件”和相应的文件列表的抽象——“目录”(其目的是用来更好的分类管理文件)。用户可以使用基于这两个抽象概念延伸出来的文件系统来存储他们的数据。
学习文件系统,最好的方式就是剖析一个现成的文件系统,比如VSFS(简单文件系统)。
在这之前,我们先考虑一下文件系统的两个不同的方面

  1. 文件系统的数据结构,也就是文件系统在磁盘上使用什么样的结构来管理数据
  2. 文件系统的访问方式,也就是文件系统如何将来自进程的需求映射到对应数据的结构上(包括但不限读取,修改删除等等操作)

简单的说,这两个方面所提出的问题就是文件系统怎么在磁盘上划分好数据,怎么操作这些结构来实现计算机进程需要的读取,修改数据的操作。

2 文件元数据与索引节点

文件元数据

首先我们来考虑文件,作为数据集合的抽象,我们会发现如果没有一个起到标识符作用的属性,将无法确定其是否是我们需要的那个文件——想象一下你需要磁盘中的某本书,如果数据开头没有“《书名》”,你根本无法确定这些文字是否来自你需要的书。
因此自然而然的,文件的属性中就有了文件名——以及相应的数据,实际上则是对应数据在磁盘上的位置。(当然为了管理文件,还需要如文件创建者,文件权限,文件大小等琐碎的属性。),为了和数据区分,他们就被叫做元数据。
而一个文件的全部元数据在内存中,被我们划分成一个数据结构,这个数据结构被称作FCB。

索引节点

我们在查找的时候往往不关心数据,更关心文件名,因此把文件名除外之后的元数据们做称另一个集合,称作为inode(索引节点)。在磁盘上,inode们会被集中存储在某些磁盘块上,便于用户查找,这个inode块们被称作inode表——注意inode表是连续的,并且inode数据和具体的数据将被严格分离开,比如120将是inode表,21100将是具体的数据块。这样的设计是为了在inode表中访问时减少磁盘的寻道时间,如果在你的设计中,inode表是基于类似数组的列表的话(即将谈到的连续分配),这将是必须的。

3.文件的逻辑结构与物理结构

文件的物理结构——其实也是目录的

考虑如何在磁盘上存储数据,很明显的事情是我们必须存储在磁盘中的块上。而由于磁盘块大小终究是被规定好的固定有限,因此这必然导致文件依照磁盘块的大小被分为很多个数据块放在不同的磁盘块中。
而如果抽象该问题,我们将会得到熟悉的存储模型。将数据看做数据,磁盘的块看做一个数据空间,则和数据结构中顺序表的实现类似,因此文件在磁盘上的存储方式也有

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值