磁盘的地址结构及应用

Author: Date: 1991-12-27

        一、物理地址
        磁盘物理地址是由磁头号、磁道号、扇区号组成。磁头号(又称磁面号)从零号排起,磁道号(在磁盘中也称柱面)从零号排起,扇区号从1号排起。
        为了便于说明,建立一个磁盘的立体空间是非常必要的,如图1所示。
        这是磁盘模型,由两个磁面(每磁面有三个磁道,每个磁道有10个扇区)构成。每一个磁面上有一个磁头,磁头可在磁道间移动,磁盘又可相对于磁头旋转,每个扇区都能在磁头处经过,从而形成了磁盘物理地址。如物理地址为0磁面,1磁道,2扇区,就是图中标识M标记的扇区。物理地址的结构参数一般都在使用前在磁盘分区时就记录在磁盘上的分区表中,磁盘的分区表在0磁头、0磁道、1扇区,可以通过微机判读。
        例1:试读AST286P-140微机C磁盘的分区表。
        解:首先将有DEBUG文件的软盘装入A盘中,然后操作。
        A>DEBUG
        -A
        4FAA:0100 MOV  DL,80
        4FAA:0102 MOV  DH,00
        4FAA:0104 MOV CH,00
        4FAA:0106 MOV CL,01
        4FAA:0108 MOV BX,1000
        4FAA:010B MOV AL,01
        4FAA:010D MOV AH,02
        4FAA:010F INT 13
        4FAA:0111 INT 3
        -g=100 显示寄存器情况
        -D 1000
        4FAA:1000 X  X  X  X  X  X  X  X
        -X  X  X  X  X  X  80  01
        4FAA:1010 01  00  04  03  9C  48  1C  00-
        00  00  D4  FF  00  00  00  00
        +FAA:1020 81 49 05 03 9C E7 F0 FF - 00 00 90 45 00 00 X X
        分区表共有16个字节。例中分区表由第4FAA:100E字节开始,第一个字节为80,意为C盘是引导盘;第六个子节为03,表明C盘拥有4个磁头分别为0、1、2、3号;第九个字节为1C,表示每个磁道有28(ICH)个扇区;第七个字节的高两位与第八个字节组成10位的二进制数1001001000,其十进制数为584,表明磁盘拥有的磁道数为584;第五个字节04,表示每簇空间在文件中占两个字节(此项将在后文说明)。
        顺便指出,磁盘的引导模块及物理地址结构是在磁盘分区时形成的。根据这个道理,就可以在保留磁盘信息的条件下,以重新复制引导模块与分区表的方法清除影响微机正常工作的干扰内容。
        二、逻辑地址
        按DOS的逻辑顺序为磁盘扇区编号,从0号开始至所有DOS可用的扇区,每个扇区都有一个唯一的逻辑编号__逻辑地址。前面提过的磁盘立体空间模型,若以逻辑地址表示则如图2所示。
        图中磁盘逻辑扇区的起始地址__0扇区是物理地址的0磁头、0磁道、1扇区。图1与图2两种地址扇区相互对应,可以互相转换,公式如下:
        已知逻辑地址,求相应的物理地址:磁道号=逻辑地址÷(扇区数×磁头数)+起始地址磁道号
        磁头号=(逻辑地址-扇区数×磁道号×磁头数)÷扇区数+起始地址头号
        扇区号=逻辑地址-扇区数×磁道号×磁头数-扇区数×磁头号+起始地址扇区号
        已知物理地址,求相应的逻辑地址:
        逻辑地址=(物理地址扇区号-起始地址扇区号)+(物理地址磁头号-起始地址磁头号)×扇区数+(物理地址磁道号-起始地址磁道号)×扇区数×磁头数
        (说明:公式中的磁头数、扇区数分别为磁盘结构中的磁头数和扇区数目;公式中除法的商只留整数部分而舍去所有小数;没特别注明的逻辑地址均采用十进制数。)
        例2:磁盘参数如图1,已知逻辑地址为22扇区,试求其物理地址。
        解:
        磁道号=22÷(10×2)+0=1
        磁头号=(22-10×1×2)÷10+0=0
        扇区号=22-10×1-10×0+1=3
        答:逻辑扇区22的物理地址为0磁头、1磁道、3扇区。
        例3:磁盘结构如图2,已知物理地址为0磁头、1磁道、2扇区,试求其逻辑地址。
        解:逻辑地址=(2-1)+(0+0)×10+(1+0)×10×2=21
        答:逻辑地址为21扇区。
        在软盘上,全部空间都分给了DOS使用,所以全部扇区都有逻辑地址。在硬盘上,除大部分扇区分给DOS外,还留有一小部分扇区没有被DOS编号,只有物理地址没有逻辑地址。关于逻辑扇区在实际磁盘中的分布情况,都记录在分区表中。如例1中,分区表指明了AST286P一140机C盘的逻辑扇区开始地址是1磁头、0磁道、1扇区(第2、3、4字节:010100),逻辑扇区的终止地址为3磁头,584磁道,28扇区(第6、7、8字节:039C48)。例中第101E字节开始是D盘分区表的16个字节记录项,留给读者自行判读。判读结果列于下表:
        AST286P一硬盘分区表磁 盘 引导区 DOS分区起始地址 终止地址
        C 有 1磁头 0磁道 1扇区 3磁头 584磁道 28扇区
        D 无 0磁头 585磁道 1扇区 3磁头 743磁道 28扇区
        三、簇地址
        磁盘文件以簇为单位进行存储,文件地址以簇来表示。簇是由一定数目的扇区组成,如常用的5.25英寸软盘每簇是由两个扇区构成,10MB硬盘每簇含8个扇区。每簇都有簇号,簇号从0号开始,并按逻辑顺序排列,形成簇地址系统。
        DOS操作系统把存储的文件名和文件在磁盘上的起始簇地址等信息列在磁盘的文件目录表(FDT)中。另外,又考虑到磁盘作为微机的输入输出设备,其文件会被经常地增、删或编辑,文件存储空间具有变动的特点,因此,为了能有效地利用磁盘空间,每簇的簇号都列入文件分配表(FAT)中。FDT与FAT两表相互配合,准确又全面地表示了簇地址占有情况。
        在FAT中,每簇都占有一个登记项,每簇的登记项在表中都有固定的位置。文件存储可能占有一个以上的簇空间,那么在FDT中记入它的起始簇号,在FAT中起始簇的登记项中记入与起始簇相链的簇号。在相链簇位置的登记项中又记录着下一个相链的簇号,直到文件的最后一簇在该簇登记项中记录着文件结尾的符号为止,从而形成了文件的由起始簇号链接一些簇号,直至结尾簇的簇号链。
        例4:有两个文件,文件长度为3簇,占用簇2、3、6;文件2长度为4簇,占用簇4、5、7、8,试绘两个文件的簇号链图(见图3)。
        簇B号    0    1    2    3    4    5    6    7    8    9    A
        登记号··      3    6    5    7 尾    8    尾 空   空
        文件名    起始簇
        文件1        2
        文件2        4
        由以上不难看出,在FDT、FAT两表配合下,簇号链(即簇地址)的优越性能有效地利用磁盘空间。特别是当删除旧文件建立新文件时,能将零乱散落在不同地址的空簇顺序地链成新文件的簇号链。
        关于FAT、FDT表在磁盘上的地址等参数记录在参数表中,参数表位于逻辑0扇区的后半部,可由微机判读。参数表的格式见图4。
        第1-5字节  每扇区字节数 每簇扇区数 主导模块分区表所占扇区数
        第6-10字节  FAT表数目     FDT所含目录数目 逻辑扇区总数
        第11-15字节  磁盘标志      每个FAT所占扇区数 每磁道所含扇区数
        第16-19字节  磁头数     磁盘保留扇区数
        图4
        《注》磁盘标志:360KB软盘为FD,1.2MB及720KB软盘为F9,硬盘为F8。
        例5:试读AST286P一140机C盘的参数表。
        A>DEBUG
        -L 1000 2 0 1 读C盘 0扇区 1个扇区内容
        -D 1000
        4FAA:1000 EB  34  90  4D  53  44  4F  53--33  2E  33  00  02  04  01  004FAA:1010 02  00  02  X  X  X  40  00--X  XX  X  X  X  X  X
        第100B字节开始是参数表,参数表共有19个字节,表的第一字节,第二字节为0002,表示0200H,十进制为512,即每扇区有512字节。第三字节为04,表示每簇由4个扇区组成。第四、五字节为0100,即0001H,表示FAT表从逻辑地址1扇区开始。第六字节为02,表示有两个FAT表。第七、八字节为0002,表示0200H即512,意为FDT(根目录)表可容纳512个目录。在DOS中规定每目录项为32个字节,由此可算出FDT表的长度占32个扇区。第十二、十三两个字节为4000,表示0040H即64,意为每个FAT表占64个扇区。从参数表的内容可知,FAT表从逻辑.地址1扇区开始,占64个扇区,两个FAT表共占128个扇区。FAT表下面紧接FDT表,所以FDT表应从逻辑地址129扇区开始,占32个扇区。FDT表下紧接着文件区,所以文件区应从逻辑地址161扇区开始。掌握了参数表数据就可以判读FAT、FDT两表的信息。
        例6:试读AST286P__140机C盘的FAT表。
        A>DEBUG
        -L 1000 2 1 1 读C盘 0扇区  1个扇区内容
        4FAA:1000 F8  FF  FF  FF  03  00  04  00-05  00  06  00  07  00  08  004FAA:1010 09  00  0A  00  0B  00  0C  00-0D  00  FF  FF  0F  00  10  004FAA:1020 11  00  12  00  13  00  14  00-15  00  16  00  17  00  18  004FAA:1030 19  00  1A  00  1B  00  1C  00-FF  FF  1E  00  1F  00  20  00FAT从第1000字节开始,表中每2个字节位置(按顺序)与0簇开始编号的各簇空间相对应,而字节中的内容便是该簇登记项的内容。表中第五、六两字节表示第2簇链第3簇。第七、八两字节表示第3簇链第4簇。按登记项的内容可逐次写出簇号链。登记项中,0000表示空簇,FFFF表示结束簇(文件区),F7FF表示坏簇(不能用)。第一至第四字节的登记为F8FFFFFF,表示开始的两簇(第0、1簇)是保留簇,而F8则是硬盘的标志符。
        例7:试读AST286P一140机C盘FDT表。
        A>DEBUG
        -L 1000 2 41 1 读C盘 65扇区 1个扇区内容
        4FAA:1000 49  4F  20  20  20  20  20  20-53  59  53  27  00  00  00  004FAA:1010 00  00  00  00  00  00  FD  6E-FA  10  02  00  3C  58  00  004FAA:1020 4D  53  44  4F  53  20  20  20-53  59  53  27  00  00  00  004FAA:1030 00  00  00  00  00  00  62  75-6B  10  0E  00  B0  75  00  00文件目录表从1000字节开始,第一至第八字节是文件名,第九、十、十一字节是扩展名,以ASCII码表示,其中20表示空字节。第十二字节是文件属性:01表示只读文件,04表示系统文件,20表示已被写入或修改过的存档文件,08表示卷标(文件),10表示子目录文件(在子目录所在的地址有子目录的目录表)。上述只是单一属性的代码,实际文件可能同时具有多种属性,其代码则以各属性代码的和来表示。如文件属性27,表明同时具有只读、隐含系统和存档属性的文件。第十三至第二十二字节是保留字节。第二十三至二十六字节分别表示文件最后形成的时间和日期。第二十七、二十八字节是文件起始簇地址。第二十九至三十字节为以字表示的文件长度。将例6、7两表(FDT、FAT)结合起来,便能得到存储磁盘文件的簇号链地址结构,如图5所示。
        簇号    00  01  02  03  04  05  06  07  08  09  0a  0b  0c  0d    0e  lc
        登记项 f8  ff 03  04 05  06 07  08 09  0a 0b  0c 0d  ffff  lc  _ ffff  FDT
        文件名 起始簇
        ID.SYS 02
        HSDOS.SYS 0e
        图5
        簇地址  逻辑地址  头道扇区  物理地址  映象图          所占扇区
        001     主引导模块(204字节)分区表
        (16字节)占1个扇区             28
        OH         101     磁盘保留区
        1H                 DOS版本参数表(19字节)DOS导块  1
        4H(65)       102     FAT                     64
        81H(129)             FAT                           64
        A1H(161)             FDT(每项32字节)             32
        A9H(169)             DOS留用区占8个扇区
        3FF5H  FFD$H                文件区                     65331
        图6 AST286P一140型微机C盘映象图
        图中两文件的登记项都是递次排列的,是由于这两个文件是系统最先排列的,当时磁盘是空盘,所以才这样排列。而目录表后面的文件排列将另当别论,但“见缝插针”的原则却适用于整个排列。
        簇地址与逻辑地址的换算
        公式:逻辑地址=(簇号-2)×(每簇扇区数)+文件区首地址
        例8:求上例中MSDOS.SYS文件在磁盘中的逻辑地址。
        解:由例5可知文件区首址(在文件表中查得)为A1H(161)。由上列FDT表查得MSDOS.SYS的起始簇号为OEH(14),则:
        逻辑地址(扇区号)=(14-2)×4+161=209
        即D1H逻辑扇区。
        答:文件的逻辑地址为D1H。
        四、小结
        磁盘的三种地址系统各有各的用途,谁也代替不了谁。DOS通过簇地址体系可达到对不同结构的磁盘实现统一的管理和使用的目的,从而使DOS的应用更广泛,使磁盘的发展更为便利。DOS以物理地址体系与磁盘驱动系统打交道,实现磁盘与微机间的数据传输。使用中,三种地址是一体的,互相转换交叉使用,在低级和高级的各种层次上以高效、通用的方法完成了微机与磁盘的互联。磁盘地址的形式与方法是值得在微机与外设的应用、设计中借鉴的。
        最后,根据本文的方法给出具体机型AST286P一140机的C盘映象图(见图6),这将对磁盘的使用和维护很有用。同时,这种实机分析方法也将为其他磁盘的运用做参考。