FAT32简介

1、DBR(DOS BOOT RECORD 操作系统引导记录区)
DBR是我们进军FAT32的首道防线。

3、其实DBR中的BPB部分才是这一区域的核心部分(第12~90字节为BPB)

4、在程序中我们采用以上的结构体指针对扇区数据指针进行转化,就可以直接读取数据中的某一字段,如要读取BPB_BytesPerSec,可以这样来作:
((structFAT32_DBR*)pSector)->BPB_BytesPerSec,用如上语句就可以得到这一字段的首地址。

5、不同机器内部对变量的字节存储顺序不同,有的采用大端模式(big-endian),有的采用小端模式(little-endian)。
大端模式是指高字节数据存放在低地址处,低字节数据放在高地址处。
小端模式是指低字节数据存放在低地址处,高字节数据放在高地址处。
FAT32中字节的排布是采用小端模式的。在我们程序中需要将它转为大端模式的表达方式。

6、这样就可以从BPB中读出关于磁盘的各种参数信息,为我们后面的工作作准备。而这个从BPB中读取参数装入到参数表中以备后用的过程就是FAT32的初始化了
具体实现如下:
(1)先定义用来装入从BPB中读取的参数的结构

FAT表是FAT32文件系统中用于磁盘数据(文件)索引和定位引进的一种链式结构。
FAT表其实有两个,同步操作,为了安全起见进行操作

利用FAT表进行判断文件的大小,
FAT表。前8个字节“F8FFFF0FFFFFFFFF”为FAT32的FAT表头标记,用以表示此处是FAT表的开始。后面的数据每四个字节为一个簇项(从第2簇开始),用以标记此簇的下一个簇号。
根据簇号判断文件的大小,当时FF FF FF 0F时说明后面没有簇了

PS:基础知识了解

磁盘上最小可寻址存储单元称为扇区,通常每个扇区为512个字节。
由于多数文件比扇区大得多,因此如果对一个文件分配最小的存储空间,将使存储器能存储更多数据,这个最小存储空间即称为簇。
根据存储设备(磁盘、闪卡、和硬盘)的容量,簇的大小可以不同以使存储空间得到最有效的应用。
在早期的360KB磁盘上,簇大小为2个扇区(1,024字节);
第一批的10MB硬盘的簇大小增加到8个扇区(4,096字节);
现在的小型闪存设备上的典型簇大小是8KB或16KB。
2GB以上的硬盘驱动器有32KB的簇。
如果对于容量大的存储定义了比较小的簇的话,就会使FAT表的体积很大,从而造成数据的冗余和效率的下降。

我们按照初始化参数表中的SectorsPerClust可以知道一个簇中的扇区数

给出一个簇号,计算出它的后继簇号,是实现FAT32的重点

