码迷,mamicode.com
首页 > 其他好文 > 详细

第5课 - 主引导程序的扩展(下)

时间:2018-05-10 23:38:46      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:存储   文件内容   文件系统   说明   记录   tcl   text   内容   需要   

第5课 - 主引导程序的扩展(下)

1. 在 FAT12 根目录中查找目标文件

  在前面课程的学习中,我们知道主引导程序有一个 512 字节的限制,如何突破这种限制呢?我们想到的办法是:再写一个程序(LOADER)放到存储介质中,在主引导程序中将该程序加载到内存中,并将控制权转交给该程序(jump)。

  那如何找到存储介质中的程序(LOADER)呢?答案就是需要借助一个文件系统(FAT12),将该程序放到软盘中(软盘的文件系统格式是 FAT12),根据文件系统数据组织的方式便能方便的找到这个程序。那如何具体的实现呢,请看本节。

1.1 根目录区的大小和位置

  技术分享图片

    其中BPB_RootEntCnt 表示最大根目录文件数(即最大目录项的个数,默认是 0xE0,224

        RootEntry 表示根目录区每个目录项的大小(32 Bytes

        BPB_BytsPerSec 表示每扇区的字节数(512 Bytes

        224 * 32 = 7168 B          7168/512 = 14扇区

  技术分享图片

1.2 FAT12 文件系统中的根目录区

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

  技术分享图片

  在 FAT12 中,1簇 = 1扇区

  目录项中的关键成员:

    • DIR_Name

        文件名(用于判断是否为目标文件)

    • DIR_FstClus

        文件数据起始存储位置(用于确定读取位置)

    • DIR_FileSize

        文件大小(用于确定读取的字节数)

1.3 实验:读取 FAT12 文件系统的根目录信息

  — 步骤:

    • 创建 RootEntry 结构体类型
    • 使用文件流顺序读取每个项的内容
    • 解析并打印相关的信息  

 2.  介绍 FAT 表

2.1 FAT 表 - FAT12 的数据组织核心

  (1)FAT1 和 FAT2 是相互备份的关系,数据内容完全一致

  (2)FAT 表是一个关系图,记录了文件数据的先后关系

  (3)每一个 FAT 表项占用 12 比特

  (4)FAT 表的前 2 个表项规定不使用

2.2 FAT 表中的先后关系

  (1)以簇(扇区)为单位存储文件数据

  (2)每个表项( vec[i] )表示文件数据的实际位置(簇)

    • DIR_FstClus 表示文件第 0 簇(扇区)的位置
    • vec[DIR_FstClus] 表示文件第 1 簇(扇区)的位置
    • vec[vec[DIR_FstClus]] 表示文件第 2 簇(扇区)的位置
    • ......

2.3 FAT12 数据物理组织示意

  技术分享图片

2.4 FAT12 数据逻辑组织示意

  技术分享图片

2.5 实验:加载 FAT12 中的文件数据

  — 步骤:

    • 在根目录区查找目标文件对应的项
    • 获取目标文件的起始簇号和文件大小
    • 根据 FAT 表中记录的逻辑先后关系读取数据

3. 小贴士

3.1 小贴士一

  (1)FAT 表中的每个表项只占用 12 比特(1.5字节)

  (2)FAT 表一共记录了 BPB_BytsPerSec * 9 * 2 / 3 个表项

  (3)可以使用一个 short 表示一个表项的值

  (4)如果表象值大于等于 0xFF8 ,则说明已经到达最后一个簇

  (5)如果表项值等于 0xFF7 ,则说明当前簇已经损坏

3.2 小贴士二

  (1)数据区起始簇()号为33,地址为 0x4200

  (2)数据区起始地址所对应的编号为 2(不为 0)

  (3)因此,DIR_FstClus 对应的地址为:

    • 0x4200 + ( DIR_FstClus - 2 ) * 512

编程实验:读取指定文件内容】

4. 小结

  (1)FAT12 根目录区记录了文件的起始簇号长度

  (2)通过查找根目录区能够确定是否存在目标文件

  (3)FAT12 文件数据的组织使用了单链表的思想

      文件数据离散的分布于存储介质中

      文件数据通过 FAT 项进行关联 

 

注:本文整理于《狄泰12月提升计划》课程内容

狄泰QQ群:199546072

本人QQ号:502218614

第5课 - 主引导程序的扩展(下)

标签:存储   文件内容   文件系统   说明   记录   tcl   text   内容   需要   

原文地址:https://www.cnblogs.com/shiwenjie/p/9021779.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!