文件里面存放的是数据,而数据和数据之间有可能存在某种关系。这种关系是否由文件系统捕捉就决定了文件内容的组织形式。从哲学的高度看,文件内容的组织有两种:关系导向型组织和非关系导向型组织。

1.关系导向型组织

关系型导向型文件的内容的组织形式就是将数据之间的关系记录在文件里面,文件的构造与数据之间的关系存在某种对应关系。例如,记录流存放方式下,数据以一个记录一个记录的方式顺序排列,并不捕捉每个记录之间的关系;在树型存放方式下,数据不只是按记录存放,且捕捉记录之间的关系,但记录之间的关系是一种层次结构,不形成环;在网络存放方式下,记录之间的关系可以形成环。

文章的组织架构 文章内容的组织方式_数据

2.非关系导向型组织

**非关系导向型文件内容的组织形式不考虑数据里面的任何结构。**对于此种方式来说,数据就是一个数据流,没有记录,没有关系。这个数据流既可以是字位流,也可以是字节流,也可以是数据块流。它们之间的不同就是这个“流”的单位不同,如图16-4所示。

文章的组织架构 文章内容的组织方式_文件内容组织_02


那么在这么多种组织方式中,哪一种最好呢?或者说哪一种是最受欢迎的呢?

那我们就来分析一下。在记录方式下,一个记录就是数据的最小构成单位。
比如,对于一个存放学生信息的文件来说,一个记录可能包括姓名、学号、班级、专业等信息。对文件的访问按记录为单位进行,也就说每次读取要读取一个或多个记录,不能在记录中间开始读写操作。因此,以这种方式构建的文件系统就必须维护或者知道很多信息,例如,一个数据记录有多大?数据记录里面的关键值处于什么位置?只有掌握了这些信息,文件系统才知道读写n个记录时到底是读写多少个字节,才能根据给定的关键值正确读写相关的数据记录。

在树型或网络型存放方式下,文件系统要知道的信息就更多了,除了记录本身的信息外,还需要知道记录之间的关系,从而造成文件系统更加复杂。

**相对关系导向型组织方式,非关系导向型方式就简单多了。**在这类模式下,文件系统无须知道关于数据的任何细节。对于这种方式来说,数据就是0101这种数据流。至于这个0101代表的是什么东西,文件不必知道,也不想知道。在这种方式下,文件系统将大大简化。

那么复杂的文件系统和简单的文件系统,我们需要哪一种呢?

简单为美:一切都应该尽可能简单,但没有更简单。——爱因斯坦

在关系导向型组织方式下,文件系统需要知道数据的很多细节,这将使得文件系统复杂。这种复杂性带来了两个巨大的负面效应:一是文件系统本身的设计将更为费时、费力;二是一个文件不能在另一个文件系统下被访问,因为另一个文件系统的记录格式可能不同。这样势必造成文件可靠性和兼容性存在问题。

更关键的是,这些细节不是文件系统的责任范围,而是应用软件或用户的职责范围。因为这些细节直接涉及文件里面数据的语义。前面说过,文件系统的目的是让磁盘更加容易使用,而不是为用户管理数据的语义,即这种管理语义的能力超出了文件系统设计的初衷。况且,由文件系统掌握语义也不安全。在这种情况下,用户的数据无法得到保障,因为任何人可以打开任何文件。

因此,从可靠性、安全性和兼容性来说,关系导向型组织方式都不合适。

**对于非关系导向型文件内容组织来说,由于操作系统辨认的是数据块、字节或字位,数据的语义并没有包含在组织方式里,任何操作系统都可以读写所有的文件。**因为所有操作系统都知道一个字节或字位是多少。用户要读多少个字节,操作系统就读多少个字节。这就解决了兼容性的问题。至于读出的一串010101010到底是什么意思,操作系统就不用管了,也不应该管。因为对数据进行翻译是应用程序的事情。这样,应用程序可以根据需要定义和翻译数据的意义,还可以进行编码和加密,安全性也大为提高。而且,操作系统不管语义,其所要维护的信息就很少,设计起来简单,可靠性自然也就更高。

到这里,读者应该可以看出来哪一种方式最受欢迎了吧。没错,就是字节流方式。因为它简单,而追求简单正是操作系统设计的努力方向。现代的商业操作系统基本上都使用字节流方式来组织文件内容。历史上曾经出现过关系导向型文件系统,例如,VMS的文件系统就是以记录流方式存放的。

也许有读者会问,既然越简单越好,那为什么不采用字位流呢?字位不是比字节更简单吗?是的,字位听上去比字节更简单,但这是从逻辑上看。从计算机物理现实看,情况就不是这样了。因为通用计算机的寻址最小单位是字节(有的支持半字节寻址,所谓的nibble addressing,有些嵌入式操作系统则支持字位寻址,但本书仅讨论通用计算机),而不是字位。对于计算机来说,读取一个字位比读取一个字节困难得多。因此,从计算机的角度来看,字节是最为简单的了。

爱因斯坦说的话里面的后半句是“但没有更简单”,对于字位来说,它就是比简单还简单,这样反而不行。

总体来说,字节流的文件系统的好处是更加方便、操作系统的代码更加可靠、更加的灵活、用户程序编写也更加方便

例如,用户程序可以对数据进行编码。如果用户不想让别人读懂文件内容,就可以对文件进行加密,而加密和编码丝毫不会影响操作系统对文件的读写。这些优势皆是关系导向型组织方式所缺乏的。

总结

  • 现代的商业操作系统基本上都使用字节流方式来组织文件内容
    ps
  • 什么是字节流?