在看完教材(汤小丹老师主编,第3版)之后,发现就无法把这个文件的读取的过程给联系起来。在加上做题的时候,发现自己还是会有很多概念弄混,所以写该博客记录自己的问题和解答过程。
例如,我当时就有这些问题:
①:我们是如何根据文件名找到FCB的?这个FCB是开机之后就会被加载到内存中的吗?
②:如果FCB中有这个文件具体分配在哪些磁盘上面,但是采用FAT的文件系统,这些文件数据部分在哪些磁盘上不是都是FAT记录了吗?那么FAT文件系统中,还有没有FCB这个数据结构呢?
③:教材上提到了什么顺序文件,链式文件,索引文件。但是实际应用的时候好像也没有和这些文件扯上关系。那么我们为什么要提出这些概念呢?
看别人的文章产生的问题
大家可以先看看这个文章,因为他写的会更加清楚一点,然后再结合大家自己的理解,以及我下面的理解,可能就会比较清楚了。文章链接:https://zhuanlan.zhihu.com/p/183238194
我自己看了这个文章之后结合自己之前的理解,就会有些问题,因为没有找到本人回复。所以下面的回答都是我自己后来的理解,可能会有些不对。
问题1
目录项如果不存放于磁盘,那么我们在开机的时候,这个目录项是自动加载到了内存中吗?因为我最开始的理解就是目录项应该是会在磁盘中有一份,系统启动之后就会加载到内存中。
答:目录项最开始就是在磁盘上的。我们就是在查找这个文件的时候,就会将这个目录项从磁盘上调到内存中,同时在内存中还得有一个这样的数据结构,以便进程的使用。你肯定又会问,怎么就通过一个文件名找到了这个文件对应的目录项呢?在最后我解释这个整个流程的时候我会说的。
问题2
我想问问上面说的目录项是FCB吗?因为我在书本上看到的引入了一个FCB的概念,和这里的目录项的概念很像。
答:可以这样理解。因为Linux中将目录项的数据简化了。现在一个目录项仅仅只有文件名和指向该文件 i节点的指针。
问题3
这里说的文件头需要包含指向【索引数据块】的指针是什么意思?
答:我觉得他在这里把这个讲复杂了。我们需要知道的就是,这种索引方式就是LINUX中现在在使用的方式。所谓索引,就是用一个指针指向该文件所占用的文件盘块。但是文件可能占用的盘块还不止一个,所以还需要多个这样的指针,也是就多个这样的索引。而LIUNX就是将这些索引都存放在了一起,也就是文件的I节点中。
因为我还看我们了我们教材(汤小丹老师主编,第3版)其中描述了一种索引文件。我当时在看到时候,就把这个索引文件和LINUX的增量式索引给弄混了。具体的哪种混乱就描述不出来,反正就是我搞不清楚这里提出一个索引文件到底是干嘛的。
最后,我的理解就是:教材上介绍的这个索引文件就是后面LINUX增量式索引的前生。只不过当时介绍这个索引文件的时候,没有讲FCB,没有讲 i节点,所以没有提他们之间的关系。
通过文件路径找到该文件
以Linux为例,我们根据一个文件绝对路径找到这个文件,并加载到磁盘上的过程是:(下面都是我自己的理解的,可能不对。)
首先根据文件名把磁盘上该文件的目录项加载到内存中来。因为目录项中包含了该文件的一下存取信息。最基本的就是文件的数据放在哪些磁盘块上,所以首先的任务就是加载其到内存中来。至于如何加载,我们看看这幅图:
这个是教材上图。例如我们给出的就是/usr/ast/mbox的这个绝对路径。
①:因为是绝对路径,所以首先将根目录文件加载到内存中来,将数据填充到目录项这个数据结构中去(因为我们进程要操作这个数据,自然是要形成对应的数据结构才方便操作)。然后检索是否有usr这个文件名。然后发现有,并且其对应的i节点为6。那么就去找到第6号i节点(因为在Linux中i节点都是存放在一块地方的,所以可以找得到。)找到6号i节点之后,发现这个上面记录的时该文件的数据部分在132号盘块。
②:所以,我们又接着把132号盘块的数据调入内存。同样的道理,这个肯定也会形成一个目录项的数据结构,然后把132号盘块数据填充进去。然后找到是否有ast这个文件名,发现有。并且对应的i节点编号为26。然后调入26号i节点,发现这个文件的数据在496号盘块。
③:然后调入496号盘块,发现mbox文件的i节点为60号。所以现在调入60号i节点,进入内存。因为这个i节点里面就有很多关于这个文件的信息。填充目录项的数据结构。
之后我们就可以任意操作这个文件了。因为i节点里面记录该文件的所有信息。
更新:2020年12月23日
我之前都有一个误区,我一直以为只有Linux文件系统中,采用增量式索引方式的,才会用到FCB之类的。但是,今天在做到的一个题目的时候,发现并不是这样子的。就算是连续分配或者是链接分配也需要有FCB的。因为就像上面说的,文件的很多信息都是存储在FCB里面的。只是说对于Linux中增量式索引方式中,FCB改为只有文件名和指向 i 节点指针了。但是对于其他方式的来说,FCB还是直接就蕴含了很多文件相关的信息。
从答案的第二问的解答中可以看出来,这个FCB存在与连续分配和链接分配之中。
习题练习
在理解了上面的一些概念的区别之后,做下面题目应该就好做了
题目1
题目2
D选项的原话在汤小丹这本教材(第4版)上面,P242,7.2节中显示的就是:“从用户的观点来看,文件的逻辑记录就是能够被存取的基本单位。”
题目3
题目4
题目5
这里的索引文件就是“Linux采用的增量式索引”方式的一种概念模型。大概意思就是:“用一张表去记录文件的逻辑地址。”这个表就被称作索引表。表项是:“索引号,长度,指针。”这个概念在教材(同上所指)P246中有提到。