orangeg's 操作系统的实现-于渊-学习笔记 boot从磁盘中读取loader的过程

       由于BIOS是从磁盘的第一个扇区中只读取512字节,所以boot.bin所做的事很局限,所以我们用boot.bin中读取loader.bin,loader.bin所占字节大小不受限制,所以能做更多的事。

boot.bin读取loader.bin的过程:

首先需要找到根目录区,根目录区在文件系统的第19个扇区。

       接着从根目录开始,每次读取大小为32字节的条目中的DIR_Name这个字段,比较文件名是否为"loader.bin",不是的话,接着读取下一个条目。当找到DIR_Name为loader.bin所在的条目后,取出DIR_FstClus的值,假如loader.bin文件里的内容小于等于512字节,可以根据该值从数据区中直接找到所有数据。数据区是紧跟根目录区之后的,但根目录所占的扇区大小不是固定的,但是可以计算的。

因为数据区的第一个扇区的簇号为2,所以得公式:

      假如loader.bin文件大小超过512字节,我们不能直接从数据区寻找数据,找到得数据只有512字节,其余的数据就不知道在哪了。这时我们就需要在FAT区寻找其它簇号。在FAT区中,每个FAT项占12位。首先我们可以根据DIR_FstClus找到所需FAT项,FAT项得值代表下一个文件得簇号,如果这个值大于0xFF8表示当前簇号是最后一个簇号,如果值为0xFF7,则表示为一个坏簇。找到所有簇号后,我们可以根据每个簇号从数据区寻找数据。例如下图:

       图中的数据从0x200开始,所以这是一个紧跟引导扇区的FAT区,假如我们的DIR_FstClus为3,找到对应的FAT项的值为0x008,找到8对应的FAT项,值为0x009,接下来第9个FAT项对应的值为0x00A,第0xA个FAT项值为0xFFF,所以该文件占了3,8,9,10共计4个簇,根据这4个簇,可以从数据区依次读取数据,就能读取到文件所有内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值