上一篇文章(FAT32文件系统(一)_自在,独行的博客-CSDN博客)中,我们说到文件系统应该满足的三个需求以及实现这三个需求的方法,我们的思路是:

1 单独开辟一块区域用于存放文件名及文件存放地址。

2 借用链表的思想,实现扇区地址的链式存储结构。

本篇我们详细说明如何具体的实现。

一 FAT32文件系统模型

实现方式一:首先单独开辟一块区域用于存放文件名及文件存放地址,也就是下图中的文件索引扇区。然后在各个扇区的起始位置存储下一个扇区的位置。

例如,当需要查找文件名为“name4"的文件时,首先在文件索引扇区逐个搜索,找到文件名”name4“,然后跳转到存储该文件的起始扇区扇区8(start8),在扇区8的开始位置存放了下一个扇区的位置”next9“,然后再跳转到扇区9,以此类推,当读取到”next0“时,表示文件在该扇区结束。

这种做法基本满足了我们所说的需求,但是这种方式中,扇区的链式关系与数据存放在一起,我们在读写数据时,需要人为的将链式关系与数据分割开,造成一定的不便。因此,我们可以直接将链式关系也提取出来集中存储。

实现方式二:在实现方式一的基础上,我们把扇区的链式关系提取出来,集中存放到数据链关系扇区,这就是FAT32文件系统的文件分配表(File Allocation table,FAT)的模型。

那以这种方式存放的话,用来存放数据链关系的扇区需要多大的空间呢?会不会占用过多的空间?

我们来计算一下最坏的可能:

FAT32文件系统用32位二进制数据,也就是4个字节来表示一个扇区的地址(FAT16就是用16位二进制表示一个扇区地址),那么

一个扇区(512字节)可以存储的地址数量为:512/4=128个

容量为1GB的磁盘扇区数为:1 * 1024 * 1024 * 1024 / 512 = 2097152个

所以最多需要 2097152 / 128= 16384个扇区

也就是需要 16384*512=8 388 608 字节,即8MB的存储空间。

1GB的磁盘就需要8MB的空间来存储数据链关系,体积还是很大的。

另外,如果一个文件占用了N个扇区,就需要到表中查找N次,而每次查找只读到了一个扇区,也就是512B的数据。

想减少存放数据链关系的空间大小,就要减少扇区地址的个数;想减少查找次数,就要减少存放文件的“扇区”个数,但相应的就要扩大每个“扇区”的大小。

铺垫到这,解决方案就不难想出了:把扇区们组队,若干个扇区合并成一个存储单元,用一个地址代表这个存储单元。这样由若干个扇区组成的存储单元就叫做“簇”。在FAT32文件系统中,簇就是存放数据的最小单位。当文件大小不到一簇时,仍会占用一簇的空间,如下图所示,文件的实际大小为6.29KB,但占用的空间为一簇的大小8KB。这样的方式某种程度上会造成存储空间的浪费,但是提高了效率。

二 FAT32文件系统的组成:

在以上的内容中,我们从最简单的模型开始分析,最终引出了FAT32文件系统的模型,下面,我们简单介绍一下FAT32文件系统的结构和主要功能。

         MBR(Master Boot Record):严格来说,MBR区并不属于FAT32文件系统,它的主要功能是记录各个分区的信息。

DBR(DOS Boot Record):这个区域记录了非常多的关键信息,如扇区和簇的大小、FAT表的大小、根目录的位置等。

FAT(File Allocation Table):文件分配表,如上文详细介绍的,该区域记录了数据的链式关系。

根(首)目录区:该区域就是上文介绍模型中的文件索引扇区,操作磁盘上数据时,就是由该目录一层层进入。

数据区:该区域是FAT32文件系统的主体部分,主要存放文件和数据的目录。

至此,我们已经从最简单的文件存储模型引出了FAT32系统的存储模型,并简单介绍了FAT32文件系统的结构和主要功能,后续的文章会对各个区域的功能进行详细的介绍,敬请期待!

