一.链接分配
1.1.隐式链接
如同内存管理一样,连续分配所存在的问题就在于: 必须为一个文件分配连续的磁盘空间。如果在将一个逻辑文件存储到外存上时,并不要求为整个文件分配一块连续的空间,而是可以将文件装到多个离散的盘块中,这样也就可以消除上述缺点。在采用链接分配(Chained Allocation)方式时,可通过在每个盘块上的链接指针,将同属于一个文件的多个离散的盘块链接成一个链表,把这样形成的物理文件称为链接文件。
由于链接分配是采取离散分配方式,消除了外部碎片,故而显著地提高了外存空间的利用率;又因为是根据文件的当前需要,为它分配必需的盘块,当文件动态增长时,可动态地再为它分配盘块,故而无需事先知道文件的大小。此外,对文件的增、删、改也十分方便。
隐式链接分配方式的主要问题在于:它只适合于顺序访问,它对随机访问是极其低效的。如果要访问文件所在的第 i 个盘块,则必须先读出文件的第一个盘块……,就这样顺序地查找直至第 i 块。当 i=100 时,须启动 100 次磁盘去实现读盘块的操作,平均每次都要花费几十毫秒。可见,随机访问的速度相当低。此外,只通过链接指针来将一大批离散的盘块链接起来,其可靠性较差,因为只要其中的任何一个指针出现问题,都会导致整个链的断开。
为了提高检索速度和减小指针所占用的存储空间,可以将几个盘块组成一个簇(cluster)。比如,一个簇可包含 4 个盘块,在进行盘块分配时,是以簇为单位进行的。在链接文件中的每个元素也是以簇为单位的。这样将会成倍地减小查找指定块的时间,而且也可减小指针所占用的存储空间,但却增大了内部碎片,而且这种改进也是非常有限的。
1.2.显式链接
这是指把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。该表在整个磁盘仅设置一张,如下图所示。表的序号是物理盘块号,从 0 开始,直至 N-1;N 为盘块总数。在每个表项中存放链接指针,即下一个盘块号。在该表中,凡是属于某一文件的第一个盘块号,或者说是每一条链的链首指针所对应的盘块号,均作为文件地址被填入相应文件的 FCB 的“物理地址”字段中。由于查找记录的过程是在内存中进行的,因而不仅显著地提高了检索速度,而且大大减少了访问磁盘的次数。由于分配给文件的所有盘块号都放在该表中,故把该表称为文件分配表 FAT(File Allocation Table)。
1.3.FAT技术
【链接分配】解决了连续分配的外部碎片和文件大小管理问题
显式链接分配:把隐式文件中的指针单独抽离出来
介绍:把用于链接文件到各物理块的的指针现实的存放在一张表中,即【文件分配表FAT】。一个磁盘只会建立一张【文件分配表FAT】。开机时,文件分配表放入内存并常驻内存
优点:方便文件拓展;不会有碎片化问题;外存利用率高;支持随机访问;相比隐式,显式在转换地址时不需要访问磁盘,访问率超高
缺点:占用一定存储空间
隐式链接分配:采用类似链表的结构
- 介绍:除文件最后一个盘块外,每个盘块中都会存有一个指向下一个盘快的指针,文件目录包括文件第一块的指针和最后一块的指针(像链表的结点)
- 优点:方便文件拖长;不会有碎片化问题;外存利用率高
- 缺点:只支持顺序访问,不支持随机访问,查找效率低;指向下一个盘块的指针也需要耗费销量的存储空闲
二.文件存储管理方法
一.空闲表法
空闲表法属于连续分配方式,与内存管理中的动态分区分配方式雷同。系统为外存上所有空闲区建立一张空闲表,记录每个空闲区的起始盘块号和盘块数。并可按首次适应、最佳适应等算法分配空闲区。
用一张表来记录磁盘中的空闲块,空间的回收和分配都只需要对该表进行操作即可
二.空闲链表法
将所有空闲盘区链接成一条空闲链表,有两种形式:空闲盘块链和空闲盘区链(每个盘区含若干个盘块)。
空闲盘块链: