操作系统启动步骤:
BIOS加电自检---->跳转引导扇区0x7c00---->加载内核进内存

FAT12文件系统(理论篇)
文件系统

- 存储介质上组织文件数据的方法(数据组织的方式)

FAT12_简介.png
文件系统示例

- FAT12是DOS时代的早期文件系统
- FAT12结构非常简单,一直沿用于软盘
- FAT12的基本组织单位
       字节(Byte):基本数据单位
       扇区(Sector):磁盘中的最小数据单元
       簇(Cluster):一个或多个扇区

深入FAT12文件系统

      FAT12文件系统由引导区,FAT表,根目录项表和文件数据区组成。

FAT12的主引导区

        主引导区存储的比较重要的信息是文件系统的类型,文件系统逻辑扇区总数,
        每簇包含的扇区数等。主引导区最后以0x55AA两个字节作为结束,共占用一个扇区。

FAT12_文件信息.png

根目录区的大小和位置
FAT12_计算公式.png

                                                   可以看到根目录区起始于第19扇区

根目录区的目录项

    根目录区由目录项构成,每一个目录项代表根目录中的一个文件索引。

FAT12_文件信息.png

FAT表 - FAT12的数据组织核心

- FAT1和FAT2是相互备份的关系 ,数据内容完全一致
- FAT表是一个关系图,记录了文件数据的先后关系
- 每一个FAT表项占用12比特
- FAT表的前2个表项规定不使用
- FAT表中的每个表项只占用12比特(1.5字节)
- FAT表一共记录了BPB_BytsPerSec * 9 * 2 / 3个表项 (9个扇区 * 512 /1.5)
- 可以使用一个short表示一个表项的值
- 如果表项值大于等于0xFF8,则说明已经到达最后一个簇
- 如果表项值等于0xFF7,则说明当前簇已经损坏

FAT表中的先后关系

- 以簇(扇区)为单位存储文件数据(这里一簇等于一扇区大小)
- 每个表项(vec[i])表示文件数据的实际位置(簇)
(1)DIR_FstClus表示文件第0簇(扇区)的位置
(2)vec[DIR_FstClus]表示文件第1簇(扇区)的位置
(3)vec[vec[DIR_FstClus]]表示文件第2簇(扇区)的位置...

FAT12数据物理组织示意
FAT12_物理.png
FAT12数据逻辑组织示意
FAT12_逻辑.png

FAT12文件系统(实战篇):

测试文件

   创建虚拟硬盘

创建虚拟硬盘.png

  格式硬盘

格式硬盘.png

  添加文件

添加文件.png

由于根目录是从19扇区开始的,每个扇区是512字节,所以第一个字节位于偏移19*512=9728=0x2600
现在用二进制查看器查看!
看到三个文件名没?那么我们现在来查看文件内容!

查看文件内容.png

- 数据区起始簇(扇区)号为33,地址为0x4200(33 * 512)
- 数据区起始地址所对应的编号为2(不为0)(有了起始地址,这里可以用偏移地址)
- 因此,DIR_FstClus对应的地址为:0×4200+(DIR_FstClus-2)*512

A文件内容开始地址为:0×4200+(26-2)*0x200=0x8a00

看到内容没?

下面就是代码了!

请到我的网盘下载(在友链页面):
/batsom系统开发/batsom1/