实验目的
了解FAT文件系统的磁盘存储结构;学会文件各项空间属性的计算方法;掌握文件系统用户命令的开发方法。
实验内容与记录
3.2 记录sd命令的结果并逐条解释含义
BytesPerSector:每扇区字节数。1.44MB 软盘每扇区有 512 字节。
SectorsPerCluster:每簇扇区数。EOS 创建的引导扇区将该域设置为 1。
ReservedSectors: 从第一个扇区开始的保留扇区数。在FAT12文件系统中,该域必须为 1。表示第一个扇区是保留扇区,即引导扇区。
Fats:FAT 表的数量。无论是哪种FAT文件系统,该域都应该为 2。
RootEntries: 根目录中包含的目录项的个数。每个目录项有 32 个字节。在 FAT12 文件系统中,该域应该为 224。
Sectors:扇区总数。1.44MB 软盘有 2880 个扇区。
Media:介质描述。EOS 创建的引导扇区将该域设置为 0xF0,表示软盘。
SectorsPerFat:每 FAT 表占用的扇区数。在 FAT12 文件系统中,该域应该为 9。
SectorsPerTrack:每磁道扇区数。1.44MB 软盘每磁道有 18 个扇区。
Heads:磁头数。1.44MB 软盘需要有 2 个磁头。
HiddenSectors:引导扇区之前的隐藏扇区数。1.44MB 软盘的隐藏扇区数0。
LargeSectors:扇区总数,域 Sectors 为 0 时使用。
First Sector of Root Directroy:根目录起始扇区号。起始扇区号为19号
Size of Root Directroy:根目录大小。根目录大小7168个字节
First Sector of Data Area:数据区起始扇区号。起始扇区号33号
Number O Clusters:数据区中簇的数量。簇的数量为2847
Free Cluster Count:空闲簇的数量。空闲簇的数量为2283
Used Cluster Count:已使用的簇的数量。已使用的簇的数量564
3.3 写出各项计算的方法或者公式,以及最后的输出截图
①fprintf(StdHandle, “First Sector of Root Directroy: %d\n”, pVcb->Bpb.ReservedSectors + pVcb->Bpb.Fats * pVcb->Bpb.SectorsPerFat);
②fprintf(StdHandle, “Size of Root Directroy : %d\n”, pVcb->Bpb.RootEntries * 32);
③fprintf(StdHandle, “First Sector of Data Area : %d\n”, pVcb->Bpb.ReservedSectors + pVcb->Bpb.Fats * pVcb->Bpb.SectorsPerFat + pVcb->Bpb.RootEntries * 32 / pVcb->Bpb.BytesPerSector);
④fprintf(StdHandle, “Number Of Clusters : %d\n\n”, (pVcb->Bpb.Sectors - (pVcb->Bpb.ReservedSectors + pVcb->Bpb.Fats * pVcb->Bpb.SectorsPerFat + pVcb->Bpb.RootEntries * 32 / pVcb->Bpb.BytesPerSector)) / pVcb->Bpb.SectorsPerCluster);
输出截图:
3.4 绘制dir命令的流程图
3.5 写出计算每个文件所占磁盘空间的方法,给出最后结果截图(代码已在后面给出,请大家自己输入并调试)
计算方法:
结果截图:
实验思考题
1、在ConsoleCmdScanDisk函数中扫描FAT表时,为什么不使用FAT表项的数量进行计数,而是使用簇的数量进行计数呢?而且为什么簇的数量要从2开始计数呢?
①对于FAT12文件系统,由于FAT表项有3072项,而实际的簇只有2847个,所以只能使用簇的数量进行计数。
②FAT表被划分为紧密排列的若干个表项,每个表项都与数据区中的一个簇相对应,由于FAT12文件系统规定FAT表的前两项有固定的用途,他们对应的0、 1两个簇号也就不能使用了,所以簇从2开始编号。
2、实验指导书的思考与练习的3—5选择一题设计代码,并写出相关代码,并对实验结果截图。(选作)
思考与联系3. 在FAT12文件系统中,删除一个文件只是将文件对应的目录项中文件名的第一个字节修改为0xE5,尝试修改“dir” 命令函数ConsoleCmdDir的源代码,不但能够输出现有文件的信息,还能够输出已经被删除文件的信息,被删除文件的信息可以包括文件名、大小、最后改写日期、起始簇号等信息。考虑一下这种删除文件方式的优点和缺点
修改ConsoleCmdDir的源代码:
运行结果截图:
此时程序不但能够输出现有文件的信息,还能够输出已经被删除文件的信息,被删除文件的信息可以包括文件名、大小、最后改写日期、起始簇号等信息
优点:
①极大的加快了删除一个文件的速度,除一个文件只是将文件对应的目录项中文件名的第一个字节修改为0xE5
②保证了恢复文件时可以找到文件并迅速恢复文件,即寻找文件对应的目录项中文件名的第一个字节为0xE5
缺点:
①文件依然存在文件系统中,则会占用一定的存储空间。