这可能听起来很无聊,尤其是当我(正如您可能已经猜到的)尝试编写操作系统时。目前,我一直在尝试制作文件系统。
我想要的是一个与 Linux Ubuntu 类似的文件系统,它是 EXT4(至少我的是)。我想尝试也可以用 C 语言编写它。
有什么想法可以解决这个问题吗?和/或您可能发现的任何可能对我有帮助的教程(我尝试过没有运气的搜索):L
提前致谢!
杰米。
对这个问题进行了广泛研究的真正聪明和经验丰富的人制造了吞噬用户数据的错误。计算层中的错误(例如内核崩溃)和存储层中的错误之间的区别在于,默默地吃掉用户的数据是非常糟糕的——比在电子表格中给出错误答案(excel 有错误但很流行)或间歇性地给出错误答案要糟糕得多sigfaulting,同时在磁盘上保存数据(这很容易通过频繁的自动保存来缓解)。
从研究更简单的设计开始,例如旧操作系统书籍 [1] 中的 minix 文件系统(与 Linus Torvalds 二十年前开始使用的相同)。
正如其他人所说,没有日志、扩展或 ACL 的 ext2 是比 ext4 更好的起点。它的源代码在 Linux 内核和 e2fsprogs 用户空间工具包中[2]。格式有据可查。
至于教程,请考虑谁制作它们以及他们为什么要在此任务上花费精力。教程通常由平台中的利益相关者制作,以吸引新人使用该平台进行开发,利用网络效应来发展平台并从更大生态系统中已经建立的参与者中获利。
您是否看到越来越多的人实现自己的不兼容的 buggy[3] 文件系统的商业模式?仅当您出售软件工程学位时。所以微软只写关于如何使用NTFS 的教程,而不是关于如何实现它。Sun 和 ZFS、Red Hat 和 Google 使用 EXT2/3/4、SGI 使用 XFS、IBM 使用 JFS、Oracle 使用 BTRFS 等也是如此。
如果您想要教育而不是培训,您需要阅读书籍并研究他们在生产中使用的聪明人的代码,而不是寻找教程。
尝试查看现有的实现,例如Linux中的实现。