如何计算FAT表可以表示的簇的个数:
FAT表中每四个字节表示一个簇,所以FAT表的大小由实际的簇数来决定。从这里也可以看出,如果簇过大,就会则FAT表比较小,但会造成空间的浪费,
而如果簇过小,可以减小空间的浪费,但会使FAT表变得臃肿。FAT表的大小也可以从BPB参数FATsectors读出。
若SD卡的FAT表大小为958个扇区(“BE 03 00 00”的大端表示)。如果这958个扇区每四个字节都表示一个簇项,则它可以
表示(958*512/4)-2=122622个簇(减去2是因为有8个字节的FAT表头标识。

一个文件数据的首簇号怎样 来确定呢?
只有知道了一个文件数据的首簇号才能继续查找下一簇数据的位置,直到数据结束。下面将要讲到的“根目录区”就可以由一个文件的文件名来查到它的首簇。
根目录区(也是文件),根目录的名称就是磁盘的卷标
根目录区所在扇区可从BPB参数FirstDirSector获取,从BPB图得FirstDirSector=FirstFATSector+BPB_NumFATs*FATsectors=2053。根目录区的 初始大小为一个簇,
我们最终要实现的是对TEST.TXT文件的读取,须要作到给定文件名后,可以得到相应文件的首簇。主要的思想就是对根目录区中(本实例只针对根目录中的文件进行读取,
至于多级子目录的实现,只须要进行多次首簇定位)的记录进行扫描,对记录中的文件名进行匹配。
通过对根目录区的扫描,可以得到TEST.TXT首簇为3,下面就可能以它为起点,来读取文件内容了。

得到首簇号后如何对文件进行读取?
目的:就是到相应的簇及其后继簇去读取数据
这些簇在磁盘的什么位置呢?从FAT表中可以看到,簇号是从2开始的,而第2簇的位置就在第二个FAT表(一共有两个FAT表,它们即时同步)的后面,即根目录所在的簇就为第2簇。
主要思想是这样的:
在已各文件首簇的前提下,从首簇开始,对于文件满一簇的数据,就把整簇数据读出(其实还是按扇区来读,只是一次性读出所有扇区),对于文件
结尾不足一簇的部分,计算它占用了簇内几个扇区,把占用整个扇区部分直接按扇区读出,而最后很有可能是零散的若干个字节,不足一个扇区,即占用了
最后一个此文件最后一个扇区的一部分,对于这部分我们也要将整个扇区读出,截选中有效的数据部分。文件信息结构中的FileOffset参数将时刻记录文
件读到的位置,它与文件大小的差就是还未读取的数据数量。

时间: 2024-10-29 19:12:10

FAT32简介的相关文章

硬盘MBR,GPT分区简介

硬盘分区简介 硬盘相关知识 硬盘由很多盘片(platter)组成,每个盘片的每个面都有一个读写磁头.如果有N个盘片.就有2N个面,对应2N个磁头(Heads),从0.1.2开始编号.每个盘片被划分成若干个同心圆磁道(逻辑上的,是不可见的).每个盘片的划分规则通常是一样的.这样每个盘片的半径均为固定值R的同心圆在逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0.1.2--每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则

Linux 内核开发——内核简介

内核简介 Linux 构成 Linux 为什么被划分为系统空间和内核控件 隔离核心程序和应用程序,实现对核心程序的保护,如保护操作系统本身的保护. 什么内核空间,用户空间 内核空间和用户空间是程序运行的两种不同的状态,Linux对自身软件系统进行了划分,一部分核心的软件独立于普通的软件,拥有特权级别,能够访问平台的所有硬件和资源,称为"内核空间".而普通的软件运行在"用户空间",它只拥有有限的系统资源,不能直接访问内核空间和硬件资源. 将系统分为"内核空间

Linux简介及centos6.x系统安装

Linux简介 一.UNIX和Linux发展史 1 1965年,美国麻省理工学院(MIT).通用电气公司(GE)及AT&T的贝尔实验室联合开 发Multics工程计划,其目标是开发一种交互式的具有多道程序处理能力的分时操作系统,但因 Multics追求的目标过于庞大复杂,项目进度远远落后于计划,最后贝尔实验室宣布退出      2 1969年,美国贝尔实验室的肯.汤普森在DEC PDP-7机器上开发出了UNICS系统      3   1971年,肯.汤普森的同事丹尼斯.里奇发明了C语言:197

NTFS文件系统简介(转载)

原文地址:http://www.cnblogs.com/watertao/archive/2011/11/28/2266595.html 1.简介 NTFS(New Technology File System)是Windows NT以及之后的Windows 2000.Windows XP.Windows Server 2003.Windows Server 2008.Windows Vista和Windows 7的标准文件系统. NTFS取代了文件分配表(FAT)文件系统,为Microsoft

Linux(一)简介与安装

Linux简介: 芬兰大学生Linus Torvalds从1990到1991年利用Tanenbaum教授自行设计的Unix操作系统Minix作为开发平台为自己的intel 386 PC设计的操作系统.操作系统: OS是一种作为用户和计算机之间接口的软件程序,如:Linux,Unix,Microsoft Windows等操作系统的功能: 命令解释 ———— 接受用户发出的命令,对命令进行解释,操纵相应的硬件完成相应指令 进程管理 ———— 正在运行的程序的管理CPU(让多个进程同时运行,多进程,分

FAT32文件系统的存储组织结构(一)

对磁盘的物理结构,逻辑结构和存储结构有了比较深入的了解后,我们来仔细探讨FAT32文件系统的存储组织结构.说到文件系统的组织结构,我们应该马上意识到,这指的是文件系统在同一个分区内的组织结构,在这个话题上,我们完全可以不管分区之外的所有事情. 为了分析FAT32文件系统的存储组织结构,我们来建立一个实实在在的文件系统:将U盘插入电脑,将U盘格式化成FAT32分区格式: 以建好的U盘FAT32文件系统为基础,下面从文件系统的各个组成来分别加以介绍. 分区引导扇区DBR 用winhex打开U盘显示如

mount命令及swap分区简介

 mount:挂载设备 使用格式: mount [type] [options] device(设备名) dir(挂载点) 1.-t:指定挂载设备文件系统格式,通常不需要指定,mount调用blkid命令自动选择文件系统格式 光盘或光盘镜像:ISO9660 linux网络文件系统:NFS windows文件系统格式:FAT32.NTFS linux系统文件格式:ext2.ext3.... -a:挂载/etc/fatab中定义的所有文件系统 -n:默认情况下,mount没挂载一个设备都会把挂载设备

Linux简介——(一)

1. 常见操作系统 - 服务端操作系统 : linux.unix.windows server - 单机操作系统 : windows(dos .ucdos.win95.win98.win2000.xp.vista.win7.win8) MAC .linux(ubuntu) - 移动操作系统 Android.IOS .Windows phone 2.linux操作系统介绍 为什么要学习linux操作系统 1. 大部分服务端都采用linux ,JEE部署到服务器中 2. 一些企业和学校采用linux

嵌入式 Linux根文件系统移植(二)——根文件系统简介

嵌入式 Linux根文件系统移植(二)--根文件系统简介 根文件系统是内核启动时挂载的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行. 一.嵌入式设备文件系统 在嵌入式Linux应用中,主要的存储设备为 RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tm