软盘与FAT12文件系统的组织格式

来源:互联网 发布:react dom.js下载 编辑:程序博客网 时间:2024/05/17 02:33
 

根据《Orange's》第4章理解。

 

软盘的文件组织格式为FAT12,组织单位由大到小分为分区(一个或多个扇区)和扇区(磁盘上的最小数据单元)。

 

对于1.44M的软盘有2面(磁头号为0和1),每面有80个磁道(0-79),每个磁道有18个扇区(1-18),每个扇区有512字节,共有1474569字节(2880个扇区)。

 

为了便于理解,认为软盘的扇区号为0-2879,其中偶数和奇数扇区分别位于磁头号0和1面上,位置相间。

(开始看这一章的时候我始终不理解磁头,磁道及扇区的关系公式,现在已经明白了)

 

引导扇区(即软盘的第0个扇区)上有个BPB数据结构,大小为62字节,除去末2字节0xAA55,引导扇区还有448字节可用来存放引导代码、数据和其他填充字符。

 

以软盘作为启动盘时,如果引导扇区有效,则引导代码会被BIOS加载到0000:7C00处,然后CPU跳转到0000:7C00处执行。

 

BPB信息中比较重要的:根目录区的目录条目数BPB_RootEntCnt

 

FAT12的组织格式为引导扇区0、FAT1表(1-9扇区)、FAT2表(10-18扇区)、根目录区(长度非固定,由BPB信息中的目录条目数BPB_RootEntCnt决定,每个目录条目占用32字节)、数据区(长度非固定)。

 

目录条目的内容中包括文件名、文件属性、最后一次写入时间、最后一次写入日期、此条目对应的开始簇号DIR_FstClus和文件大小DIR_FileSize。其中开始簇号DIR_FstClus和文件大小DIR_FileSize比较重要,决定文件数据存放在哪。

 

FAT表占用9个扇区共9x512个字节,每12位为一个簇,则最多可表示3072个簇。在软盘中一个簇对应一个扇区,FAT表可表示的范围3072已经大于实际的扇区数2880了。另外,12位可表示的范围为4096,也大于实际的扇区数2880了。

 

FAT1和FAT2通常相同。

 

文件数据内容的查找:根据目录条目中的DIR_FstClus,从FAT表中取出一个对应的12位数——FAT项,该数如果是0xFFF则表示后面没有数据了,否则表示该簇也被占用,如此依次可找到所有占用的簇。根据这些簇所对应的扇区,就可知道数据存放在什么位置了。

 

注意的是,数据区的第一个簇号为2,对应的扇区编号如此计算:
        数据区开始扇区号 = 根目录区开始扇区号 + 根目录区占用的扇区数
其中,根目录区占用的扇区数RootDirSectors如此计算:
        RootDirSectors = [(BPB_RootEntCnt x 32) + (BPB_BytesPerSec -1)]/BPB_BytesPerSec

 

根据Orange's中的定义,数据区第一个簇对应的扇区号为19 + 14 = 33,所以有
        扇区号 = 33 + 簇号 - 2
对应的在软盘中的物理位置=扇区号x512字节

 

根据磁头号、柱面号和起始扇区号,利用BIOS中断int 13h,可一次性读n个扇区内容到指定内存中。