操作系统启动步骤:
BIOS加电自检---->跳转引导扇区0x7c00---->加载内核进内存
FAT12文件系统(理论篇)
文件系统
文件系统示例
1 |
- FAT12是DOS时代的早期文件系统 |
---|---|
2 |
- FAT12结构非常简单,一直沿用于软盘 |
3 |
- FAT12的基本组织单位 |
4 |
字节(Byte):基本数据单位 |
5 |
扇区(Sector):磁盘中的最小数据单元 |
6 |
簇(Cluster):一个或多个扇区 |
深入FAT12文件系统
1 |
FAT12文件系统由引导区,FAT表,根目录项表和文件数据区组成。 |
---|
FAT12的主引导区
1 |
主引导区存储的比较重要的信息是文件系统的类型,文件系统逻辑扇区总数, |
---|
根目录区的大小和位置
1 |
可以看到根目录区起始于第19扇区 |
---|
根目录区的目录项
FAT表 - FAT12的数据组织核心
1 |
- FAT1和FAT2是相互备份的关系 ,数据内容完全一致 |
---|---|
2 |
- FAT表是一个关系图,记录了文件数据的先后关系 |
3 |
- 每一个FAT表项占用12比特 |
4 |
- FAT表的前2个表项规定不使用 |
5 |
- FAT表中的每个表项只占用12比特(1.5字节) |
6 |
- FAT表一共记录了BPB_BytsPerSec * 9 * 2 / 3个表项 (9个扇区 * 512 /1.5) |
7 |
- 可以使用一个short表示一个表项的值 |
8 |
- 如果表项值大于等于0xFF8,则说明已经到达最后一个簇 |
9 |
- 如果表项值等于0xFF7,则说明当前簇已经损坏 |
FAT表中的先后关系
1 |
- 以簇(扇区)为单位存储文件数据(这里一簇等于一扇区大小) |
---|---|
2 |
- 每个表项(vec[i])表示文件数据的实际位置(簇) |
3 |
(1)DIR_FstClus表示文件第0簇(扇区)的位置 |
4 |
(2)vec[DIR_FstClus]表示文件第1簇(扇区)的位置 |
5 |
(3)vec[vec[DIR_FstClus]]表示文件第2簇(扇区)的位置... |
FAT12数据物理组织示意
FAT12数据逻辑组织示意
FAT12文件系统(实战篇):
测试文件
1 |
创建虚拟硬盘 |
---|
1 |
格式硬盘 |
---|
1 |
添加文件 |
---|
由于根目录是从19扇区开始的,每个扇区是512字节,所以第一个字节位于偏移19*512=9728=0x2600
现在用二进制查看器查看!
看到三个文件名没?那么我们现在来查看文件内容!
1 |
- 数据区起始簇(扇区)号为33,地址为0x4200(33 * 512) |
---|---|
2 |
- 数据区起始地址所对应的编号为2(不为0)(有了起始地址,这里可以用偏移地址) |
A文件内容开始地址为:0×4200+(26-2)*0x200=0x8a00
看到内容没?
下面就是代码了!
请到我的网盘下载(在友链页面):
/batsom系统开发/batsom1/