【问题标题】:How to implement a very simple filesystem?如何实现一个非常简单的文件系统?
【发布时间】:2011-06-10 11:41:33
【问题描述】:

我想知道操作系统是如何读取/写入硬盘的。
我想作为一个练习来实现一个没有可以读写文件的目录的简单文件系统。
我从哪里开始?
C/C++ 能做到这一点,还是我必须采用更底层的方法?
一个人处理太多了吗?

【问题讨论】:

标签: filesystems operating-system


【解决方案1】:

看看FUSE:http://fuse.sourceforge.net/

这将允许您编写文件系统而无需实际编写设备驱动程序。从那里开始,我将从一个文件开始。基本上创建一个(例如)长度为 100MB 的文件,然后编写您的例程来读取和写入该文件。

一旦您对结果感到满意,您就可以考虑编写设备驱动程序,并让您的驱动程序在物理磁盘上运行。

好处是您几乎可以将任何语言与 FUSE 结合使用,而不仅仅是 C/C++。

【讨论】:

  • 我同意 FUSE 是一个很好的入门界面,因为它抽象了很多底层细节。但也许 OP 也对这些低级的东西感兴趣?
  • @The MYYN:是的,我是。但我必须从某个地方开始。
【解决方案2】:

为了学习文件系统的概念,我认为实际上没有必要使用磁盘。只需创建一个 512 字节字节数组的数组。试想一下,这是您的硬盘,开始进行一些实验。 你也可以看看一些标准的操作系统教科书,比如http://codex.cs.yale.edu/avi/os-book/OS8/os8c/index.html

【讨论】:

    【解决方案3】:

    我发现在 avr 微控制器上使用 fat 文件系统时很容易理解一个简单的文件系统。

    http://elm-chan.org/fsw/ff/00index_e.html

    查看代码,您将了解 fat 的工作原理。

    【讨论】:

    • 在我看来,FAT有点复杂
    • @MarkYisri,哪个更容易?
    • @Pacerier 你可以用一对structs 制作一个简单的文件系统。它的功能非常有限,但在嵌入式系统中就足够了。
    【解决方案4】:

    您的第一个问题的答案是,除了其他人告诉您的 Fuse 之外,您还可以使用对 Windows 执行相同操作的 Dokan,并且从那里只是对物理分区进行读取和写入的问题(@ 987654321@(请特别阅读有关物理磁盘和卷的部分))。

    当然,在 Linux 或 Unix 中,除了使用 Fuse 之类的东西,您只需发出对 /dev/xxx 中所需设备的读取或写入调用(如果您是 root 用户),在这些方面,Unices 更多根据您的观点,友好或更不安全。

    从那里尝试实现一个像 Fat 这样的简单文件系统,或者像 tar 文件系统这样更开放的文件系统,甚至是一些基于 Unix 概念的简单文件系统,如 UFS 或 Minux,或者只是一些只记录所进行的调用及其调用的东西日志文件的参数(这将帮助您理解在您的计算机正常使用期间对文件系统驱动程序进行的调用)。

    现在您的第二个问题(回答起来要简单得多),是的,C/C++ 可以解决问题,因为它们是系统开发的通用语言,您的许多示例代码也将使用 C/C++,所以你至少会在你的开发中阅读 C/C++。

    现在对于您的第三个问题,是的,这是由一个人完成的,例如 ext 文件系统(在 Linux 世界中因其后继者 ext2 或 ext3 而广为人知)是由单个开发人员 Theodore Ts'o 制作的,所以不要不要以为这些事情不是一个人就能做到的。

    现在是最后的注释,请记住,真正的文件系统与常规内核中的许多其他子系统交互,例如,如果您有一台笔记本电脑并将其休眠,则文件系统必须刷新对打开文件所做的所有更改,如果你在分区上有一个页面文件,或者即使页面文件有它自己的文件系统,这也会影响你的文件系统,尤其是块大小,因为它们往往等于​​或页面块大小的幂,因为很容易放置一个内存上文件系统的块巧合等于页面大小(因为这只是一次传输)。

    还有,安全性,因为你会想要控制用户以及他们读/写的文件,这通常意味着在打开文件之前,你必须知道登录的用户是什么,他有什么权限那个文件。显然,没有文件系统,用户就无法运行任何程序或与机器交互。由于存在网络和分布式文件系统,现代文件系统层也与网络子系统交互。

    因此,如果您想学习内核文件系统,这些是您必须担心的一些事情(除了了解 VFS 接口)

    P.S.:如果你想让 Unix 权限在 Windows 上工作,你可以在 Windows 的服务器版本上使用类似于 MS 用于 NFS 的东西 (http://support.microsoft.com/kb/262965)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多