博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[磁盘存储] FAT16存储详解
阅读量:6479 次
发布时间:2019-06-23

本文共 1577 字,大约阅读时间需要 5 分钟。

磁盘分区方式有多种,目前比较主流的是FATNTFS,本文记录下FAT16的一些内容。

一、 磁盘的总体结构

物理:
一个机械硬盘由很多盘片组成,一个盘片有两个面,对应两个读写磁头。磁头以0、1、2... 编号。每个盘片被划分成多个同心圆磁道,不同盘片上半径相同的同心圆构成了一个柱面,从外至里编号为 0、1、2...
每个磁道被划分为几十个扇区(Sector),一般容量是 512byte(字节),扇区按照一定规则编号为 1、2、3...
也就是说,一个硬盘是以扇区为基本单位,有柱面数x磁头数(盘面数)x每个面上的扇区数 个扇区。

存储:

从前到后,磁盘有以下部分:
1.MBR(master boot record)扇区
位于硬盘的第一个扇区,bios在执行自己固有的程序以后就会进入到mbr中的第一条指令,MBR分为两部分:引导代码和DPT(硬盘分区表),最后以55AA结束。下图为一块磁盘的MBR部分,其中选中部分为DPT。在 DPT共64个字节中,以 16个字节为分区表项单位描述一个分区的属性。第一个分区表项描述一个分区的属性,一般为基本分区。第二个分区表项描述除基本分区外的其余
空间,一般而言,是扩展分区。

clipboard.png

2.保留扇区,一般为62个

3.第一个分区,通常为活动分区

4.第二分区DPT、保留扇区

5.第二扇区

......


二、FAT16分区原理

假设前面描述的磁盘第一分区方式为FAT16,其结构从前到后如下:
1.DBR
2.FAT1
3.FAT2
4.根文件夹:32个扇区
5.其他文件夹及文件,以簇为单位从2开始编号
6.剩余扇区

1.DBR区(DOS BOOT RECORD)即操作系统引导记录区

通常占用512字节,由跳转指令、厂商标志、操作系统版本号、BPB(BIOS Parameter Block)、扩展BPB、os引导程序、结束标志几部分组成。下如下图所示,前三个字节为跳转指令,之后8个字节为厂商标志和操作系统版本号,之后被选中的53个字节为BPB,之后的代码为扩展BPB,引导程序代码,结束标志(55AA)。

BPB部分简介

1)前两个字节为扇区字节数,图中一个扇区为512字节,为02 00,但是采取小端存储方式,所以图中为00 02。其他合法值为1024 、2048 、4096。
2)一个字节为每个簇的扇区数,图中为1.其他合法值为2、4、8、16、32、64 和 128。
3)两个字节为保留扇区数,图中为08 00
4)一个字节为FAT数,图为02
5)两个字节为根目录项数,图为00 02,代表有512项
6)两个字节为小扇区数,图为00 38
7)一个字节为媒体描述符,图为F8,表示硬盘,0xF0表示高密度的3.5寸软盘
8)两个字节为每个FAT表的扇区数,图为38 00,表示一个FAT表有56个扇区
9)两个字节表示每道扇区数,图为3F 00
10)两个字节表示磁头数,图为FF 00
11)四个字节表示隐藏扇区数,图为80 00 00 00
12)四个字节表示大扇区数,图为00 00 00 00,如果小扇区数字段的值不为0,那么本字段的值为0
13)之后为扩展BPB字段,在此不做展开。
clipboard.png

2.FAT表+目录区存储原理

FAT1和FAT2的内容相同,作为备份,所以下文直接说FAT。
FAT是一个数据表,以 2 个字节为单位,这个单位称为FAT记录项,通常情况其第1、2个记录(前4个字节)用作介质描述。从第三个记录项开始记录除根目录外的其他文件及文件夹的簇链情况。FAT表中两字节的取值意义如下表所示:

clipboard.png

目录区中的记录项以32字节为单位,这32个字节的内容如下表所示,根据文件的首簇号去FAT表中寻找文件的下一个部分,以此类推,以链表的形式将文件不连续存储。

clipboard.png

参考资料:FAT文件系统原理

转载地址:http://yvwuo.baihongyu.com/

你可能感兴趣的文章
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
查看>>
POJ 3311 Hie with the Pie(状压DP + Floyd)
查看>>
Security updates and resources
查看>>
DNS为什么通常都会设置为14.114.114.114
查看>>
Sqoop架构(四)
查看>>
golang copy函数
查看>>
《你有多少问题要请示》精华集粹
查看>>
打印图片
查看>>
SHOW CREATE DATABASE Syntax
查看>>
rsync常见问题及解决办法
查看>>
MySQL日期 专题
查看>>
C#中禁止程序多开
查看>>
分布式缓存Redis使用以及原理
查看>>
Activity竟然有两个onCreate方法,可别用错了
查看>>
Linux经常使用命令(十六) - whereis
查看>>
Linux五种IO模型
查看>>
Bootstrap技术: 模式对话框的使用
查看>>
小知识,用myeclipes找jar
查看>>
in-list expansion
查看>>
设计原则(四):接口隔离原则
查看>>