ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

简单文件系统模型:Coursebook从零设计文件系统

简单文件系统模型:Coursebook从零设计文件系统 简单文件系统模型Coursebook从零设计文件系统【免费下载链接】coursebookOpen Source Introductory Systems Programming Textbook for the University of Illinois项目地址: https://gitcode.com/GitHub_Trending/co/coursebookCoursebook 是伊利诺伊大学开源的系统编程教科书它的文件系统章节用一个简单文件系统模型带你从零设计文件系统超级块、inode、磁盘块如何协作文件又是怎么被写进磁盘块的。不需要任何存储系统背景跟随这条主线你就能亲手设计出一个可用的文件系统骨架 文件系统三大核心结构超级块、inode、磁盘块在动手设计之前先认识三个关键词它们是理解一切文件系统的基石内容见 filesystems/filesystems.tex结构角色一句话理解超级块superblock元数据的元数据记录整个文件系统家底有多少 inode、哪些块被占用inode文件本身存文件名以外的所有信息大小、权限、时间戳、指向数据块的指针磁盘块data block数据仓库连续的一小段磁盘空间真正装文件内容一个反直觉但最重要的观念inode 才是文件文件名只是目录里的一条索引记录。理解了这一点文件系统的所有机制都会变得顺理成章。从零搭建简单文件系统模型磁盘如何分区Coursebook 借鉴了 Linux 最初使用的 minixfs把一个磁盘从头到尾切成五段顺序排列、各就各位| 超级块 | inode 位图 | 数据块位图 | inode 数组 | 数据块区域文件的真正家 |设计思路非常朴素超级块放在磁盘最开头——因为开机时系统对盘上一无所知必须有一个约定俗成的已知位置能先读到否则电脑可能直接无法启动inode 位图 / 数据块位图——第 n 位为 1 表示第 n 个 inode或数据块已被占用0 号 inode 约定为根目录inode 数组——固定大小的区域存放所有 inode这也是文件数量的天然上限剩下的空间全是数据块——硬件视角下每块可能一模一样把它们想象成块编号数组只是为了描述文件住在哪里。 这种顺序切分的设计牺牲了一些空间效率换来的是简单、可预测、易于教学——对学习者来说这正是最好的入门模型。一张图看懂inode 如何把文件写进数据块下面这张图来自教科书原章filesystems/images/sample_file.png是理解简单文件系统模型的关键图中左侧的 inode 有三类指针Direct #0 → 块 7、Direct #1 → 块 3直接块一步到位指向数据块Indirect → 块 2间接块块 2 里不存文件内容而是一张指针表5 和 4再由它指向真正的数据块。这正是计算机科学名言的实战版——所有问题都可以用再一层间接解决一个 4KiB 的间接块能装下 1024 个 4 字节指针于是理论上可引用 4MiB 的数据再加一层双重间接就能到 4GiB以此类推。代价是多几次磁盘读实践中文件系统会把间接块缓存住把成本摊给 1024 个数据块。一次完整读取简单文件系统的读路径假设要读完上面那个文件流程像顺藤摸瓜查 inode取第一个直接块编号7从数据块区开头数到第 7 块读出 4KiB同理读第 2 个直接块3读间接块2其中每 4 字节是一个块号或哨兵值 -1依次取到5整块读满和4只读到文件末尾就停。文件的块是紧凑排布的——总是把当前块写满才申请下一块这让寻址逻辑非常干净。写入与删除一次 6KiB 偏移写入的完整路径写入向文件偏移 6KiB 处写一个字节。文件系统先算落点6KiB ÷ 4KiB 1 余 2KiB即文件的第 2 个块、块内偏移 2KiB 处。查 inode 发现第 2 个直接块是块 3于是定位到数据块 3 的 2KiB 处下笔——前 4KiB 所在的块 7 完全不用动 ✍️删除先标记父目录中的目录项失效再让 inode 的硬链接计数减一当计数归零才释放 inode 与所有关联数据块归还给文件系统。如果 inode 是目录还会先检查它是否为空。新手最容易踩的坑文件大小 ≠ 磁盘占用这是简单文件系统模型最有教学价值的部分写1 字节的文件也要占满 1 个数据块 4KiB上面示例文件直接块 8KiB 间接引用的 8KiB用户数据上限 16KiB、下限 12KiB1B此外间接块本身还白占4KiB 开销该结构的最大文件 2 个直接块 1024 个间接块 4MiB 8KiB磁盘总占用再加 4KiB 间接块。想增大单文件上限多给几个直接块吧——但 inode 会变大、留给用户数据的空间变少这就是文件系统设计中处处存在的权衡 下一步在 Coursebook 里继续深入本模型只是起点原章还覆盖了权限位与 chmod、硬链接与软链接、虚拟文件系统/proc、/sys、/dev、mmap 以及 RAID 冗余磁盘阵列。建议顺着这些资料学习章节源码filesystems/filesystems.tex核心示意图filesystems/images/sample_file.png参考文献库filesystems/filesystems.bib项目说明README.md如果想通读全书可克隆仓库本地阅读git clone https://gitcode.com/GitHub_Trending/co/coursebook【免费下载链接】coursebookOpen Source Introductory Systems Programming Textbook for the University of Illinois项目地址: https://gitcode.com/GitHub_Trending/co/coursebook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表