当前位置: 首页 > 学习 > 电脑学习 > 电脑基础 > 硬件知识 > 正文

子目录FDT的簇链结构

http://www.zk168.com.cn  招考学习网 2006-1-17 2:27:47
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--

在FAT文件系统中的目录结构是层次性的树形结构,根目录下可以包含文件和子目录,子目录下可以包含文件并且还可以再包含子目录。如图6-7所示就是一个树形目录结构的例子。
                          

                                图6-7 FAT文件系统中的数形目录结构
在FDT中,子目录的管理与普通文件相同,一个子目录文件在FDT表中也占据32个字节的目录项。但是,子目录项中的文件长度总为零,尽管它的文件长度实际上不为零,它的意义在于不能使用不同的DOS读写命令来读写一个子目录文件。
1.子目录FDT中的目录项
当前目录为子目录时,在使用DOS命令DIR列文件目录清单时,通常可以看到前两项特殊文件:
“·”表示当前目录
“··”表示上一级目录
这两项同其它子目录一样也没有长度。“·”项所报告的“首簇号”是子目录FDT第一个扇区所在的簇;“··”所报告的“首簇号”是上一级目录的开始簇号。如果上一级目录是根目录,则该簇号值被置成0。系统利用此结构来实现目录之间的双向联系。
只有当文件需要时,系统才给文件分配数据区空间。存放数据的空间是按每次一个簇的方式来分配的。分配的时候,系统跳过已分配的簇,第一个遇到的空簇就是下一个将要分配的簇,此时系统并不考虑簇在磁盘上的物理位置。同时,文件已被删除后空出来的簇也可以分配给新的文件,这样做可使磁盘空间得到有效的利用。
可以说,数据区空间的使用是在文件分配表和文件目录表的统一控制下完成,每个文件所有的簇在文件分配表中都是链接在一起的。
需要注意的是:若使用DOS命令“MD”在磁盘上建立子目录SUB1,我们在FDT中可查到SUB1目录项的第0字节的值不是2E,而是“S”的ASCII码值53(如表6-7所示),
并且子目录SUB1中的所有文件不占根目录的FDT,而是按SUB1的首簇号2AH在相应的逻辑扇区中建立子SUB1自己的文件目录表FDT。这是因为DOS是将子目录作为一个普通文件的文件目录项来处理的。只是在第11字节的文件属性位设为10H,以表示为子目录项。在文件目录项中的第0字节为2EH,也仅是出现在子目录FDT中的第一、第二两个目录项中(如表6-8所示)。
假设一个FAT16结构逻辑硬盘根目录的文件目录表FDT的起始扇区为129(81H),共32(20H)个扇区。用DEBUG中的命令“L 100 2 81 20”读出硬盘逻辑81H扇区开始的20H个扇区,来查看硬盘根目录的FDT,可得到一个如表6-7所示的根目录文件目录表(FDT)。
表6-7 根目录文件目录表(FDT)

xxxx:0000

xxxx:0010

49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00

00 00 00 00 00 00 C0 32-BF 1C 07 00 46 9F 00 00

IO      SYS'...

  .....2....F..

xxxx:0020

xxxx:0030

4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00

00 00 00 00 00 00 C0 32-BF 1C 4F 00 FA 94 00 00

MSDOS   SYS'...

  ......2..O...

xxxx:0040

xxxx:0050

43 4F 4D 4D 41 4E 44 20-43 4F 4D 20 00 00 00 00

00 00 00 00 00 00 C0 32-BF 1C 5B 00 75 D5 00 00

COMMAND COM....

  ......2..[.u.

xxxx:0060

xxxx:0070

53 55 42 31 20 20 20 20-20 20 20 10 00 00 00 00

00 00 00 00 00 00 DD 8C-8B 28 03 00 00 00 00 00

SUB1       ....

  .......(.....


从显示结果可以看出,SUB1表项的第11字节的值为10H,表明SUB1不是一个文件,而是一个子目录,其首簇号为第3簇。
在根目录下的文件或子目录在磁盘上的存储位置(逻辑扇区号)按以下公式计算:
逻辑扇区号=1+2*FAT的扇区数+根FDT+(首簇号-2)*每簇扇区数
所以,子目录SUB1的FDT存放的首扇区号应该是:
首扇区号=1+2*201扇区+32扇区+(3-2)*8扇区
=443扇区(1BBH扇区)
用DEBUG命令"-L 00 2 1BB 1"将第1BBH扇区的SUB1子目录FDT的1个扇区内容读入00开始的内容,然后用"-D 00"命令显示子目录SUB1的FDT部分内容。
2.子目录下FDT表的扩充
根目录FDT表和子目录中的FDT表有两个最大的区别:
·根FDT表的扇区数是固定不变的,所以根目录下能够存放的文件或子目录数量是有限的,而子目录FDT表的扇区数是固定的,因而其存放的文件或目录数量也 没有限制。
·根FDT表的所有扇区在物理上是连续存放的,而子目录FDT表的所有扇区在物理是不连续存放的,这些FDT的扇区之间存在一种逻辑上的链接关系。
我们知道,文件系统是将子目录作为一个普通文件的文件目录项来管理的。FDT中的一个扇区最多只能存放16个文件项,对于子目录FDT的首扇区来说,子目录下的两个特殊目录“·”和“··”要占该扇区的前64字节,也就是说该扇区只能存放14个文件的文件目录项。显然,子目录不止有14个文件,那么14个文件以后的那些子目录中,文件的文件目录项又是存放在什么地方呢?操作系统又是如何查找它们的呢?
与普通文件在FAT中的簇号一样,子目录FDT的第一个扇区的簇号及其扩展扇区的簇号在FAT中也会形成一个簇号链,并且也是以FF8H---FFFH(或FFF8H---FFFFH)作为最后一个FDT扇区的结束标志。
例如,假设一个子目录的FDT共有3个扇区组成,在根FDT中查得该子目录的首簇号为a,再从FAT表中查得该子目录FDT扇区的簇链关系为“a=>b=>c”。假如该子目录下有一个文件Text.txt,系统查找该文件的步骤如下:
步骤1:在根FDT中查得子目录的目录项,从该目录项中得到该子目录的首簇号为a,该簇所在的扇区即为子目录FDT的首扇区。并在该扇区中查找文件Text.txt。
步骤2:如果没有找到,则在FAT表中从簇号a开始查得该子目录FDT的下一个扇区的簇号为b,然后再在该扇区中查找文件Text.txt。
步骤3:如果在簇号b扇区中仍然没有找到,则在FAT表中从簇号b查得该子目录FDT的下一个扇区的簇号为c,然后再在该扇区中查找文件Text.txt。
步骤4:如此继续,直到查到该文件的目录表项。
如果直到该子目录FDT簇链的最后一个扇区仍然没有找到该文件,就报告查找失败。

-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·关于\"&\"运算符效率低下的问题
·改进ASP应用程序中的字符串处理性能
·如何提高IIS 5.0网站伺服器的执行效率呢
·加速ASP程序的显示速度
·提高ASP页面的执行效率
·如何增强ASP程序性能
·认识和优化connection对象
·微软建议的ASP性能优化28条守则
·什么才是提高ASP性能的最佳选择(三)
·什么才是提高ASP性能的最佳选择(二)
相关内容:
 
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>