文件管理

xiaoxiao2021-02-28  139

文件管理是对外部存储设备上以文件方式存放的信息的管理 。

逻辑组织

逻辑组织是为了方便用户的使用,是用户可见的结构。文件的逻辑结构可以分为无结构的字符流文件和有结构的记录文件两种。

(1)连续结构:把记录按生成的先后顺序排序,但搜索性差。可用于所有文件。

(2)多重结构:多重文件把记录按键和记录名排列成行列结构,一个包含n个记录名、m个键的文件构成一个mxn维行列式。

(3)转置结构:把含有相同键的记录指针全部指向该键,也就是说,把所有与同一键对应的记录的指针连续地置于目录中该键的位置下。转置结构最适合于给定键后的记录搜索。

(4)顺序结构:顺序结构把文件中的键按规定的顺序排序起来。

物理组织

文件的物理结构是指文件在存储设备上的存储方法。

(1)连续文件(顺序文件):它把一个在逻辑上连续的文件信息依次存放到物理块中。连续文件的优点是一旦知道文件在文件存储设备上的起始位置和文件长度,就能进行存取,连续文件适合顺序存取,在连续存取相邻信息时,存取速度快,其缺点是在文件建立时必须指定文件的信息长度,以后不能动态增长,一般不宜于需要经常修改的文件。

(2)串联文件(链接文件):用非连续的物理块来存放文件信息,这些物理块之间没有顺序关系,其中每个物理块设有一个指针,指向下一个物理块的地址,可以提高空间利用北,但不适用于随机存取。

(3)索引文件:为每个文件建立一张索引表,索引表中的每一表项指出文件信息所在逻辑块号和与之对应的物理块号。索引文件始可以满足动态增长的要求,又可以方便而迅速地实现随机存取。当索引表的大小超过一个物理块时,会发生索引表的分配问题,一般采用多级(间接索引)技术。另外,在存取文件时至少访问两次磁盘,一次是访问索引表,另一次是根据索引用提供的物理块号访问文件信息。为了提高效率,一种改进的方法是在对某个文件进行操作之前,预先把索引表调入内存,这样,文件的存取就能直接在内存的索引表中确定相应的物理块号,从而只需要访问一次磁盘。

 

目录结构

文件控制块的集合称不文件目录,文件管理的一个重要方面是对文件目录进行组织和管理。文件系统一般都采用一级目录结构、二级目录结构和多级目录结构。在Windows系统中,FAT32支持的单个文件的最大容量为4GB,NTFS支持的超过4GB,FAT32支持的分区的大小最大为32GB,NTFS支持的分区大小可以达到2TB。

 

 

存储空间管理 

由于文件存储设备是分成许多大小机同的物理块,并以块为单位交接信息,因此,文件存储设备的管理实质上是对空闲块的组织和管理问题。

(1)空闲表法:空闲表法属于连续分配,系统为外存上的所有空闲区建立一张空闲表,每个空闲区对应一个空闲表项,包括序号、第一空闲盘块号和空闲盘块数。

(2)空闲链表法:将所有空闲盘区拉成一条空闲链,根据构成链所用的基本元素的不同,可以把链表分成两种形式:

空闲盘块链:将磁盘上所有空闲空间以盘块为单位拉成一条链,当用户因创建文件而请求分配存储空间时,系统从链首开始,依次摘下适当数目的空闲盘块链给用户。当用户因删除文件而释放存储空间时,系统将回收和盘块依次插入空闲盘块链的末尾。空亲盘块链分配和回收一个盘块的过程非常简单,但在为一个文件分配盘块时,可能要重复多次操作。空闲盘区链:将磁盘上所有空闲盘区拉成一条链,在每个盘区上包含若干用于指示下一个空闲盘区的指针,指明盘区大小的信息。分配盘块时,通常采用首次适应算法(显式链接法)。在回收时,要将回收区与空闲盘区相合并。

(3)位图法:用二进制位表示磁盘中的一个盘块的使用情况,0表示空闲,1表示已分配。磁盘上所有盘块都与一个二进制位相对应,由所有的二进制位构成的集合称为位图。

(4)成组链接法:是指将空闲表和空闲链表法结合形成的一种空闲盘块管理方法,适用于大型文件。是Unix系统中常见的管理空闲盘区的方法,它把空闲块分为若干组,每100个空闲块为一组,每组的第一个空闲块记录空闲总数和下一组物理空闲的物理盘块号。它克服了空闲链表法表太长的缺点,但是保持了其优点,即分配和回收一个盘块比较简单。

左边绿色的空闲盘块号栈,这是第一组(唯一进入内存的一组),s.free=100表示该组有100个空闲块数目,再往下看,第0号对应的是300,表示下组物理空闲块的物理盘块号为300,再看黄色的块,这些块里保存的才是真正的可用的空闲块,也就是说每组中只有99块可用。特别要注意的是,最后一组的下一组盘块事情不是没有么,我们这里采用的是结束标记0,也就是最右边的蓝色块的第二项为0。

 

磁盘分配过程:

首先检查空闲盘块号(第一组)是否已上锁(这是临界资源),若已上锁则进程睡眠等待,否则,给空闲磁盘块号栈上锁后,将S.free-1,若S.free仍大于0,即第一组不止一个空闲盘块,则将s_free[s_nfree]中登记的空闲块分配出去;若S.free为0,即当前空闲盘块号栈中只剩下最后一个空闲盘块,必须先将盘块的内容读入超级块的空闲盘块号栈中,然后再将该盘块分配出去。若s_nfree为0,而且栈底登记的盘块号为0,则表示系统中无空闲盘块可分配。 

 

磁盘回收过程:

系统回收空闲盘块时,若第一组不满100块,则只需将回收的块号填入超级块的空闲盘块号栈栈顶,并将其中的空闲盘块数加1;若第一组已有100块,则必须将超级块中的空闲盘块数和空闲盘块号写入回收块中,然后将盘块数1和回收块号记入超级块中。

 

最后欢迎大家访问我的个人网站:1024s

 

 

转载请注明原文地址: https://www.6miu.com/read-23764.html

最新回复(0)