一.主引导程序上
从之前的几章可以知道,主引导程序的代码量不能超过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项进行关联