the*_*row 28 filesystems operating-system
我想知道操作系统是如何读取/写入硬盘驱动器的.
我想练习一个简单的文件系统,没有可以读写文件的目录.
我从哪里开始?
C/C++会不会采用更低级别的方法?
一个人处理太多了吗?
Tim*_*dge 18
看看FUSE:http://fuse.sourceforge.net/
这将允许您编写文件系统而无需实际编写设备驱动程序.从那里开始,我将从一个文件开始.基本上创建一个(例如)100MB长度的文件,然后编写您的例程以从该文件读取和写入.
一旦您对结果感到满意,那么您可以考虑编写设备驱动程序,并使驱动程序在物理磁盘上运行.
好的是你几乎可以使用FUSE的任何语言,而不仅仅是C/C++.
为了学习文件系统的想法,我认为没有必要使用磁盘.只需创建一个512字节字节数组的数组.想象一下,这是你的Harddisk开始尝试一下.此外,您可能希望了解一些标准的操作系统教科书,如http://codex.cs.yale.edu/avi/os-book/OS8/os8c/index.html
我发现在avr微控制器上使用fat文件系统时,很容易理解一个简单的文件系统.
http://elm-chan.org/fsw/ff/00index_e.html
看看代码,你会弄清楚脂肪是如何工作的.
你的第一个问题的答案是,除了像其他人告诉你的那样 Fuse 之外,你还可以使用 Dokan,它对 Windows 执行相同的操作,并且从那里开始只需要对物理分区进行读取和写入的问题(http:// msdn.microsoft.com/en-us/library/aa363858%28v=vs.85%29.aspx(特别阅读有关物理磁盘和卷的部分)。
当然,在 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 接口之外)
PS:如果你想让 Unix 权限在 Windows 上工作,你可以使用类似于 MS 在 Windows 服务器版本上使用 NFS 的东西 ( http://support.microsoft.com/kb/262965 )