操作系统学习与实践3: 基于fat12文件系统实现二阶段启动OS

 一、回顾

        1.  "hello word" 是存储在内存中,解决了怎么通过BIOS找到这段代码开始执行;

        2. “hello word”是存储在引导扇区后面的扇区第一个位置,通过INT 13直接读取这个位置内容;

        3. 接下来“hello word”是以文件的形式存储在文件系统数据区(实模式)。

二、FAT12文件系统

      1. 数据结构

       

        Reserved为引导扇区:     

            

        如下表示:reserved sectors 长度为1个扇区。

 有两个fat区,每个fat区大小为19个扇区,则共有18个扇区存放FAT

Root Directory存放的起始位置为1+18=19扇区,Root diectory中存放的目录/文件记录总数为224,一条记录为32个字节,总的字节数为224*32=7168字节,则Root Directory占用 (224*32)/ 512 = 14 扇区;如果这时候增加一个目录项,则总的大小变为7168+32=7200字节,则占用的扇区应为:7200/512=14.06, 应为15个扇区,即四舍五入后增加一个扇区,为了统一描述这种情况,可以用如下公式:

 (目录项数*32+扇区大小-1)/ 扇区大小,如上为:(224*32+512-1)/ 512 = 15。

根据根目录起始位置(扇区数)和大小,就能访问目录内容了:

读写目录内容的关键是文件名称簇号

 如下1个簇包含两个扇区。

如下数据区的文件的第一个簇为3号,我们知道:簇号从2开始编号的,所以Data的第一个扇区号为: 1 + 18 +14 + (3-2)* 2 = 35.

接下来是文件分配表:

在x86大端计算机中内存存放位置为:F0  FF  FF FF 4F 00 05 60...,将其翻译为实际的值应为:

FF 0F FF FF F0 04 00 05 60....., 在根据FAT12规范,12位为一个数据结构,所以文件分配描述:

FF0 FFF FFF 00R 005 006 ....   

注:大端和小端区别:

       

如下:第3号簇的下一个簇为004 (12位,即fat12)

FFF表示簇结束

   在查找文件过程中的第一步是将目录分解成不同的组件,如下:

  

 逐步迭代查找。

 二、读写FAT12文件系统

  1. 算法逻辑

        从命令行参数中获取磁盘镜像文件的路径和要读取的文件名,然后执行以下步骤:

        (1)读取启动扇区(Boot Sector):程序首先读取磁盘镜像的启动扇区,这个扇区包含了文件系统的重要信息,如扇区大小、簇的数量、FAT(文件分配表)和根目录的位置等。

        (2)读取 FAT(文件分配表):FAT 是文件系统的关键组成部分,它记录了文件数据在磁盘上的存储位置。程序根据启动扇区中提供的信息,计算 FAT 的大小并将其读取到内存中。

        (3)读取根目录:根目录包含了磁盘镜像上所有文件的目录项。程序读取根目录并将其存储在内存中,以便后续查找文件。

        (4)查找文件:程序通过调用 findFile 函数,在根目录中查找与命令行参数中指定的文件名匹配的目录项。

        (5)读取文件内容:一旦找到文件,程序将读取文件内容。FAT12 文件系统使用链表的方式来存储文件数据,程序通过 FAT 来追踪这个链表,读取文件的每个簇,并将数据复制到输出缓冲区。

        (6)输出文件内容:程序将读取的文件内容输出到标准输出(通

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值