一种文件目录结构的设想
Fishcat 原创
1.现存文件系统的一点不足
我们知道,操作系统诞生以来,文件系统经历了好多类型,其中使用最为广泛的就是Dos的FAT和Windows的FAT32以及WindowNT的NTFS,这些文件系统一个共同的特点,就是文件完全的层次性,即访问某一文件时,需要从根目录开始一层一层的进入,从用户的角度来说这是很不方便的。如果一个用户建立的个file1.txt放在c:\windows\profiles\all users\下,那他就得打开这么多层的目录才能访问到他的文件。从现代操作系统所要求的易于操作这一点来说就没有合乎要求。其实,操作系统的设计者没有理由强求用户记住他存放某个文件的路径,大部分的工作应该让计算机来完成。特别是对名称唯一的文件,系统应该做到只要用户给出了文件名就能马上给用户提交这个文件。这个现实的需要对现存的文件目录结构来说要完成是有难度的,实现是可以的,就像查找文件那样。不过那样的话,大家都知道,是很花时间的,基本上不能满足用户的需要。于是我们就需要重新设计一个既合乎需要又能继承以往文件系统优点的新的的文件系统结构。
2.基于文件ID的目录区(文件分配表区)
要做到对用户的文件与路径的透明性,就必须在目录区表达出来。基于文件ID的目录区的基本思想是对文件名等重要信息进行hash运算。做个最简单的例子来说,在目录区里我们保存的仅仅是文件名的hash值(即文件ID)和文件起始簇信息两个域。通过一个尽量避免冲突的hash运算来生成文件名对应的ID,至于其它的信息我们都可以保存在文件的内容里边.文件内容也做个改变,在内容的头上加上文件的控制信息(如文件名,目录的ID,日期,大小等)和自定义的信息(可以像XML一样,用户自由扩展),在用户界面上显示文件时这些时不显示出来的,而是作为控制信息显示在资源管理器中的。现在我们再来考虑前面提到的获取file1.txt的问题,分几步完成:一.文件系统管理程序通过hash运算,把file1.txt转换成一个数字n;二.在文件分配表里查找这个数字,由于我们每个目录记录只有俩个域的值,所以这个目录区很小,查找很快;由于hash结果不可能避免冲突,所以查找的结果可能不唯一.三.读出查找结果文件的内容,得到文件的真实名称,得到file1.txt;如果有多于一个结果,那就是其他的目录中存在同名文件,询问用户确切的需要;四.提交给用户,完成操作.
从以上可以看出,基于文件ID的目录区技术很好解决的文件系统目录层次复杂的问题,很大程度上方便了用户的操作,提高了用户的工作效率.同时也带来了额外的好处:
一.提高了查找速度.有两个原因,一是文件目录区大大减小,减小了读磁盘的负担;二是不用进行费时的文件名字符串的匹配,而是进行简单的数字比较.
二:通过把文件的控制信息放在文件内容里边,并用XML格式进行存贮,系统和用户可以有完全的灵活性修改文件的控制信息,对文件进行个性化的描述.
三.文件名长度,文件大小等再也不受限制.因为我们是把文件的控制信息放在文件内容里,所以文件名可以任意长,也不会浪费磁盘空间.文件大小也可以不受限制.
四.适合检索.文件控制信息以XML格式存贮,应用程序或用户或就可以在里面加入文件的关键字等信息,跟XML的对搜索的考虑是有相同好处的.
这些只是一个大概的轮廓,在具体实现是可能会有一些另外的问题,那就留给其他人讨论了.
2002-8-26