索引文件组织

要改进FAT系统,就要看FAT的问题出在什么地方。问题就是FAT太大。但仔细分析却发现,FAT虽然很大,但里面存放有用信息的记录不一定很多

例如,如果系统里面文件数量较少,或者个体文件的尺寸很小,则FAT里面的很多记录都是空的。这样将整个FAT放在内存里就显得有点不必要了。

那么我们想,如果能够将每个文件的所有数据块的磁盘地址收集起来,集中放在一个索引数据块里,而在文件打开时将该数据块加载到内存,以后访问任何一个数据块都可以从该索引数据块里面获得物理磁盘地址。这样,内存里面存放的只是我们需要使用的文件的数据块的所有地址,而不是各种不相干的文件的地址全部一次加载到内存。这样,FAT占用内存太多的问题就解决了。

这种索引数据块称为I-NODE。这里的I即是索引(Index)一词的缩写。当然,也有人认为I不是代表索引,而是代表信息(Information)。因为I-NODE里面存放不仅仅是文件地址索引,还有其他关于文件的信息,如文件属性等。图17-7描述的就是一个I-NODE。

在这里插入图片描述

使用索引组织方式时,用户先宣称文件大概有多大,文件系统则按照用户的声明分配一个含有相应数量指针空间的I-NODE,但是先不分配真正的磁盘空间。在真正需要分配数据磁盘空间时,每分配一个磁盘数据块,更新I-NODE里面的相应指针。

如果要访问一个文件,则首先将其对应的I-NODE打开。根据I-NODE的内容,我们就可以找到任何要访问的数据块。比方说,在图17-7里,如果我们要访问第3个数据块,则从该I-NODE里面找到3所对应的物理磁盘块编号679,再发出读第679磁盘块的命令即可。

细心的读者可能已经发现,这个I-NODE非常类似于内存管理时的页表。页表存放的是虚拟页面到物理页面的对应,而I-NODE存放的是逻辑数据块到物理数据块的对应

既然I-NODE与页表相似,那页表除了存放地址映射外,还存放一些别的信息。I-NODE自然也可以在地址对应之外存放别的信息。这正是很多人认为I-NODE里面的I代表信息的原因。这些信息包括诸如文件创建时间、修改时间、是否为系统文件等。

索引文件由于也属于非连续组织方式,自然继承了链表和FAT方式的优点。而且,由于I-NODE按照个体文件而加载、打开、关闭,避免了将所有文件的地址同时加载到内存而造成内存空间紧张的困难。另外,随机访问很方便,因为只要从I-NODE获得所需数据块的物理磁盘地址,一次磁盘访问就可以搞定。索引组织的另一个优点是文件增长灵活。只要文件的尺寸不超过索引头里面预留的指针数×磁盘数据块大小,则文件可以自由地增长。只要在磁盘上找到一个自由磁盘块,分配给文件,再更新I-NODE以反映这个新的映射即可。

索引组织的缺点也与FAT方式类似:比较麻烦。因为每个数据块都需要选点,相当于一系列随机访问,即顺序访问效率不太高。

另外,虽然文件增长灵活,但如果一次文件的大小增长超过了预期,其需要的数据块数超过索引头预留的指针数时怎么办?例如,如果只分配了50个指针,文件尺寸在25 600B(假定数据块大小为512B)范围内时增长很容易;但如果超过这个范围就不容易增长了。我们当然可以重新分配一个更大的I-NODE,将原来I-NODE里面的数据拷贝到新的I-NODE,然后再分配新的磁盘空间,更新I-NODE。

不过这种做法有两个问题:一是需要进行数据的转移(从一个I-NODE移到另一个I-NODE),浪费时间;二是使得I-NODE大小可以任意变化,而这将令文件系统的管理变得复杂。

那么有没有什么较好的办法来解决这个问题呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值