文件逻辑结构、外存分配和空闲空间管理

一 文件的逻辑结构(组织方式):

(1)顺序文件:所有记录具有相同长度,并且由相同数目、长度固定的域按照特定的顺序组成(记录按关键字排序)。

*优点:通常用于批处理文件,即每次读或写一大批记录,顺序文件是最佳的;只有顺序文件才能存储在磁带上。

*缺点:对于查询或更新记录的交互式应用,顺序文件性能很差(在访问时,为了匹配关键字,需要顺序查找文件);增加或删除一个记录比较困难。


(2)索引文件:对主文件的每个记录(可以是变长的记录),索引表中设有一个相应的表项,用于记录该记录的长度L及指向该记录的指针。由于索引表本身是一个定长记录的顺序文件,从而可以方便的实现直接存取。

*检索过程:首先根据用户提供的关键字,并利用折半查找法去检索索引表,从中找到相应的表项;再利用该表项中给出的指向记录的指针值,去访问所需的记录。每当要向索引文件中增加一个新记录时,便需对索引表进行修改。

*优点:索引表具有较快的检索速度,因此主要用于对信息处理的及时性要求较高的场合。

*缺点:存储成本大。除了主文件,还需配置一张索引表,而且每个记录都要有一个索引项。

*如下图:



(3)索引顺序文件:是顺序文件和索引文件相结合的产物,最常见的一种逻辑文件方式,克服了变长记录不便于直接存取的缺点,而且付出的代价也不算太大。

*结构:将顺序文件所有记录分成若干个组;为顺序文件简历一张索引表,在索引表中为每组中的第一个记录建立一个索引项,其中含有该记录的键值和指向该记录的指针。

*检索过程:首先利用用户提供的关键字以及查找算法去检索索引表,找到该记录所在记录组中第一个记录的表项,从中得到该记录组第一个记录在主文件中的位置;然后利用顺序查找法去查找主文件,从中得到所要求的记录。

*如下图:



(4)直接文件(Hash文件):可根据给定的记录键值,直接获得指定记录的物理地址。

*特点:利用Hash函数,可将记录键值转换为相应记录的地址。通常由Hash函数所求得的并非是相应记录的地址,而是指向一目录表相应表目的指针,该表目的内容指向相应记录所在的物理地址。

*如下图:



外存分配:

*常用的三种文件分配方式:连续分配方式、链接分配方式、索引分配方式。

(1)连续分配方式:为每一个文件分配一组相邻接的盘块,一组盘快地址定义了磁盘上的一段线性地址。

*优点:顺序访问容易、快。

*缺点:要求有连续的存储空间,会产生许多外部碎片;必须实现知道文件的大小。


(2)链接分配方式:通过在每个盘块上的链接指针,将同属于一个文件的多个离散的盘块链接成一个链表,把这样形成的物理文件称为链接文件。

*优点:采用离散分配方式,消除了外部碎片,提高了外存空间利用率;无需知道文件的大小,可根据需要动态分配。

*缺点:局部性原理不在使用;不支持高效的直接存取(必须顺序查找)。


(3)索引分配:为每个文件分配一个索引块,再把分配给文件的所有盘块号都记录在该索引块中,因而索引块就是一个含有许多盘块号的数组。

*优点:支持随机访问;不会产生外部碎片;当文件较大时,由于链接分配方式。

*缺点:可能花费较多的外存空间,每建立一个文件时,便需为之分配一个索引块,将分配给该文件的所有盘块号记录于其中。


*支持多级索引和混合索引(多种索引分配方式相结合)如下图:




三 空闲空间管理:正如分配给文件的空间需要管理,当前还没有分配的空间也必须管理起来。

(1)位示图法:使用一个向量,向量的每一位对应于磁盘中的每一块。0:表示空闲块,1:表示已使用块。

*优点:很容易找到一个或一组连续的空闲块;位示图很小,占用空间少。常用语微型机或小型机中。


(2)空闲表法:类似于连续分配方式,系统为外存上的所有空闲去建立一张空闲表,每个空闲区对应于一个空闲表项,其中包括表项序号、该空闲区的第一个盘块号、该区的空闲盘块信息。如下图:


(3)空闲链表法:将所有空闲盘区拉成一条空闲链。根据构成链的基本元素不同分为:空闲盘块链和空闲盘块区。


(4)成组链接法:

*空闲表法和空闲链表法都不适用于大型文件系统,因为这会使空闲表和空闲链表太长。在UNIX中采用的是成组链接法,结合上述两种方法而形成的一种空闲盘块管理方法。































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值