xiaohouye 2019-10-24
从之前的几章可以知道,主引导程序的代码量不能超过512字节,但是在实际中我们需要突破512字节的限制
突破限制的思路-主引导程序
1.完成最基本的初始化工作
2.从存储介质中加载程序到内存中
3.将控制权交由新加载的程序执行
但是在这会出现问题-主引导程序如何加载存储介质中的其它程序?
文件系统--存储介质上组织文件数据的方法-主要包含数据区、根目录、FAT2、FAT1、引导扇区如图所示
A.文件系统示例(用到的虚拟网盘时F12)
1.FAT12是DOS时代的早期文件系统
2.FAT12结构非常简单,一直沿用于软盘
3.FAT12的基本组织单位-字节:基本数据单位、扇区:磁盘中的最小数据单元、簇:一个或者多个扇区
通过之前的介绍,可以得出解决方案
1.使用FAT12对软盘(data..img自定义的)进行格式化
2.编写可执行程序(Loader),并将其拷贝到软盘中
3.主引导程序(Boot)在文件系统中查找Loader
4.将Loader复制到内存中,并跳转到入口处执行
实验-往虚拟软盘中写入文件,在这里我们需要一些准备的基本bochs、FreeDos、bximage,主要步骤是创建虚拟软盘然后在FreeDos中进行格式化,最后将data.img挂载Linux中,并写入文件
通过bximage命令生成data.img,并在配置中将其并入到freeDos.img上
通过运行之后生成,然后通过format B命令对B盘进行格式化,B盘就是虚拟软驱,将其格式化虚拟软盘data.img就有了文件系统就是Fata12文件系统,然后通过终端以及命令生成之前提到的原材料并将其拷贝至软盘中
最后通过命令进行查看虚拟软盘下的文件,以及文件内的内容
B.对FAT12进行深入的理解
FAT12文件系统由引导区,FAT表,根目录项表和文件数据区组成
FAT12的主引导区--主引导区存储的比较重要的信息是文件系统的类型,文件系统逻辑扇区总数,每簇包含的扇区数,等。主引导区最后以0x55AA两个字节作为结束,共占用一个扇区
通过实验的对比发现,与表格是一一对应的
Q:如何在FAT12根目录中查找师范存在目标文件?
A.根目录区的大小和位置有计算公式
B.FAT12文件系统中的根目录区--根目录区由目录项构成,每一个根目录项代表根目录中的一个文件索引
目录项的关键成员
DIR_Name--文件名(用于判断是否为目标文件)
DIR_FstClus--文件数据起始存储位置(用于确定读取位置)
DIR_FileSize--文件大小(用于确定读取的字节数)
我们要知道还有个FAT表,它是FAT12的数据组织核心
1.FAT1和FAT2是相互备份的关系,数据内容完全一致
2.FAT表是一个关系图,记录了文件数据的先后关系
3.每一个FAT表暂用12比特
4.FAT的前两个表项规定不使用
小结
1.FAT12根目录区记录了文件的起始簇号和长度
2.通过查找根目录区能够确定是否存在目标文件
3.FAT12文件数据的组织使用了单链表的思想--文件数据离散的分布于存储介质中,文件数据通过FAT项进行关联