在多数情况下,许多文件是存放在同一磁盘上的,此时,主要问题是如何为这些文件分配空间,使得在有效利用磁盘空间的同时,可以快速的存取文件。常用的磁盘分配策略主要包括连续空间分配、链接空间分配、索引空间分配等。一般一个文件系统只用一个策略。
1.连续空间分配
连续空间分配是最简单的磁盘空间分配策略。每一个文件都占据了一个完整且连续的磁盘区域。对于这样的文件,由于空间的连续性,当访问下一个磁盘块时,通常无须移动磁头,而只有当磁头从一个磁道的最后一个块移向下一个磁道的第一个块时,才需要移动磁头。因此这种分配策略的磁头移动次数最少。对于这类文件,目录通常只需包括文件名、文件块的起始地址和文件长度。
这种策略的优点是实现简单,存取速度快。只要该文件是连续存放的,第一个块号和块数就可以确定该文件在外部存储介质上的位置。缺点是文件长度不易动态增加,因为一个文件的末尾处的空块可能已经分配给别的文件,一旦需要增加,就需要大量改动。另外,反复增删以后,存储设备中便会产生类似于内存分配中出现的磁盘空间碎片,因而只适用于长度固定的文件。
2.链接空间分配
对于链接空间分配,每一个文件都有一张相应的簇的链表。这些簇可以分散在磁盘的任何地方,除了最后一个簇外,每一个簇都有一个指针指向下一个簇。这些指针对用户是透明的。这种方式,目录项通常只需包括文件名、文件的开始块和结束块。
这种分配策略的优点是没有外部碎片,每一个空闲块都可以用来分配。并且只要有空闲块的存在,一个文件就可以任意地增长而没有其他的限制。缺点是只有在顺序访问时,链接空间分配策略才是高效的。为了访问文件的第i块,必须从第一块开始访问,然后根据指针访问下一块,直到找到第i块。每一次都需要读写磁盘,有时还需要移动磁头来寻道。另一个缺点是必须给指针分配空间。(www.xing528.com)
3.索引空间分配
对于索引空间分配策略,每一个文件都有一个索引块。这个索引块就是一个表,每一个表项存放文件所占有的单个磁盘块的地址。表的第i项就是指向文件的第i个磁盘块。对这类文件,目录的每一项可包括文件名和文件索引块的地址。
这种分配策略不但避免了连续空间分配存在的外部碎片问题和文件长度受限制的问题,而且还支持对任何一个文件块的直接访问。其缺点是由于索引块的分配增加了系统存储空间的开销。对于索引空间分配策略,索引块的大小选择是一个很重要的问题。为了节约磁盘空间,希望索引块越小越好。但索引块太小无法支持大文件。所以得采用一些技术,例如多级索引。
另外,存取文件需要两次访问内存——首先要读取索引块的内容,然后再访问具体的磁盘块——因而降低了文件的存取速度。为克服这个缺点,通常在读取文件之前,先将磁盘上的索引块读入并保存在内存缓冲区中,以便加快文件访问速度。
4.组合空间分配
组合空间分配是多种分配策略的组合。例如,在UNIX文件系统中,每个文件都有一个对应的I节点,其中可以有15个指针用于空间分配。前12个指针指向可以直接访问的磁盘块。这样对一般的小文件来说,一个索引就足够了。剩下的3个指针指向间接块,即不包含文件数据的块。第一个指针指向一级间接块。一级间接块也是索引块,包含的不是数据,而是指向数据的指针。类似的,第二个指针指向一级间接块的指针。第三个指针指向的是三级间接块。对于这类文件,目录项可以包括文件名和I 节点。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。