详析DOS操作系统下的磁盘结构
随着计算机的广泛应用,计算机的知识普及已成为应用和管理的重要组成部分。我国的个人电脑使用较为普遍的是DOS操作系统,当前席卷全球的计算机病毒所感染的也基本上是DOS操作系统的机器。因此对操作系统和磁盘使用有较全面的认识,将使计算机的应用和管理水平有所提高,同时为预防计算机病毒以及解毒提供了强有力的工具和途径。本文侧重概述DOS操作系统的引导过程、操作系统下磁盘的引导扇区、文件分配表(FAT)、目录表(FCB)、磁盘的格式化等。
一、操作系统的引导过程
当开机上电时,计算机的硬件系统就会产生一个复位脉冲,这个复位脉冲直接送到80X86芯片的管脚上,80X86芯片接到这个脉冲后,其硬件逻辑就会置CS寄存器为FFFFH,IP寄存器为0000H,也就是说,会自动地到FFFF:0000H去取第一条指令,转移到系统版上8KBROM--BIOS程序。该程序首先运行加电自检模块,若自检正常,则转入INT19H调用,进行系统引导,若自检有错,则显示错误信息进入死循环。
在进行系统引导时,引导程序还要对外挂ROM进行扫描,若扫描到硬盘控制器中的ROM(起始地址为C800:0000H,其中放的是2KB硬盘设备驱动程序),则进行软中断的重新分配,把原INT13H给硬盘,软盘中断改为INT40H,然后进行操作系统的引导。
首先,引导程序试图将软盘驱动器A:上0头、0道、1扇区(BOOT)引导记录读到起始地址为0000:7C00H的内存单元中,若成功,则执行软盘上引导程序,引导操作系统;若不成功,则将硬盘的0头、0道、1扇区的硬盘主引导记录读到起始地址0000:7C00H的内存单元中,并执行该硬盘主引导程序,其作用是将当前活动分区的分区引导程序也读到上述内存单元中,以完成该分区操作系统的引导。
从上面的叙述不难看出,硬盘与软盘引导系统的最大差别在于,硬盘要执行其物理第一扇区中的主引导程序之后才能转入相应分区逻辑第一扇区中与软盘类似的分区引导程序。
二、磁盘的引导扇区
磁盘的扇区分配由两个部分组成,第一部分只有一个扇区,这就是0道(柱)、0头、1扇区,也就是整个磁盘的第一扇区(物理上),这就是磁盘的主引导扇区。第二部分是供各个操作系统使用的扇区。
(一)、软盘的主引导扇区
主引导扇区内容由FORMAT创建,引导记录可分为四部分:
1、3字节转移指令(供系统盘用);
2、8字节含厂商标志、操作系统版本号;
3、BIOS参数块(共19字节,亦称BPB参数表);
4、引导代码,包含了自举程序的实际代码,引导代码仅对操作系统盘有效;
当该盘作系统盘时,执行转移指令,转到引导代码,执行自举程序,将DOS装入内存。
下面主要介绍BIOS参数块,通过该参数块可获得文件分配表、主目录及数据区起始扇区号。从主引导扇区第12个字节内容开始,具体的含义如下:
12-13字节:描述扇区大小(字节);
14字节:每簇所占扇区个数;
15-16字节:保留扇区数;
17字节:FAT(文件分配表)个数;
18-19字节:主目录(FCB)大小(文件个数);
20-21字节:磁盘总扇区数;
22字节:介质描述符(FD双面双密度360KB软盘,F9双面高密度1.2MB软盘,F8硬盘);
23-24字节:每个FAT表所占扇区数;
25-26字节:每道扇区数;
27-28字节:磁头个数;
29-32字节:隐含扇区数;
33-36字节:(只对硬盘有效)。当分区总数>FFFFH时,总扇区数填入此处,且20-21处值为0(此时分区容量>32M)。
注:
(1)以上凡占2个字节的,前一字节是低位,第二字节是高位;
(2)所表示的数均是16进制数(各字节内容);
对软盘来说,主引导扇区是物理第一扇区,也是逻辑O(第1个)扇区,可用DEBUG的L、W命令进行读、写操作。
(二)、硬盘的引导扇区
1、硬盘的主引导扇区(隐含扇区)
该扇区主要由两个部分组成:主引导程序和分区信息表。分配如下表:
地址偏移硬盘0道(柱)、0头、1扇区
0000H―――主引导记录及一些数字0
01BEH―――第一分区表(16字节)
01CEH―――第二分区表(16字节)
01DEH―――第三分区表(16字节)
0IEEH―――第四分区表(16字节)
01FEH__55H
01FFH―――AAH
硬盘主引导扇区内容由FDISK.COM创建。整个硬盘空间最多划分为4个分区,可提供4个操作系统共享,每个操作系统占一个分区,如整个硬盘只提供一个操作系统使用,则其它三个分区的长度即所占扇区数为0。在IBM-PC、长城系列及其兼容机上,可通过FDISK.COM来指定各分区的大小和起止的柱面号、扇区号等;分区信息表就是用来保存这些分区信息的。分区信息表由4项组成,每项占16个字节。每一分区信息的各字节内容如下述:
第1字节:为引导标志。如该字节内容为0,表示系统加电或复位自检时,不从这个分区引导操作系统。如果该字节值为80H,则表示系统加电冷启动或热启动时,从这个分区中引导操作系统。在系统冷、热启动时,引导过程会检查分区信息表所有4项中的这个引导标志。DOS的FDISK.COM命令可以置某分区中这个字节值为80H,而置其余分区的这个字节值为0。
第2字节:为本分区起始磁头号。
第3字节:为本分区起始的扇区号。在这个字节中只有低6位是表示扇区号,而高2位则表示起始柱面号的最高2位。
第4字节:为本分区起始的柱面号。
第5字节:为本分区操作系统代码。DOS3.0以下版本,该字节值为01,3.0以上版本该字节值为04,5.0以上版本为06等,当该字节值为
02、03时,则表示该分区的操作系统为XENIX。该字节值为63,表示该分区的操作系统为NIX。该字节值为65,表示该分区的
操作系统为NetWare。
第6字节:本分区结束的磁头号。
第7字节:本分区结束扇区号。其中高2位表示结束柱面号的高2位。
第8字节:本分区结束柱面号。
第9-12字节:在本分区之前已经使用掉的扇区数。
第13-16字节:本分区所使用的扇区数。
硬盘的主引导程序在硬盘的第一扇区中,它是各操作系统的共同部分。它的作用就是查看分区信息表中的4个分区引导标志,当某一分区的引导标志为80H时,主引导程序就把这一分区的第一个扇区(逻辑0扇区)读到内存0000:7C00H处,并从那儿开始执行。主引导程序是属于隐含扇区的,只能用以下两种方法进行读写操作:
(1)、用中断13H实现,用下面的小程序段:
MOVDX,0080硬盘0磁头;
MOVCX,00010道第1扇区;
MOVBX,0200缓冲区地址200处作为起始;
MOVAX,0X01X=2表示读1个扇区,X=3表示写一个扇区;
INT13H磁盘I/O中断;
执行该段程序,就可对硬盘主引导扇区进行读、写操作。
(2)、系统启动后,通过修改内存中的硬盘驱动器参数表(BPB),将总扇区数改为原总扇区数加隐含扇区数,隐含扇区数改为0,则可用DEBUG.COM的L、W命令对主引导扇区进行读、写(事实上,经过上述改动后,主引导扇区已变为逻辑0扇区)操作。
2、分区引导扇区
DOS分区引导程序占据着该分区的第1扇区(逻辑0扇区),内容与软盘的主引导扇区基本相同,只不过BPB参数表的具体值不同。DOS分区引导程序不一定就在硬盘的物理第二扇区,需根据隐含扇区数定。这一扇区的逻辑号总是0。
分区引导程序由FORMAT创建。
三、FAT表、FCB和数据区起始扇区号计算方法及簇号和扇区号的关系
为以下叙述文件分配表(FAT)、目录表(FCB)的方便,将以下涉及的有关换算关系先在这里列出:
第一个FAT表总是从逻辑1扇区开始;
第二个FAT表起始扇区号=1+FAT表长;
主目录起始扇区号=1+2个FAT表长;
数据区起始扇区号=1+2个FAT表长+主目录长;
S=(C-2)*(扇区数/每簇)+数据区起始扇区号,其中:S表示数据(文件)所在的逻缉扇区号,C表示数据(文件)所在的簇号。以上关系式中,起始扇区号均表示逻辑扇区号。
四、DOS对文件的空间分配
DOS进行格式化时对磁盘空间按如下分配:
(1)引导部分;
(2)文件分配表的第一拷贝;
(3)文件分配表的第二拷贝;
(4)根目录;
(5)数据区;
注:以上分配对软盘而言是整个盘空间,对硬盘而言是DOS分区部分。
3。 现代硬盘结构简介
在老式硬盘中, 由于每个磁道的扇区数相等, 所以外道的记录密度要远低于内道, 因此会浪费很多磁盘空间 (与软盘一样)。 为了解决这一问题, 进一步提高硬盘容量, 人们改用等密度结构生产硬盘。 也就是说, 外圈磁道的扇区比内圈磁道多。 采用这种结构后, 硬盘不再具有实际的3D参数, 寻址方式也改为线性寻址, 即以扇区为单位进行寻址。
为了与使用3D寻址的老软件兼容 (如使用BIOS Int13H接口的软件), 在硬盘控制器内部安装了一个地址翻译器, 由它负责将老式3D参数翻译成新的线性参数。 这也是为什么现在硬盘的3D参数可以有多种选择的原因 (不同的工作模式, 对应不同的3D参数, 如 LBA, LARGE, NORMAL)。
4。 扩展 Int 13H 简介
虽然现代硬盘都已经采用了线性寻址, 但是由于基本 Int 13H 的制约, 使用 BIOS Int 13H 接口的程序, 如 DOS 等还只能访问 8 G 以内的硬盘空间。为了打破这一限制, Microsoft 等几家公司制定了扩展 Int 13H 标准(Extended Int13H), 采用线性寻址方式存取硬盘, 所以突破了 8 G 的限制,而且还加入了对可拆卸介质 (如活动硬盘) 的支持。
二。 Boot Sector 结构简介
1。 Boot Sector 的组成
Boot Sector 也就是硬盘的第一个扇区, 它由 MBR (Master Boot Record),DPT (Disk Partition Table) 和 Boot Record ID 三部分组成。
MBR 又称作主引导记录占用 Boot Sector 的前 446 个字节 ( 0 to 0x1BD ),存放系统主引导程序 (它负责从活动分区中装载并运行系统引导程序)。
DPT 即主分区表占用 64 个字节 (0x1BE to 0x1FD), 记录了磁盘的基本分区信息。 主分区表分为四个分区项, 每项 16 字节, 分别记录了每个主分区的信息(因此最多可以有四个主分区)。
Boot Record ID 即引导区标记占用两个字节 (0x1FE and 0x1FF), 对于合法引导区, 它等于 0xAA55, 这是判别引导区是否合法的标志。
Boot Sector 的具体结构如下图所示 :
0000 |------------------------------------------------|
| |
| |
| Master Boot Record |
| |
| |
| 主引导记录(446字节) |
| |
| |
| |
01BD | |
01BE |------------------------------------------------|
| |
01CD | 分区信息 1(16字节) |
01CE |------------------------------------------------|
| |
01DD | 分区信息 2(16字节) |
01DE |------------------------------------------------|
| |
01ED | 分区信息 3(16字节) |
01EE |------------------------------------------------|
| |
01FD | 分区信息 4(16字节) |
|------------------------------------------------|
| 01FE | 01FF |
| 55 | AA |
|------------------------------------------------|
2。 分区表结构简介
分区表由四个分区项构成, 每一项的结构如下:
BYTE State : 分区状态, 0 = 未激活, 0x80 = 激活 (注意此项)
BYTE StartHead : 分区起始磁头号
WORD StartSC : 分区起始扇区和柱面号, 底字节的低6位为扇区号, 高2位为柱面号的第9,10 位, 高 字节为柱面号的低 8 位
BYTE Type : 分区类型, 如 0x0B = FAT32, 0x83 = Linux 等, 00 表示此项未用
BYTE EndHead : 分区结束磁头号
WORD EndSC : 分区结束扇区和柱面号, 定义同前
DWORD Relative : 在线性寻址方式下的分区相对扇区地址 (对于基本分区即为绝对地址)
DWORD Sectors : 分区大小 (总扇区数)
注意: 在 DOS / Windows 系统下, 基本分区必须以柱面为单位划分( Sectors * Heads 个扇区), 如对于 CHS 为 764/255/63 的硬盘, 分区的最小尺寸为 255 * 63 * 512 / 1048576 = 7。844 MB。