基于FAT32文件系统的文件读取器的设计

时间:2022-09-29 06:14:05

基于FAT32文件系统的文件读取器的设计

摘要:FAT32是计算机用户广泛使用的一种文件系统模式。该文在分析了FAT32模式下磁盘文件存储特点的基础上,提出了一个不依赖于操作系统的直接读取磁盘文件的系统设计方法,并实现了磁盘文件读取器的设计。

关键词:FAT32;MBR;文件系统;设计

中图分类号:TP334文献标识码:A文章编号:1009-3044(2009)24-6760-02

Design of Document-Reader Based on FAT32 File System

ZHU Zuo-fu

(Department of Information Engineering, Xuzhou College of Industrial Technology, Xuzhou 221006, China)

Abstract: FAT32 file system model has been extensive used by computer users .This paper gives a design methodology about direct reading disk file system which does not rely on the operating system based on analyzing the characteristics of the FAT32 disk file storage mode ,and realizes the design of document-reader.

Key words: FAT32; MBR; file system; design

计算机中的文件管理是通过操作系统进行的,不同的操作系统通过各自不同的模式来分类管理计算机磁盘中的文件,因此,当计算机的操作系统遭到攻击并损坏后,用户就无法进行正常的文件读取工作,特别对一些重要的文件信息,由于无法进行读取,可能会对用户的工作带来影响。本文根据目前计算机用户中主流的FAT32模式文件系统的特点,设计了一种脱离操作系统的读取磁盘文件的读取器,在实际工作中能够给部分计算机用户的工作带来便利。

1 磁盘文件读取器的设计原理

FAT32是目前计算机用户广泛使用的一种文件系统,在FAT32模式下,一个计算机的硬盘通常可以按如下结构描述:从大的方面可以简单划分为硬盘主引导分区(MBR)和逻辑盘两个部分,对于每一个逻辑盘,又由引导区(BOOT)、系统保留扇区、2个文件分配表(FAT表)和数据区(DATA区)组成,而在数据区中还要有存放文件目录的根目录区(ROOT区)。所以,要想读取一个文件信息,就必须从MBR中找到所属逻辑盘的位置,然后通过计算逻辑盘引导区、FAT表所占用的空间计算出DATA区中根目录区的起始地址ROOT,在此基础上找到文件存放的第一簇的地址并以此构造文件动态存放的簇链,读取相关信息。

1.1 FAT32模式下的硬盘及MBR结构

1)FAT32模式下的硬盘结构

要设计一个在硬盘上查找文件的系统,确定逻辑磁盘的起始地址是读取磁盘文件的第一步工作。首先我们要了解FAT32模式下的硬盘结构,它由两个部分组成,一是主引导区MBR,二是逻辑磁盘,如图1所示。

2)FAT32模式下的硬盘MBR结构

主引导区MBR,全称为Master Boot Record,即硬盘的主引导记录。引导扇区是每个分区(Partition)的第一扇区,而主引导扇区是硬盘的第一扇区。它由三个部分组成,主引导记录MBR、硬盘分区表DPT和硬盘有效标志。在总共512字节的主引导扇区里MBR占446个字节(偏移0--偏移1BDH),DPT占64个字节(偏移1BEH--偏移1FDH),最后两个字节“55AA”(偏移1FEH--偏移1FFH)是硬盘有效标志。MBR中,偏移地址01BEH--01FDH的64个字节,为4个分区项内容(分区信息表)。它是由磁盘介质类型及用户在使用FDISK定义分区说确定的。在实际应用中,FDISK对一个磁盘划分的主分区可少于4个,但最多不超过4个。每个分区表的项目是16个字节,其内容含义如表1所示。

在MBR中每一个16字节的分区表按如下方式分配:

00H 分区标志位80H表示可自举分区(00H表示非自举分区)

01-03H起始磁头号、扇区号、柱面号

04H 系统标志位

05-07H终止磁头号、扇区号、柱面号

08-0BH相对扇区数

0C-0FH总扇区数

根据上述结构信息,我们就可以确定硬盘上一个逻辑磁盘的起始地址信息,为读取文件打下基础。

1.2 FAT32模式逻辑盘结构及相关参数

