DOS是怎样管理硬盘的 DOS文件管理基本知识 一张磁盘（包括软盘和硬盘）由四个部分组成。第一部分是保留区，通常称之为引导记录（Boot Record）；第二部分是文件分配表（FAT），用于指出磁盘空间的分配情况；第三部分是文件目录表（FDT），用于存储磁盘上文件的大小、位置、日期和时间等数据。最后一部分是用户数据区，实际存储着用户的文件。 DOS不仅确定将数据存放于硬盘的物理位置，而且还确定它们的逻辑存放位置。DOS把存储空间组织成物理位置并提供一种机制对存放于这些位置的数据进行索引，同时，可建立按层次安排的索引，把数据分到逻辑位置。数据存储形式有物理数据存储和逻辑数据存储之分，其概念简述如下：
1．物理数据存储
格式化（Format）过程中，DOS首先把磁盘分成物理位置，然后建立文件管理系统。DOS首先标记硬盘，把它分成一系列同心圆（磁道），然后再把硬盘分成包含slZB信息的扇区。最后，硬盘被划分为许多柱面，柱面是由硬盘中每个磁面上具有相同号码的磁道组成的。
格式化过程中，还建立一个文件目录表（FDT）和文件分配表（FAT），FDT是一个硬盘存放信息的索引，FAT包含一个硬盘存人信息的扇区柱面的指针。
每次存放文件时，DOS就寻找自由扇区并把文件放入其中，注意这种文件组织过程和手工文件系统是不大相同的。这种方式要高效得多，DOS不是把类似的信息放在一个单区域中，而是把信息放在任何可用的扇区中。典型的是把一个文件放在单个柱面上，而不是放在硬盘的一个盘面上，这样能加速读／写头的访问。由FAT跟踪指向每个扇区的指针。
2．逻辑数据存储
大概DOS最有用的功能就是它包含树形目录性能。如上所述，一个目录就是一个索引，它包含存放在盘上的一系列文件以及告诉1）OS每个文件物理存放位置的参考信息。索引可包含子目录的引用。也就是说，目录可安排成一种层次结构，目录项包含低层目录的名字。这种功能允许用户把数据逻辑分组到各个子目录层上去，用操作系统的行话讲，这就叫作建立“树结构”目录。所有层次目录的起点是DOS的主目录（根目录），它在硬盘初始时建立的，根目录是不能用DOS删除命令删除的。
虽然操作系统能跟踪任何文件的存放地址，但在一个索引中对上千个文件进行索引查找并不是一件容易的事。把具有类似内容的文件逻辑划分到一系列子目录中，对有效管理硬盘系统是必要的。
软盘的信息组织和文件管理结构比硬盘要简单一些，但原理是一样的，下面将上要介绍硬盘的信息组织和文件管理性能。
硬盘经物理格式化、FIDISK分区及FORMAT高级格式化后就可作为DOS盘正常使用了。硬盘物理格式化称低级格式化，它重新对硬盘划分磁道和扇区，在每扇区的地址区上标＿上地址信息，并剔出坏道。FDISK对硬盘空间进行分区，为不同的操作系统划分出各自的区域，既可以把整个硬盘全部划分给DOS操作系统使用，亦可划分出一部分硬盘空间给DOS操作系统，而把其余部分留给其它操作系统使用。在硬盘＿匕建立了四个分区信息表的同时，把主引导记录写到主引导扇区（0头0柱面1扇区），并激活一个分区。FORMAT C：／S命令在 DOS分区空间（DOS引导扇区）的前部准备好DOS引导记录、文件分配表（FAT）和文件目录表（FDT）以及将两个系统隐含文件（对MS－DOS来说是IO.SYS和 MSDOS.SYS）和命令处理程序（COMMAND.COM）拷贝到硬盘。在硬盘上对一个操作系统有两个引导程序，一个是共用的（称为主引导程序），另一个是该操作系统自己专用的（称为DOS引导程序或BOOT RECORD）。
下面将从硬盘的主引导记录、DOS引导记录。文件分配表和文件目录表来介绍DOS是怎样管理硬盘的。
主引导记录
硬盘有两个引导记录（假定硬盘只划一个主DOS分区），一个是主引导记录，一个是分区引导记录，前者驻留在硬盘的0道0头1扇区，后者驻留在硬盘逻辑0扇区（物理扇区）。
硬盘的主引导记录是FDISK．EXE在对硬盘进行分区时产生的，同时将分区信息登记在主引导记录上，它并不改变主引导记录的执行代码；FORMAT.COM只能格式化某一分区；主引导记录不属于任何分区，因而FORMAT.COM不能清除主引导记录的任何信息。如果在读主引导记录时出错或主引导记录的结束标志不是“AA55”，系统将转入ROM BASIC（无ROM BASIC则提示出错并死机）。
当主引导记录在查找到活动分区的引导标志为“80H”时（若为多个分区，其它分区的引导标志均为“00H”），就将分区引导记录读到内存7C00H处。若分区引导标志出错。系统将提示“Invalid Partition table.”（错的分区表）。若引导标志正确，该引导记录时出错，系统将显示“Errorloading operation system（操作系统装人出错）。
若BOOT区受损或遭到病毒侵袭，系统则提示“DISkhOOt fallllfe，Iflseyt System disk（硬盘引导记录损坏。插入系统盘）。
DOS使用引导／保留区来确定该磁盘的面数、磁道数和扇区数。由FDISK程序写到硬盘第一物理扇区（0头0柱面1扇区，即主引导扇区）的主引导记录由三部分组成：
（l）主引导程序
（2）四个分区表
（3）结束标志字
主引导程序可在FDISK程序中找到，占用446个字节，它用于硬盘启动时将系统控制转给用户指定的并在分区表中登记下的某个操作系统区。四个分区表内容由磁盘介质及用户在使用FDISK定义分区时决定。
注意：
·扇区号的高二位占用柱面号所在字节的最高二位，即柱面号为10位，扇区号为6位。
·双字参数是低位在前，高位在后存储的。结束标志字占二个字节，其值为AA55，存储时低位在前，高位在后，它用于标识一个有效主引导记录。因此主引导记录共占用512个字节，N好为一个扇区。第一个分区表位于偏移地址olBEH处。
DOS引导记录
由FORMAT高级格式化写到逻辑0扇区（DOS引导扇区，又称BOOT区）的DOS引导记录由五个部分组成：
（1）一条跳转指令
（2）厂商标识代码
（3）BPB参数信息
（4）DOS引导程序
（5）结束标志字
DOS引导记录的功能是完成DOS系统的自举。
第一部分占3个字节，如果该磁盘是DOS系统盘，引导它使PC将引导区中的数据装人内存并执行此跳转指令，它跳过厂商标志和BIOS参数块区，直接到引导代码。
第二部分占8个字节，包含厂商标志。此域005并不需要使用，但可利用一些工具软件看到这部分数据。
第三部分BPB参数信息是一组很重要的参数，占19字节，其中长度为 13个字节的 BIOS参数块（BIOS Pa-rameter Block简称 BPB）记录了磁道的重要信息，如每扇区字节数、磁盘介质说明符等。紧接着BPB的3个字（占6个字节）说明每道扇区数、磁头数、隐含扇区数，提供给磁盘驱动程序，对磁盘起补充说明作用，通常把它们与BPB参数块合在一起，称为磁盘的BPB参数信息。BPB每张盘上都有，其中地址 7C03－ 7C10的 11个子项为 BPB参数块。
下面列出 DOS 3.3下某硬盘的 BPB参数块各子项的含义：
C：＞DEBUG
-L100201
-D 100
xxxx：0100EB349049424D2020－－332E32
00 02 04 of 00
xxxx：011002000207A3F82900ll0004
0011 00 00 00
其中：
of0B－010C为子项一，其代码为0200H二512，即每一扇区有512字节；
of0D为子项二，其代码为04，即每簇四个扇区；
of0E－010F为子项三，其代码为0001，即保留扇区数（主引导记录区）为一个；
of 10为子项四，其代码为02，即有两个FAT表；
olll－ollZ为子项五，其代码为0200，有512个根目录项；
of 13－of I4为子项六，其代码为A307，有41745个扇区；
oils为子项七，其代码为FS，是硬盘；
of 16－ of 17为子项八，其代码为0029H＝41，即一个FAT占用41个扇区；
of 18－0119为子项九，其代码为00llH＝17，每道有17个扇区；
ollA－ollB为子项十，其代码为004，有四个磁头；
ollC－ollD为子项十一，其代码为00llH＝17，隐含扇区数为门，其中第一扇区是主引导记录所在的扇区。
第四部分DOS引导程序即BOOT代码，占480字节，负责自动完成三个系统文件IO.SYS、MSDOS.SYS及COMMAND.COM的装人。
第五部分结束标志字占2个字节，其值为AA55，存储时也是低位在前高位在后。
这样五个部分共占用512个字节，也正是一个扇区，因此称它为DOS引导扇区或BOOT区。不管该磁盘是否包含有DOS系统文件，在保留引导区中总是存在有自举代码，但只有此盘作为系统盘时它才能启动计算机。
文件分配表(FAT)
文件分配表用于存储磁盘文件空间用法的信息。此表包含所有未分配的、已分配的或标记为坏的盘簇的信息。盘簇是DOS进行磁盘空间分配的最小单位，一个簇可以是2个扇区，也可以是4个扇区或更多，视DOS版本及硬盘分区的大小而不同。虽然FAT记录你的文件所用的磁盘空间的信息，但引导区、两个FAT表、文件目录区等本身并不由FAT中的盘簇表示。
FAT中每个磁盘上的可用盘簇只有一个登记项。这些登记项表示该盘簇是在使用、空闲还是坏的。坏的盘簇是在格式化过程中通过FORMAT程序发现的。每个盘簇中只要有一个扇区有问题就整个不能使用，这样会浪费掉一些扇区。
文件分配表FAT是文件管理系统用来给每个文件分配盘区空间的表格，该表格在磁盘上有两个相同的文本。文件分配表的表头占3个字节，其中第一个字节是磁盘介质说明符，第2、3字节总是FFFFH，这是系统设定的，其内容含义如下：
磁盘介质说明符 含义
FF 双面 每道8扇区的软盘
FE 单面 每道8扇区的软盘
FD 双面 每道9扇区的软盘
FC 单面 每道9扇区的软盘
FS 硬盘
DOS是以簇为单位给文件分配磁盘空间的，每个簇在FAT表中占一个表项，簇编号即为表项号。FAT在磁盘上每一簇由一个12位门.5字节）项或由一个16位项（2字节）组成，对所有小于20740个扇区（10MB）的软盘或硬盘DOS分区用12位映像一个簇，如多于20740个扇区，则采用16位FAT。其中，0号表项和1号表项是表头。从2号表项开始，每一个表项作为一个簇的标忐信息，占两个字节。其内容含义如下：
表项内容 含义
0000H 对应簇号为自由簇，可以使用
FFF7H 对应的簇为坏簇，不可使用
FFFFH 文件的簇链结束
FFFO－FFFFH 保留
其它内容 文件的后续簇号
系统隐含文件IO.SYS所在的首簇号总是0002。FAT对每个文件来说其数据结构是一个单向链表，文件在文件目录表FDT中占一个文件目录项，每个文件的首簇号存放在该文件的目录项中，一个文件目录项占32个字节，其中第26和27字节就是存放该文件的首簇号，系统依据FAT中的首簇号乘以2（对于12位FAT则乘以l.5）得到该文件在FAT表头的偏移地址，并得到第2簇的簇号，由该文件的单链表即可找到它的全部内容。
文件分配表总是放在DOS引导记录之后，若FAT大于一个扇区，则占用紧挨着的扇区，两个FAT拷贝连在一起存放，一个挨一个，连成整体。需要使用 FAT时，将其读到DOS的一个缓冲区中。系统的文件分配表存放在逻辑1扇区开始的若干个扇区内，一个文件分配表占多少个扇区依硬盘分区情况的不同而不同。
文件目录（FDT）
FORMAT命令一开始就为整个磁盘建立根目录，每个DOS盘卷只有一个根目录，如果给盘卷起了卷标名的话，可把卷标看成是根目录名。因为每个DOS盘卷都与一个驱动器符相连接，故DOS简单地用“[区驱动器符号：]＼”表示在根目录下。根目录的作用是分配文件空间（逻辑扇区号），并且通过设备驱动程序接口确定有效的最大目录项。
根目录区的文件目录表FDT包括 IO.SYS、 DOS.SYS等文件的目录项，每个目录项占32个字节。由于除根目录外的所有目录实际卜是文件，所以其包含的项数是没有限制的。磁盘上每个文件都有一个32字节长的目录项，它登记了文件的名字、属性、建立或最后修改的日期、时间以及义件在磁盘上存放的起始位置。除了卷标名可能占据该区的个32字节外，该区的每个32字节都可以是根目录下的一个目录项。
注意：
区分目录项和目录这两个名词。目录项是一个32字节长的数据块，它登记着一个文件或子目录。目录是由若于目录项组成的一个表，根目录区是盘卷的一个固定区域，子目录项表是一个表文件。
在当前目录为子目录时，使用DOS命令DIR列文件目录，通常可以看到前两项特殊文件，单个英文句号（.）表示子目录；而（..）则表示上一级目录。于目录项中的文件长度总为零，尽管它的文件长度实际不为零，它的意义在十不能使用普通的文件读/写命令来读/写。个子目录文件。
只有当文件需要时系统才给文件分配数据区空间。空间是按每次一个簇的方式来分配的（簇是最小单位），分配时可以跳过已分配的簇，第一个遇到的空簇就是下一个将要分配的簇，并不考虑族在磁盘上的物理位置，这样使得磁盘空间得到有效的利用，同时删除文件后释放的簇可以分配给新的文件。可以说数据区空间的使用是在文件分配表和文件目录表统一控制下完成的。一个簇总是由一个或多个连续的扇区组成的，每个文件所有的簇在文件分配表中都是链接在一起的。
许多病毒是从修改引导记录和占用文件分配区及文件目录区进人计算机内的，一巳FDT区及FAT区被破坏，则会造成系统崩溃。所以，做好引导记录及FAT、FDT信息的备份工作是很重要的。
（金西）