关于 FAT12 文件系统
fat12 软盘.md
fat12
FAT12是DOS时代就开始使用的文件系统(File System),直到现在仍然在软盘上使用,FAT12软盘的被格式化后为:有两个磁头,每个磁头80个柱面(磁道),每个柱面有18个扇区,每个扇区512个字节空间。所以标准软盘的总空间为:
2 * 80 * 18 * 512B = 1474560B = 1440K = 1.44M
2: 两个磁头(磁盘两面嘛)
80: 80个磁道(柱面)
18: 每个磁道被分为 18 个扇区
512: 每个扇区 512B(byte)
下面是FAT12的结构图:
引导扇区 MBR
操作系统之所以认识 FAT12 格式的磁盘,其秘密就在于逻辑 0 扇区这 512B 上。如果这 512 字节的最后两个字节的内容分别是 55 和 AA(0xAA55 低字节在前,高字节在后)的话,BIOS 在启动时会将这个扇区读取到0:7C00h-0:7DFFh
处,然后跳转到 0:7C00h
处继续执行指令,操作系统即用此来达到引导系统的目的,而这个磁盘就称为引导磁盘。
操作系统标识 FAT12 文件系统是因为在逻辑 0 扇区(即引导扇区)处还存储着一个特定的数据结构,此结构有固定的格式,在操作系统将此磁盘格式化时自动生成,具体数据结构如下表所示:
名称 | 开始字节 | 长度 | 内容 | 参考值 |
---|---|---|---|---|
BS_jmpBOOT | 0 | 3 | 一个短跳转指令 |
jmp short LABEL_START nop |
BS_OEMName | 3 | 8 | 厂商名 | ‘ZGH’ |
BPB_BytesPerSec | 11 | 2 | 每扇区字节数(Bytes/Sector) | 0x200 |
BPB_SecPerClus | 13 | 1 | 每簇扇区数(Sector/Cluster) | 0x1 |
BPB_ResvdSecCnt | 14 | 2 | Boot记录占用多少扇区 | ox1 |
BPB_NumFATs | 16 | 1 | 共有多少FAT表 | 0x2 |
BPB_RootEntCnt | 17 | 2 | 根目录区文件最大数 | 0xE0 |
BPB_TotSec16 | 19 | 2 | 扇区总数 | 0xB40 |
BPB_Media | 21 | 1 | 介质描述符 | 0xF0 |
BPB_FATSz16 | 22 | 2 | 每个FAT表所占扇区数 | 0x9 |
BPB_SecPerTrk | 24 | 2 | 每磁道扇区数(Sector/track) | 0x12 |
BPB_NumHeads | 26 | 2 | 磁头数(面数) | 0x2 |
BPB_HiddSec | 28 | 4 | 隐藏扇区数 | 0 |
BPB_TotSec32 | 32 | 4 | 如果BPB_TotSec16=0,则由这里给出扇区数 | 0 |
BS_DrvNum | 36 | 1 | INT 13H的驱动器号 | 0 |
BS_Reserved1 | 37 | 1 | 保留,未使用 | 0 |
BS_BootSig | 38 | 1 | 扩展引导标记(29h),用于指明此后的三个域可用 | 0x29 |
BS_VolID | 39 | 4 | 卷序列号 | 0 |
BS_VolLab | 43 | 11 | 卷标 | ‘ZGH’ |
BS_FileSysType | 54 | 8 | 文件系统类型 | ‘FAT12’ |
引导代码及其他内容 | 62 | 448 | 引导代码及其他数据 | 引导代码(剩余空间用0填充) |
结束标志0xAA55 | 510 | 2 | 第510字节为0x55,第511字节为0xAA | 0xAA55 |
下面我们介绍其中的一些变量的含义:
- BS_jmpBoot:是跳转指令,偏移0处的跳转指令必须是合法的可执行的基于x86的CPU指令,如:jmp start,这样可以生成3字节长的指令,(加关键字short的短跳转指令的长度是2字节),指向操作系统引导代码部分。Windows和MS-DOS生成的FAT12启动扇区中的跳转指令是短跳转,如:jmp short LABEL_START,然后加一个 nop 的空指令来保持 3 字节的长度。
- BPB_BytsPerSec:每扇区的字节数,类型是双字节长,标准分区上的每扇区字节数一般是512B, FAT12的格式下设置为512(0x200h)。
- BPB_SecPerClus:每簇扇区数,偏移13处,类型是字节,簇是数据存储的最小单位,在FAT12格式下一般为1,即每簇只有1个扇区(512字节)。
- BPB_RsvdSecCnt:Boot记录占用多少扇区,即在 FAT1 之前的引导扇区,一般情况下,引导扇区占用1个扇区。
- BPB_NumFATs:共有多少个 FAT 表,默认情况下此字段的值为 2,也就是有两个FAT表,FAT1 和 FAT2 的内容相同,当FAT1 表出错的时候可以使用 FAT2 来恢复文件分配表。
- BPB_RootEntCnt:根目录文件数最大值,默认为 224,每个目录条目占用 32B 的空间,因此根目录的大小为:224*32/512=14,即占用14个扇区。
- BPB_TotSec16:扇区总数 = 0xB40 = 2880
- BPB_FATSz16:每个FAT占用的扇区数 = 0x9 = 9,即 FAT1 占用1—9逻辑扇区,FAT2占用 10—18 逻辑扇区。
- BPB_SecPerTrk:每磁道扇区数 = 0x12 =18,即标准FAT12文件系统中,每个磁道的扇区数就是为18。
- BPB_NumHeads:磁头数 = 0x2 =2,该磁盘包括2个磁头,也就是面数是2。
- BPB_Media: 介质描述,比如:介质描述
- 0xF8 单面、每面80磁道、每磁道9扇区
- 0xF9 双面、每面80磁道、每磁道9扇区
- 0xFA 单面、每面80磁道、每磁道8扇区
- 0xFB 双面、每面80磁道、每磁道8扇区
- 0xFC 单面、每面40磁道、每磁道9扇区
- 0xFD 双面、每面40磁道、每磁道9扇区
- 0xFE 单面、每面40磁道、每磁道8扇区
- 0xFF 双面、每面40磁道、每磁道8扇区
- 0xF0 双面、每面80磁道、每磁道18扇区?
- 同样的介质描述必须在重复复制到每份FAT的第一个字节。有些操作系统(MSX-DOS 1.0版)全部忽略启动扇区参数,而仅仅使用FAT的第一个字节的介质描述确定文件系统参数。
FAT 表
FAT1和FAT2是两个完全相同的FAT表,每个 FAT 占用9个扇区。其中 FAT1 占用 1—9 扇区,FAT2 占用 10—18 扇区。FAT12 表示每个 FAT项占 12bit。
根目录区
根目录区的开始扇区号是19,它是由若干个目录条目(Directory Entry)组成,条目最多有BPB_RootEntCnt个,由于根目录区的大小是依赖于 **BPB_RootEntCnt **的,所以长度不固定。
在本 FAT12 中,因为 BPB_RootEntCnt=0xE0=14*16+0=244
,即条目最多为 244 个,又因为每个条目占用 32 个字节,故244*32/512=14
,即该根目录区占 14 个扇区,即 19—32。
根目录区中的每个条目占用32字节,它的格式如下图:
这里主要定义了文件的名字,属性,最后写入的时间和日期,文件的开始簇数以及文件大小。
名词介绍
fat
文件分配表FAT(File Allocation Table)用来描述文件系统内存储单元的分配状态及文件内容的前后链接关系的表格(也可以笼统的说成是记录文件所在位置的表格)。它对于FAT文件系统来讲是至关重要的一个组成部分,并且它对于硬盘的使用也非常重要,假若丢失文件分配表,那么硬盘上的数据就无法定位,也就不能使用了。
FAT文件系统有 FAT12、FAT16、FAT32。其所包含的这三种类型皆是由FAT表中每个FAT表项所占长度来分类的,也就是说,FAT12的FAT表中的每个FAT表项占用12位,FAT16中的FAT表每个FAT表项占用16位,FAT32的FAT表中的每个FAT表项占用32位。
表项:代表一个数据区中的簇。FAT项的值代表的是文件的下一个簇号,但如果值大于或等于 0xFF8,则表示当前簇已经是文件的最后一个簇了。如果值为 0xFF7,表示它是一个坏簇。
扇区
扇区,是指磁盘上划分的区域。磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,硬盘的读写以扇区为基本单位。
簇
数据存储在硬盘的时候都是以簇为单位,所以无论文件大小是多少,除非正好是簇大小的倍数,否则文件所占用的最后一个簇或多或少都会产生一些剩余的空间,且这些空间又不能给其它文件使用,即使这个文件只有0字节,也不允许两个文件或两个以上的文件共用一个簇,不然会造成数据混乱。
主分区、扩展分区、逻辑分区
- 主分区:一个硬盘的主分区也就是包含操作系统启动所必需的文件和数据的硬盘分区,要在硬盘上安装操作系统,则该硬盘必须得有一个主分区。主分区中不能再划分其他类型的分区,因此每个主分区都相当于一个逻辑磁盘(在这一点上主分区和逻辑分区很相似,但主分区是直接在硬盘上划分的,逻辑分区则必须建立于扩展分区中)。
- 扩展分区:是除主分区外的分区,但它不能直接使用,必须再将它划分为若干个逻辑分区才行。
- 逻辑分区:就是我们平常在操作系统中所看到的D、E、F等盘。
一个硬盘可以有 1 到 3 个主分区和 1 个扩展分区,也可以只有主分区而没有扩展分区,但主分区必须至少有 1 个,扩展分区则最多只有 1 个,且主分区+扩展分区总共不能超过4个。逻辑分区可以有若干个。
分出主分区后,其余的部分可以分成扩展分区,一般是剩下的部分全部分成扩展分区,也可以不全分,剩下的部分就浪费了。
扩展分区不能直接使用,必须分成若干逻辑分区。所有的逻辑分区都是扩展分区的一部分。
- 硬盘的容量=主分区的容量+扩展分区的容量;
- 扩展分区的容量=各个逻辑分区的容量之和。
部分内容转自:https://blog.csdn.net/yi412/article/details/87875691
关于 FAT12 文件系统相关推荐
- nasmc++ 读取FAT12文件系统
FAT12文件系统 基本结构 FAT文件系统把存储介质看成一位的数组,基本单位是簇. 一个簇包含一个扇区,大小为512B 存储介质划分为3个区域:boot,FAT,directory and data ...
- FAT12文件系统原理
概述 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构.FAT(File Allocation Table,文件配置表)是Microsoft发明的文件系统.初期的FAT就是现在所称的F ...
- 第四载、FAT12文件系统剖析2
在上一章节<FAT12文件系统剖析1>中,我们把a.img启动软盘使用FreeDos系统格式化为FAT12文件系统的组织方式,并且向a.img软盘写入两个文件,同时通过FreeDos操作系 ...
- FAT12文件系统镜像查看工具linux下的实现(nasm、g++联合编译
FAT12文件系统镜像查看工具linux下的实现(nasm.g++联合编译) 简介 构思简介 附加链接 最终实现截图 代码 Makefile代码 my_print.asm代码 main.cpp代码 简 ...
- 【实现操作系统 03】使用 FAT12 文件系统实现简单的 Boot 加载 Loader 到内存
系统环境: OS:CentOS Stream release 9 (cmd: cat /etc/redhat-release) Linux Kernel:Linux 5.14.0-142.el9.x8 ...
- 操作系统实践-预备知识-FAT12文件系统
参考资料:http://www.disc.ua.es/~gil/FAT12Description.pdf 软盘 软盘的文件组织格式一般为 FAT12,组织单位由大到小分为: 分区:例如 C 盘.D 盘 ...
- syslinux引导扇区不支持ntfs文件系统_实战 FAT12 文件系统
1. 引言 经过一系列的文章,我们终于完成了从实地址模式跳转到保护模式,并且实现了分段.分页以及保护模式下的中断与异常机制. 保护模式究竟"保护"了什么 可是我们除了最初的时候,在 ...
- FAT12文件系统 理解
目录 标准 从需求出发 FAT(FAT12) 保留扇区Boot Sector & BPB BPB信息的使用 BootSector&BPB地址 首地址:0x0000 末地址:0x0000 ...
- 内核中根据inode得到文件名_聊聊DOS操作系统中的文件系统FAT12
前面我们更多的集中在Linux系统下文件系统的介绍,是时候介绍一下其它文件系统了.今天我们介绍一下Windows操作系统下的文件系统,也就是FAT文件系统.严格的来说其实是DOS的文件系统.今天我们介 ...
- 文件系统_文件系统基础总结
1 相关概念 文件系统的管理功能,是通过把它所管理的程序和数据组织成一系列文件的方法来实现的.文件是指具有文件名的若干相关元素的集合.元素通常是记录,而记录又是一组有意义的数据项的集合.因此,基于文件 ...
最新文章
- vim 寄存器,剪切板
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 今日头条上传图片时设置封面图报像素低的原因是什么
- 介绍Spring Cloud Stream与RabbitMQ集成
- vc中如何将一个工程的资源复制到另外一个工程?
- 16muduo_base库源码分析(七)
- 正向随机微分方程的经典数值格式模拟
- java无法找到加载主类是什么意思_java – 什么是“找不到或加载主类”是什么意思?...
- (二)mybatisPlus实现ActiveRecord(AR)操作
- 一个IT小菜鸟的成长之路
- 笔记一:领导力是什么
- 设计模式 - 软件设计的七大原则
- logstash简介及基本操作
- Piggy-Bank(最小完全背包问题)
- 仰望星空脚踏实地:技术人如何自我成长?
- unity快速开发问答游戏
- 微信前端之在微信浏览器内禁用网页分享菜单的解决方案
- 英特尔12代酷睿架构,十二代酷睿架构
- 克拉美罗界(CRLB)推导
- ABB机器人调试的一般步骤
热门文章
- java qq音乐接口 api,GitHub - yan123zi/qqMusicApi: qq音乐Api接口
- 程序员工作交接文档怎么写_程序员如何优雅的做好离职交接工作?
- NideShop:基于Node.js+MySQL开发的高仿网易严选开源B2C商城
- 孙玄:构建企业级业务高可用的延时消息中台
- Qt 动态加载.qrc文件
- 静态路由配置《计算机网络》实验六,思科路由器静态路由配置实验案例详解
- 2018毕业设计需求分析
- 基于FPGA的篮球计分器
- 王树尧老师运筹学课程笔记 07 线性规划与单纯形法(标准型、基、基解、基可行解、可行基)
- 高三计算机专业vb试题二答案,高三计算机专业VB试题(二)