在确定逻辑盘的起始位置之后,我们要找到文件所在逻辑盘的根目录区和文件起始簇的位置,才能够去读取文件。所以要了解在FAT32模式下,每一个逻辑盘的结构。如图2所示:

1)BOOT区部分读写参数及地址分配

BOOT区部分读写参数占用扇区偏移地址03H-59H,具体分配如下:

0BH(2)每个扇区的字节数

0DH(1)每簇扇区数

0EH(2)操作系统保留的扇区数

10H(1)FAT表的个数

18H(2)每个磁道的扇区数

1AH(2)磁盘的磁头个数

1CH(4)分区前的隐藏扇区数

24H(4)每个FAT表占用的扇区数

2CH(4)磁盘根目录的起始簇号

2)ROOT区32BIT的分配

在ROOT区中有几个读取文件的重要参数(32位中的偏移),地址分配如下:

00-07H文件名的前8个字符

08-0AH文件的扩展名

1A-1BH文件起始簇号的低16位

14-15H文件起始簇号的高16位

2 磁盘文件读取器的设计

2.1 FAT32文件系统下文件读取程序的设计思想

FAT32文件系统实际上就是用32位数据来描述磁盘簇的分配,从操作系统的结构上进行分析,可以知道FAT32文件系统并非仅仅简单地将FAT表转换成32位(即用4个字节来描述一个簇),而是带来了磁盘I/O参数、分区和FDT表及文件系统其它方面的变化。在FAT32模式的文件系统中,查找硬盘上一逻辑盘根目录下的某一文件,必须先做以下工作:

1)找逻辑盘的起始位置、文件根目录区的起始位置、文件存放的起始簇。

2)构造ROOT存放的簇链。

3)构造文件存放的簇链。

4)分扇区读取文件

需要说明的是,文件系统对数据区的存储空间是按簇进行划分和管理的,簇是空间分配和回收的基本单位。

2.2 读取磁盘文件的程序流程

以查找C盘根目录下一文件为例,读取文件的流程如图3所示。

2.3 主要模块设计

1)逻辑盘地址信息

struct DISKADDPACKET

{

char packetsize;

char reserved;

unsigned int blockcount;

unsigned int bufferaddr[2];

unsigned long blocknum[2];

};

2)调用 int13 读取扇区函数

getsect(int drive,unsigned long sectnohi,unsigned long sectnolo,char *buff)

{

structDISKADDPACKET diskaddpacket;

unionREGS inregs,outregs;(下转第6764页)

(上接第6761页)

structSREGS segregs;

segread(&segregs);

diskaddpacket.packetsize=16;

diskaddpacket.reserved=0;

diskaddpacket.blockcount=1;

diskaddpacket.bufferaddr[0]=(unsigned)FP_OFF(buff);

diskaddpacket.bufferaddr[1]=(unsigned)FP_SEG(buff);

diskaddpacket.blocknum[1]=sectnohi;

diskaddpacket.blocknum[0]=sectnolo;

inregs.h.ah=0x42;

inregs.h.dl=drive;

inregs.x.si=(unsigned)MK_FP(segregs.ds,&diskaddpacket);

int86x(0x13,&inregs,&outregs,&segregs);

return;

}

3 结束语

在设计文件读取器的过程中,由于程序是调用INT13中断实现的 ,其中较困难的是如何正确调用INT13。此外FAT32模式下ROOT区只有第一簇是固定的,其余簇是动态分配的,ROOT存放簇链的构造必须正确。此外,程序中所使用的关键变量必须正确定义其存储类型,ROOT区存放簇链和文件存放簇链的结束标志必须正确确认,只有这样才能正确进行文件的读取。本设计实现了不依赖操作系统的磁盘文件的读取,可以为广大计算机用户的工作提供帮助。

参考文献:

[1] 刘腾红.操作系统[M].北京:中国铁道出版社,2008:121-142.

[2] 张尧学.计算机操作系统教程[M].北京:清华大学出版社,2006:196-212.

[3] 赵林明,王艳霞.对FAT32和FAT16文件系统下BOOT、FAT、 ROOT、DATA区的分析[J].华南金融电脑,2002(4).

上一篇:如何提高NGN网络的安全性 下一篇:《计算机文化基础》教学的几点建议