标签:存储 文件内容 文件系统 说明 记录 tcl text 内容 需要
在前面课程的学习中,我们知道主引导程序有一个 512 字节的限制,如何突破这种限制呢?我们想到的办法是:再写一个程序(LOADER)放到存储介质中,在主引导程序中将该程序加载到内存中,并将控制权转交给该程序(jump)。
那如何找到存储介质中的程序(LOADER)呢?答案就是需要借助一个文件系统(FAT12),将该程序放到软盘中(软盘的文件系统格式是 FAT12),根据文件系统数据组织的方式便能方便的找到这个程序。那如何具体的实现呢,请看本节。
其中:BPB_RootEntCnt 表示最大根目录文件数(即最大目录项的个数,默认是 0xE0,224)
RootEntry 表示根目录区每个目录项的大小(32 Bytes)
BPB_BytsPerSec 表示每扇区的字节数(512 Bytes)
224 * 32 = 7168 B 7168/512 = 14扇区
根目录区由目录项构成,每一个目录项代表根目录中的一个文件索引。
在 FAT12 中,1簇 = 1扇区。
目录项中的关键成员:
文件名(用于判断是否为目标文件)
文件数据起始存储位置(用于确定读取位置)
文件大小(用于确定读取的字节数)
— 步骤:
(1)FAT1 和 FAT2 是相互备份的关系,数据内容完全一致
(2)FAT 表是一个关系图,记录了文件数据的先后关系
(3)每一个 FAT 表项占用 12 比特
(4)FAT 表的前 2 个表项规定不使用
(1)以簇(扇区)为单位存储文件数据
(2)每个表项( vec[i] )表示文件数据的实际位置(簇)
— 步骤:
(1)FAT 表中的每个表项只占用 12 比特(1.5字节)
(2)FAT 表一共记录了 BPB_BytsPerSec * 9 * 2 / 3 个表项
(3)可以使用一个 short 表示一个表项的值
(4)如果表象值大于等于 0xFF8 ,则说明已经到达最后一个簇
(5)如果表项值等于 0xFF7 ,则说明当前簇已经损坏
(1)数据区起始簇()号为33,地址为 0x4200
(2)数据区起始地址所对应的编号为 2(不为 0)
(3)因此,DIR_FstClus 对应的地址为:
【编程实验:读取指定文件内容】
(1)FAT12 根目录区记录了文件的起始簇号和长度
(2)通过查找根目录区能够确定是否存在目标文件
(3)FAT12 文件数据的组织使用了单链表的思想
— 文件数据离散的分布于存储介质中
— 文件数据通过 FAT 项进行关联
注:本文整理于《狄泰12月提升计划》课程内容
狄泰QQ群:199546072
本人QQ号:502218614
标签:存储 文件内容 文件系统 说明 记录 tcl text 内容 需要
原文地址:https://www.cnblogs.com/shiwenjie/p/9021779.html