一、前序
每篇文章前都要说些什么吧,不然觉得有点尴尬,你问为什么要写这篇文章?我说是为了“虚拟文件系统”管理讲解做铺垫,我一直的想法就是“一定要知道原理,才能走的更远更好”,因为你知道这其中的原理了,之后如果遇到问题了,就不好慌乱,一切让你心慌意乱的事儿都是一些你不能把握的事情,因为你不知道将会发生什么,掌握来原理,你就能掌握规律,你就能预判会发生什么,你也不会心慌了。本篇文章主要讲解FAT16文件系统。
二、硬盘的结构。
(1)硬盘的内部结构。
在这里并不需要知道硬盘长的什么样子,因为我们最终只是为了读取硬盘的数据,“硬盘”到目前为止,其实可以加上双引号,因为它已经不只是指代机械硬盘,只要在编程控制的时候抽象的结构类型与机械硬盘一样,固态硬盘、nor flash、nand flash,甚至eeprom都可以称作硬盘,下图是一个机械硬盘内部构成(图片来源网络,并非原创)。

从图中,可以看出,硬盘的有扇区、磁道、盘面、柱面构成,主轴我们就忽略它吧,它并不是存储介质可以操作的器件,他们的关系是:
(i)扇区构成了磁道。
(ii)水平方向的磁道构成了盘面。
(iii)垂直方向的磁道构成来柱面(个人觉得柱环比较好理解)。
(iv)柱面构成的柱体就是一个磁盘。
(2)一个硬盘的大小。
一个磁盘的大小:
盘面数 X 每个盘面的磁道数 X 每个磁道的扇区= 柱面数 X 每个柱面的扇区数 = 扇区总数
(3)硬盘读写时的“常识”。
(i)读写是以扇区为单位,扇区是操作的最小单位。
(ii)很多分区工具,在分区(生成分区表)的时候,会以柱面为单位进行分区。
(4)一些悬疑。
(i)PC怎么知道一块一盘的大小?
(ii)PC又怎么知道每个分区的大小和位置?
(iii)PC又怎么知道每个分区数据的存放位置?
(iv)格式化的时候,PC对硬盘做了什么?
(v)怎么进行写文件?
(vi)删除文件的时候,PC对硬盘做来什么?
解决了这些疑问,基本上就明确来FAT16文件系统的原理。
三、MBR是什么?
MBR是主引导记录的意思,就是一个名字代号,实际上,它就是硬盘的第一个扇区,这个扇区代表的意义是:
| 地址偏移 | 代表的意义 |
|---|---|
| 00H – 1BDH | 引导程序 |
| 1BE – 1FDH | 主分区表,就是基本分区表 |
| 1FE – 1FF | 签名,就是代表这个扇区是正常的,没有损坏 |
用winhex软件打开一个硬盘(winhex的用法自行百度),可以看到第1个扇区的内容:
(1)分区表是什么?
分区表记录的是一个分区的起始位置,起始位置的单位都是扇区。在FAT分区表中,又分为主分区和逻辑分区,主分区表存放在MBR所在的扇区,逻辑分区表的第一个分区信息存放在MBR中,第二、三等则存放在,逻辑分区的第一个扇区中,也就是DBR中。
| 值 | 含义 |
|---|---|
| 01H | FAT12 |
| 04H | 小于32M的FAT16 |
| 06H | 大于32M的FAT16 |
| 0BH或者0CH | FAT32 |
| 07H | NTFS |
(2)数据区在哪里?
数据区就是一个分区中,最后一部分的DATA区,一个分区中所有的文件数据都存放在这里。
(3)FAT表是什么?
(4)目录项表FDT是什么?
五、一些疑问的回答。
(1)格式化对硬盘到底做了什么?
(2)写一个文件到磁盘发生来什么?
答:填充FDT表,根据文件的大小在FAT表中填写簇号。
(3)删除文件的时候发生来什么?
(4)我们再写一个大文件到磁盘,验证一下之前的big.mp4的数据区被覆盖,下面是写入了一个over.mp4的大文件的FDT表,从7号簇开始占位置,

FAT表的变化:

原来big.mp4占的簇,被over.mp4占用了,此时,完全不可能进行文件恢复了!!!
(5)PC怎么知道一块新硬盘的大小?
答:当一块新硬盘插到PC机上后,PC机会跟进硬件接口,进行一系列命令操作,其中,就有命令发出后,磁盘会主动上报磁盘大小。
六、核心思想总结。
(3)目录项只有8个字节描述一个文件名,那么更长的文件名怎么描述和记录呢?文件夹是怎么被描述记录的?子文件夹又是怎么被描述和记录的?逻辑分区是怎么回事呢?
想知道答案,请看下节分解!!!
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208523.html原文链接:https://javaforall.net