FAT32文件系统(二)相关推荐

  1. SD卡FAT32文件系统格式

    一.声明 1.本文来源和主旨 2.本文测试环境 二.SD卡FAT文件系统 1.SD卡FAT32文件系统的整体布局 2.FAT文件系统简介 ① 文件分配表 ② 目录项 三.DBR(DOS BOOT RE ...

  2. JAVA——构建FAT32文件系统的DBR(DOS引导记录)类

    Maven <dependency><groupId>org.projectlombok</groupId><artifactId>lombok< ...

  3. 【转载】FAT32文件系统详解

    硬盘是用来存储数据的,为了使用和管理方便,这些数据以文件的形式存储在硬盘上.任何操作系统都有自己的文件管理系统,不同的文件系统又有各自不同的逻辑组织方式.例如:常见的文件系统有FAT,NTFS,EXT ...

  4. FAT32文件系统(一)

    笔者最近在自学FAT32系统及其在嵌入式的应用,将学习笔记整理发布. 学习过程中主要参考的资料有: B站:[纯干货| 超实用!来看Fat32文件系统详细解读--带你一节课掌握FatFS小型文件系统!] ...

  5. fat16和fat32文件系统学习

    根据自己电脑的fat,fat32分区来学习fat,fat32文件系统 fat16和fat32文件系统学习 - 下载频道 - CSDN.NET http://download.csdn.net/deta ...

  6. Linux自学之旅-基础命令(mount挂载FAT32文件系统U盘设备文件)

    mount挂载U盘设备文件 文章目录 前言 一.前言 二.挂载使用 前言 1.上一节我们讲述了mount对光盘设备文件进行一个挂载,还没看的可点击下方链接进入观看:mount挂载光盘设备文件 2.这一 ...

  7. 详解FAT32文件系统

     硬盘是用来存储数据的,为了使用和管理方便,这些数据以文件的形式存储在硬盘上.任何操作系统都有自己的文件管理系统,不同的文件系统又有各自不同的逻辑组织方式.例如:常见的文件系统有FAT,NTFS, ...

  8. FAT32文件系统--For TF卡

    http://blog.csdn.net/myarrow/article/details/8725073 1. TF卡空间是如何分配的? 下面以4GB TF卡为例,通过WinHex工具进行分析,其空间 ...

  9. fat32文件系统的实现与buddy算法

    报告一    FAT32文件系统的实现 文件系统(File System)是计算机系统必不可少的组成部分,可以说除了部分结构简单的单片机系统之外,文件系统是支撑每一个计算机系统运行的最重要的支撑,无论 ...

最新文章

  1. iOS之Storyboard导航大揭秘(1)
  2. Fragment中调用getActivity为null的问题
  3. Go 语言的包依赖管理
  4. 【数据分析】数据分析基础:SQL重要知识点梳理!
  5. SAP ABAP Workflow 显示问题
  6. 将字符串和数字合并动态写入
  7. 博客系统知多少:揭秘那些不为人知的学问(三)
  8. python网络聊天器多线程版
  9. KVM虚拟机迁移原理分析
  10. linux 系统权限相关知识
  11. MFC学习--文本框
  12. 那些C++牛人的博客
  13. ubuntu重装显卡驱动全过程!所有选项的选择!
  14. 结构化、半结构化和非结构化数据
  15. findbugs 常见问题 及解决方案
  16. 数字电路34( 计数器—二进制加计数器)
  17. svnadmin load 遇到E125005 的错误
  18. 学习pathon工具安装
  19. 【三石jQuery视频教程】01.图片循环展示_重发
  20. C++11 auto自动推导

热门文章

  1. AQS共享锁的实现原理
  2. OpenAI 重磅发布 GPT-4 !ChatGPT 炸裂大升级,直接能考上哈佛,抢先体验后我慌了...
  3. php模板引擎smarty之安装
  4. Java中Unsafe类的原理详解与使用案例
  5. epplus 速度_C#EPPlus创建多个选项卡会导致空引用异常(C# EPPlus create many tabs causes a null reference exception)...
  6. 智慧场馆的无人值守怎么做?
  7. 高俪锅 因为一个传说的美丽老板娘 有图有真相 总结筒子们认领合照了
  8. OnsenUI-页面切换
  9. 计算机不能进入桌面,电脑进不了桌面怎么办 电脑进不了桌面解决方法
  10. 取代前端er?PyScript到底是何方神圣