---- 整理自狄泰软件唐佐林老师课程
限制:主引导程序的代码不能超过512字节
主引导程序完成:
问题:
存储介质上组织文件数据的方法(数据组织的方式)
FAT12文件格式 | 数据区 |
根目录区 | |
FAT2 | |
FAT1 | |
引导扇区 |
FreeDos,Bochs,bximage
bximage
format B:
注:这里挂载到Linux下是为了写一些文件到data.img,写完后从Linux卸载,文件就保存在了data.img中,然后再通过FreeDos启动,可以查看data.img中的文件
mount -o loop data.img /mnt/hgfs/mount_files/
umount /mnt/hgfs/mount_files/
经过步骤3后,结果如下:
Boot查找目标文件(Loader),并读取文件的内容。
FAT12文件系统由 引导区、FAT表、根目录项表和文件数据区 组成。
扇区位置 | 长度 | 内容 |
---|---|---|
0 | 1(512Bytes) | 引导程序 |
1 | 9(4608Bytes) | FAT表1 |
10 | 9(4608Bytes) | FAT表2 |
19 | 14(9728Bytes) | 目录文件项 |
33 | ...... | 文件数据 |
步骤:
实验内容:
https://gitee.com/wuxiang16/myos/blob/master/04/Fat12Test/main.cpp
实验结论:
根目录区由 目录项 构成,每一个目录项代表根目录中的 文件索引
步骤:
创建根目录RootEntry结构体类型
使用文件流顺序读取每个目录项的内容
解析并打印相关的信息
目录项中的关键成员
DIR_Name:文件名(用于判断是否为目标文件)
DIR_FstClus:文件数据起始存储位置(用于确定读取位置)
DIR_FileSize:文件大小(用于确定读取的字节数)
问题:
vec[i]
)表示文件数据的实际位置(簇) 步骤:
小贴士:
BPB_BytsPerSec * 9 / 1.5
个表项(总字节数除以每个表项占用的字节数)方案:
0x4200 + (DIR_FstClus - 2 ) * 512
实验内容
https://gitee.com/wuxiang16/myos/blob/master/05/Fat12Test/main.cpp
FAT12根目录区记录了文件的起始簇号和长度
通过查找根目录区能够确定是否存在目标文件
FAT12文件数据的组织使用了单链表的思想
文件数据离散的分布于存储介质中
文件数据通过FAT表项进行关联