linux fat 文件系统,FAT,Linux和NTFS文件系统

FAT(FAT12,FAT16和FAT32)不使用任何类型的树。除了描述分区本身的数据块之外,还使用了两个有趣的数据结构。可以从Microsoft和第三方获得在嵌入式系统中编写兼容实现所需级别的完整详细信息。维基百科有一篇不错的文章作为另一个起点,其中也包含了很多关于如何实现它的历史。

由于最初的问题是关于树的使用,我将快速总结一下FAT文件系统中实际存在的小数据结构。有关准确的详细信息和历史记录,请参阅上述参考。

每个目录中的文件集存储在一个简单的列表中,最初按文件创建的顺序存储。通过将条目标记为已删除来完成删除,因此后续文件创建可能会重新使用该插槽。列表中的每个条目都是固定大小的结构,并且足够大,可以保存经典的8.3文件名以及标志位,大小,日期和起始簇号。长文件名(还包括国际字符支持)是通过使用额外的目录条目插槽来保存长名称和原始8.3插槽,其中包含所有其余文件属性。

磁盘上的每个文件都存储在一系列集群中,其中每个集群都是固定数量的相邻磁盘块。每个目录(磁盘的根目录除外)就像一个文件,并且可以根据需要通过分配其他集群来增长。

集群由(错误命名的)文件分配表管理,文件系统从该表中获取其通用名称。此表是一个打包的插槽阵列,一个用于磁盘分区中的每个集群。名称FAT12表示每个时隙为12位宽,FAT16时隙为16位,FAT32时隙为32位。该槽存储空,最后和坏簇的代码值,或该文件的下一个簇的簇号。通过这种方式,文件的实际内容被表示为称为链的簇的链接列表。

较大的磁盘需要更宽的FAT条目和/或更大的分配单元。 FAT12基本上只能在软盘上找到,其中4K簇的上限对于大小不超过1MB的媒体有意义。 FAT16和FAT32都常见于拇指驱动器和闪存卡上。 FAT大小的选择部分取决于预期的应用。

访问特定文件的内容非常简单。从其目录条目中,您将了解其总大小(以字节为单位)及其第一个簇编号。从群集号,您可以立即计算第一个逻辑磁盘块的地址。从通过群集编号索引的FAT中,可以找到分配给该文件的链中的每个已分配群集。

发现适合存储新文件或扩展现有文件的可用空间并不容易。 FAT文件系统只是用代码值标记自由簇。查找一个或多个空闲群集需要搜索FAT。

找到文件的目录条目并不快,因为目录没有排序,需要通过目录线性搜索所需文件。请注意,长文件名通过为每个具有长名称的文件占用多个目录条目来增加搜索时间。

FAT仍然具有以下优点:它可以很容易地实现,它可以在小型微处理器中完成,因此即使是小型嵌入式系统和PC之间的数据交换也可以以经济有效的方式完成。我怀疑它的怪癖和奇怪之处将在很长一段时间内与我们同在。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值