在一次面试中,我遇到了这个问题。他问我“设计一个 Linux 文件系统”。他要求我提供我需要的所有东西,包括数据结构等等。有人能帮我解决这类问题吗?只要给我一些我可以阅读和参考的必要链接就行。我已经在维基百科上读过了,但我仍然不清楚如何完美地解决这个问题。他可能在期待什么?我想要 Linux 文件系统使用的基本细节。如果我想设计一个文件系统,我该如何考虑它。
提前致谢。
答案1
它是巨大的主题,听起来你从最底层开始。你需要了解什么是文件系统是然后你才可以设计一个。
对于内核来说,文件或目录只是一个索引节点绑定到超级块。 这索引节点存储数据位置信息以及所有权、权限等属性。这限定了数据的范围。与此并行的是树结构牙齿. 这些将文件名(硬链接)和位置提供给索引节点。链接和节点共同为您提供了从路径转换为零与一的文件系统。
这只是粗略的浏览,但这些是您必须设计的元素。您可以从实际示例中看到(Linux 内核源代码是众所周知的免费),但也有一些相当不错的文档:
- Andries Brouwer:Linux 虚拟文件系统. 全面而彻底。
- Linux 文件系统剖析。虽然不太详尽,但相关链接不错。
- TLDP:虚拟文件系统非常高级,但解释了这些元素实际上是什么做。
但实际上,如果你需要编写一个文件系统,你可能会转向类似fuse-python
并在一个下午内写完一个。性能不如适当的文件系统,但对于许多任务来说写入速度很快。