- Linux文件系统的三层抽象是什么?
- 第一层抽象——从磁盘到分区
分区可以看作磁盘,2个512G的磁盘与1T磁盘的两个分区在逻辑上等价。 - 第二层抽象——从磁盘到块序列
块数组与字节数组 - 第三层抽象——块数组到三个区域的划分
超级块:含文件系统信息。比如,超级块记录了每个区域的大小,超级块也存放未被使用的磁盘块的信息。
i-node:超级块的下一个部分。包含文件或目录的属性信息,每个文件都有一个i-node,i-node又固定的大小,构成一个i-node表。
- 写出Cat userlist的过程,要详述目录文件,i-node.数据块,要画图示意
linux中,文件查找不是通过文件名称来查找的。实际上是通过i节点来实现文件的查找定位的。我们可以形象的将i节点看做是一个指针fip。当文件存储到磁盘上去的时候,文件肯定会存放到一个磁盘位置上,可以这样想象,既然文件数据是存放在磁盘上的,如果我们知道这个文件数据的地址,当我们想要读写文件的时候,我们是不是直接使用这个地址去找到文件就可以了呢?是的,linux下,i节点其实就是可以这么认为,把i节点看作是一个指向磁盘上该文件存储区的地址。只不过这个地址我们一般是没办法直接使用的,而是通过文件名来间接使用的。事实上,i节点不仅包含了文件数据存储区的地址,还包含了很多信息,比如数据大小,等等文件信息。但是i节点是不保存文件名的。文件名是保存在一个目录项中。每一个目录项中都包含了文件名和i节点。
Cat userlist的过程
- 打开,从目录找到userlist
- 从dentry结构体读出innod
- 从inode结构体读出i_block[]
- 按顺序组织i_block[]中的内容,输出到终端
示意图: