Linux File System (Abstract)

这个系列的讲座主要是学习陈硕大佬的Linux文件系统系列视频,补充自己在文件系统部分知识的欠缺。

Kenneth Lane Thompson 在文件系统的基础上用了三周分别实现了一个editor、assembler和shell实现了操作系统Unix。可见现代Linux系统中一切皆文件的哲学其实来源于此,并不是说先有操作系统,再为其设计文件系统,而是恰恰相反现有文件系统,在此基础上搭建操作系统,可见文件系统的重要性。

文件的内容由用户决定,而不是为文件预定义类型。
10个最核心的系统调用:

  • open/close/(create): 打开,关闭文件。
  • read/write/lseek:支持读、写、随机读写。
  • fstat/ftruncate:返回文件元数据、截断文件
  • unlink/mkdir/dup…:减少引用计数、创建目录、复制文件操作符
    这些系统调用和文件定义抽象了文件这个概念。

接下来就是文件系统,其实抽象出来就是文件名到文件内容的映射。

Unix文件系统对文件系统有更具体的抽象,其中最核心的概念就是inode。inode是文件名和文件内容的一个桥梁。
重要变量:

  • typedef uint32_t inode_num_t实际上规定了文件系统最多可以有多少个文件,相当于一个主键。
  • Map<string, inode_num_t> dirs 从文件路径到inode的映射
  • Map<inode_num_t, string> files inode到文件内容的映射

块设备, 现在的机械硬盘大部分以4KiB为一个块单位。(只能按照1KiB或4KiB访问)

文件系统的功能实际上是把块设备”变“为一系列操作文件的API。


Linux File System (Abstract)
https://arcanus.red/2024/11/11/Linux-File-System/
作者
Helix
发布于
2024年11月11日
许可协议