3

对文件系统进行原型设计的一些最佳实践是什么?

我在 Python 中尝试过使用fusepy,现在我很好奇:

  • 从长远来看,任何受人尊敬的文件系统实现都应该用 C 语言实现吗?不使用 C 语言会妨碍可移植性,还是最终会导致性能问题?
  • 是否有其他实现,例如 FUSE?
  • 显然核心文件系统技术发展缓慢(fat32、ext3、ntfs,其他一切都是小鱼),采用了哪些调试技术?
  • 在主要操作系统中实现高度优化、完全支持的文件系统开发的一般课程是什么?
4

4 回答 4

4

存在于用户空间中的文件系统(在 FUSE 或其 Mac 版本中)确实是一个非常方便的东西,但不会具有与存在于内核空间中的传统文件系统相同的性能(因此必须在 C 中)。你可以说这就是为什么微内核系统(文件系统和其他东西存在于用户空间中)从来没有像 A. Tanenbaum 在 Minix 邮件列表上的一篇著名帖子中攻击 Linux 时所说的那样,真正“将单片内核留在尘土中” 20 年前(作为一名 CS 教授,他说他会因为 Linus 为他的操作系统选择单体架构而失败——Linus 当然反应热烈,整个交流现在非常有名,可以在网络上的许多地方找到;-)。

可移植性并不是真正的问题,除非您的目标是内存非常有限的“嵌入式”设备——除了此类设备,您可以在可以运行 C 的地方运行 Python(如果有的话,那就是 FUSE 的可用性将限制你,而不是 Python 运行时)。但性能绝对可以。

于 2010-07-27T05:52:40.543 回答
2

从长远来看,任何受人尊敬的文件系统实现都应该用 C 语言实现吗?不使用 C 语言会妨碍可移植性,还是最终会导致性能问题?

不一定,有很多与 C 不同的执行语言(首先想到的是 O'Caml、C++。)事实上,我希望 NTFS 可以用 C++ 编写。问题是您似乎来自 Linux 背景,并且由于 Linux 内核是用 C 编写的,因此任何希望合并到内核中的文件系统也必须用 C 编写。

是否有其他实现,例如 FUSE?

有几个适用于 Windows,例如,http://code.google.com/p/winflux/http://dokan-dev.net/en/在各种成熟度级别

显然核心文件系统技术发展缓慢(fat32、ext3、ntfs,其他一切都是小鱼),采用了哪些调试技术?

同样,这在 Windows 中大部分是正确的,在 Solaris 中您有ZFS,并且在 Linux 中存在ext4btrfs 。调试技术通常涉及在各种操作过程中关闭机器,查看数据处于何种状态,存储大量数据并查看性能。

在主要操作系统中实现高度优化、完全支持的文件系统开发的一般课程是什么?

同样,这取决于哪个操作系统,但它确实涉及大量测试,尤其是确保故障不会丢失数据。

于 2010-07-27T05:51:00.967 回答
1

我建议您为内核块设备 API 层创建一个模拟对象。模拟层应该使用mmap'd 文件作为文件系统的后备存储。这样做有很多好处:

  1. 运行单元测试用例的极快的 FS 性能。
  2. 能够将调试代码/断点插入模拟层以检查故障情况。
  3. 轻松保存文件系统状态的多个副本以供研究或运行测试用例。
  4. 能够确定性地引入文件系统必须处理的块设备错误或其他系统事件。
于 2010-08-03T21:50:42.027 回答
0

受人尊敬的文件系统将快速高效。对于 Linux,这基本上意味着用 C 语言编写,因为如果您没有与内核一起分发,您将不​​会被认真对待。

至于 Fuse 等其他工具,还有MacFUSE,它允许您在 mac 和 linux 上使用相同的代码。

于 2010-08-03T21:56:10.893 回答