大鹏(以下简称“大”):先来说一下“文件(File)”。“文件”是一系列数据的组织形式,比如一段文字、一张图片、一段声音、一个程序等等。而“文件系统(FS,File System)”就是规定文件如何存储到外存储器上,以及规定文件的格式,能够被操作系统识别和存取。
“文件系统”在不同的外存储器上,可能会随着外存储器的物理结构不同而不同,这里我们以硬盘为例介绍。另外,使用的操作系统不同,能够识别的文件系统也不同,这里我们以美国微软(Microsoft)公司开发的MS-DOS和Windows操作系统使用的FAT文件系统为例介绍。
前面我们在BIOS设置中提到过硬盘参数,当时没有详细说明,这里我们来解释一下。
计算机基础部分我们介绍过,硬盘内部有数个盘体组成,每个盘中间都是空心的,像唱片一样都插在一个转轴上(意味着圆盘的圆心都在一条直线上);每个盘的两面都涂有磁性粉末,这每一颗磁性粉末就代表一个bit(二进制数一位)。在硬盘制造完成时,生产厂家会将硬盘进行“低级格式化(Low-Level Format)”(简称“低格”)操作,这个操作把硬盘划分成“磁道(Track)”和“扇区(Sector)”。每个盘的每个面被划分成很多个同心圆,称为“磁道”;每个盘上相同半径的磁道都在一个圆柱面内,这个圆柱面称为“柱面(Cylinder)”,在BIOS设置里一般简称为“CYLS”,这个需要一点立体想象的空间;可以看出,每个盘的磁道数和柱面数是相同的。每个盘的每个面都有许多从圆心发出的放射线,将磁道之间分割成很多扇形区域,这些区域称为“扇区”;每个扇区有固定的大小,一般为512个字节B。硬盘内有很多个磁头来读取和写入数据,磁头的数量称为“磁头数(Head)”,每个磁头就代表盘体的一个面。这样硬盘的容量(Size)就可以表示为:磁头数×柱面数(磁道数)×扇区数×每个扇区的大小。这就是格式化对硬盘规定的格式。
这样划分之后,将每个磁头、磁道(柱面)和扇区进行编号(从0开始),就可以根据磁头号、磁道(柱面)号和扇区号找到数据。这些编号存放在硬盘的特定区域,供操作系统调用。
小鹏(以下简称“小”):为什么要这样规定呢?把数据按顺序存储不就行了。
大:按顺序存储的话,那就要对磁盘上的磁性粉末的数量进行编号,而磁性粉末的数量要远大于扇区的数量,粉末编号数值的上限也要远大于扇区编号数值的上限,那么大编号的数据占用的存储空间也会很大,特别是如果存储了大量的小文件,那么光编号就要占据相当多的存储空间。所以要规定扇区,这样编号占用的存储空间就大大缩小了,512字节是目前各硬盘生产厂商经过多次试验后约定俗成的一个平均值,以后也有可能会变化。当然后果是,你的文件至少也要占据一个扇区的大小,哪怕文件只有一个字节,两个文件也不能使用同一个扇区。在安装操作系统时,先要将硬盘分割成一个或多个区域,这些区域称为“分区(Partition)”或“卷(Volume)”(分割操作称为“分区”操作,“分区”这个词可作名词也可作动词),每个分区包含一定数量的扇区,每个分区也有编号。然后将分区进行“高级格式化(High-Level Format)”(这也是我们通常所说的“格式化(Format)”,以后讲到“格式化”均指高级格式化),将每个分区划分成为一个一个“簇(Cluster)”(也叫“分配单元(Allocation Unit)”),每个簇也有簇号,每个分区的簇号都从0开始,簇包含一个或几个(整数倍)扇区。这样就完成了文件系统的建立,可以向硬盘中进行安装操作系统等各种存取数据的操作了。
小:为什么扇区不用,又要用簇了?
大:这个涉及到硬盘空间利用效率的问题。先说下前面的扇区,比如扇区的编号最大到10000,10000对应的二进制数10011100010000,编号最大会占用14bit,按字节B算就约等于2B。那么如果按磁性粉末的数量编号,由于粉末只占1bit,一个扇区是512字节B,那么粉末的编号最大可以到10000*8*512=40960000,编号最大会占用26bit,按字节B算就约等于7B。可见如果按顺序存储,就是按bit存储,编号超过10000的话,编号占用的存储空间会迅速增加。所以要规定扇区,但是一个文件至少也要占据一个扇区的大小,哪怕文件只有一个字节,两个文件也不能使用同一个扇区。
如果分区内存储的大多数文件都是占用存储空间比较大的文件,一个文件就要几十MB或更大,那么扇区又显得比较小了,于是又使用了簇。一个文件至少也要占据一个簇的大小,哪怕文件只有一个字节,两个文件也不能使用同一个簇。簇的大小比较灵活,可以只包括一个扇区,也可以包括几个扇区。在格式化分区的时候可以设定簇的大小,大文件多的话,簇就设置的大些,反之就设置的小些。
小:那能不能只用高级格式化就行,不用低级格式化?
大:当然是不行咯,高级格式化是建立在低级格式化的基础上,没有扇区,也就没有簇,也就无法使用。
另外前面说过,低级格式化一般在硬盘制造完成时由生产厂家进行操作,用户一般再无需进行低级格式化。低级格式化的耗时很长,经常使用低级格式化对硬盘也有一些损害,所以用户没有特殊情况,一般也不要进行低级格式化。
在分区和格式化后,文件系统就建立好了。建立好的文件系统一般包括这么几个部分:
1、主引导记录(MBR,Main Boot Record)和分区表(Disk Partition Table,DPT):这两部分位于整个硬盘的0磁头0磁道(柱面)1扇区,在“分区”操作时建立这两个部分。MBR的作用就是检查分区表是否正确以及确定哪个分区为引导(Boot)分区,在启动时把该分区的启动程序(操作系统引导扇区)调入内存加以执行(这样就可以实现不同的分区安装不同的操作系统,在启动时选择启动哪个操作系统,实现多重启动)。分区表自然就是记录分区的编号。不同的文件系统,MBR和分区表都不尽相同,但是整个硬盘一般只有一个主引导记录和一个分区表。
2、操作系统引导记录(OS Boot Record,OBR):通常位于硬盘的0磁头1磁道(柱面)1扇区,对于那些以多重引导方式启动的系统则位于相应的分区的第一个扇区,每个可启动的分区都有一个,是操作系统可直接访问的第一个扇区。它也包括一个引导程序和一个本分区的参数记录表(BIOS Parameter Block,BPB)。其实每个分区都有一个OBR,其参数视分区的大小、操作系统的类别而有所不同。引导程序的主要任务是判断本分区是否含有操作系统的引导文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、簇的大小等重要参数。OBR由高级格式化程序产生(例如DOS操作系统的Format程序)。
以上两个部分,MBR和OBR的引导程序只在启动时使用,而分区表和OBR中的BPB则关系到整个硬盘数据的结构,被破坏的话,该硬盘的数据也就很难找回来了。
3、文件分配表(File Allocation Table,FAT):每个分区都有一个,在分区时建立。FAT记录了硬盘中的每个文件占据的簇的簇号和簇号之间的“链接”(先后顺序),在格式化及读写数据时都要修改FAT。为了数据安全起见,FAT一般做两个,第二FAT为第一FAT的备份,FAT所在的区域紧接在OBR之后,其大小由本分区的大小及文件数量、每个文件使用的簇的数量决定。不同的操作系统有不同的FAT格式。
4、目录区(Directory,简称DIR):DIR紧接在第二FAT表之后,每个分区都有一个,在分区时建立。
这里要说一下“目录”的概念,目录也叫“文件夹(Folder)”。如果把硬盘中的数据比作一本书的话,那么文件就是书中的文章,目录(文件夹)就是书的文章目录,可以让用户将文件进行归类,当然你不用目录也行,不过文件可就全堆在一起了。每个分区实质上也是目录,叫做“根目录”(所以说在分区时就有目录了),相当于书中最大的目录。只有FAT还不能定位文件在磁盘中的位置,还需要知道该文件在哪个目录中,FAT要和DPT、DIR配合才能准确定位文件的位置。DIR记录着每个文件和目录的名称、每个目录包含哪些文件、每个文件占据的簇中第一个簇的簇号、文件和目录的属性等信息。定位文件位置时,操作系统根据DIR中目录找到文件的名称,根据该文件占据第一个簇的簇号,结合FAT表就可以知道文件在磁盘的具体位置及大小了。在DIR区之后,才是真正意义上的数据存储区,即DATA区。
上述的四部分MBR&DPT、OBR、FAT、DIR不是以文件的形式存储的,是分区和格式化的时候自动生成的。用户一般只能看到DIR里面的内容。
5、数据区(DATA):只有一个,包含了硬盘中所有的文件。DATA区虽然占据了硬盘的绝大部分空间,但没有了前面的各部分,我们对DATA区的数据就只能干瞪眼而无法使用。向硬盘写入新的文件时,也不光是存储在DATA区内,还要将该文件的各种信息如文件名、大小、各种属性、分配的簇号等写入到FAT和DIR中;修改文件时也要修改FAT和DIR的相关信息。
另外提一下“删除(Delete)”的概念。一般的“删除”文件操作只是将该文件在DIR区存储信息的位置加上一个“已删除”的标记,表明该文件占据的簇现在可以存储新的数据了(可以使用了),而并未修改DATA区该文件的实际数据。重新分区和格式化的操作,也只是重新建立了MBR、分区表、OBR、FAT和DIR,也未修改DATA区。真正的“删除”是将DATA区该文件占据的簇写入其它数据,这样的话该文件才真的被“删除”了(其实是被其它数据取代了),比如低级格式化就是将硬盘上的所有数据全部变成0,相当于全部删除。但是如上所述,破坏分区表、FAT和DIR也就破坏了该文件的各种信息,我们就不知道该文件存储在哪些簇上,顺序是怎样的,所以还是要保证分区表、FAT和DIR的安全性。
以上就是硬盘中文件及FAT文件系统的机理,不同的操作系统和不同类型的外存储器都可能会使用不同的文件系统,不同的文件系统功能也有所不同。不过用户在实际操作时,知道外存储器上的数据是由文件组成、文件上面有文件夹和分区就可以了,这对任何操作系统和外存储器来说都是一样的。
小:听说还有磁盘碎片?
大:是的,可以说任何操作系统和可重复读写的外存储器都存在碎片问题。打个比方,比如三个文件A、B、C,A占据1、2、3号簇,B占据4、5号簇,C占据6、7、8号簇,现在将B文件删除,则4、5号簇可以使用。现在要写入D文件,该文件除了占据4、5号簇之外,还占据了9、10号簇,这样的话D文件占据的簇的簇号就不是连续的。进行多次这样的操作后,很多文件占据的簇的簇号就都不是连续的了,而是一段一段的,这就叫“碎片(Fragment)”。对硬盘来说,不连续的簇在磁盘上的物理位置也是不连续的,磁头在读取和存储数据时,就要移动比较长的距离并且多次长距离移动,对于数据传输会产生影响。定期“整理(Defrag)”碎片,可以使每个文件占据的簇成为连续的。闪存这样的电存储器也会存在碎片,但是由于数据存取的过程并不需要经过物理移动,所以碎片基本上没有什么影响,一般也不需要整理碎片。可以看出,碎片对数据存取需要经过物理移动的外存储器的影响比较大。
« 一、操作系统概述