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> filesinode到文件内容的映射
块设备, 现在的机械硬盘大部分以4KiB为一个块单位。(只能按照1KiB或4KiB访问)
文件系统的功能实际上是把块设备”变“为一系列操作文件的API。
Linux File System (Abstract)
https://arcanus.red/2024/11/11/Linux-File-System/