文件的物理结构(附脑图)

文件的物理结构涉及文件在文件存储器上的安排。文件结构表示了一个文件在辅存上的安置、链接和编目的方法。它和文件的存取方法以及辅存设备的特性等都有密切的关系。因此,在确定一个文件的结构时,必须考虑到文件的大小、记录是否定长、访问的频繁程度和存取方法等。

大多数在字符设备上传输的信息可作为连续文件看待。这种文件的信息是按线性为序存取的,这种方法在大多数磁带系统中常使用,是比较简单的文件结构。磁盘存储设备上具有较为复杂的文件组织。在磁盘表面按径向缩减的一组同心圆称为磁道(track) ,每一个磁道又可进一步分为扇区(sector) 。在磁盘系统中被转换的最小信息单位通常是一个扇区(或称为块)。磁盘的结构允许文件管理系统按三种不同的方法组织文件:连续文件、串联文件、随机文件结构

在这里插入图片描述

1. 连续文件(数组结构)

连续文件结构是由一组分配在磁盘连续区域的物理块组成的。连续文件存放到磁盘的连续的物理块上,若连续文件的逻辑记录大小正好与磁盘的物理块大小一样大(都为512B),那么一个磁盘块存放一个逻辑记录,而且存放连续文件的磁盘块号是连续的。连续文件的第一个逻辑记录所在的磁盘块号记录在该文件的文件目录项中,该目录项还需记录共有多少磁盘块。连续文件结构如图1所示。

图1 连续文件结构

图1中表示一个连续文件A,它由三个记录组成,这些记录被分配到物理块号为100、101、 102的相邻物理块中,这里假定文件的逻辑记录和物理块的大小是相等的(当然也可以是一个物理块包括几个逻辑记录或一个逻辑记录占有几个物理块)。对于这种文件结构,存取块中的一个记录是非常简单的。若给定记录号为 r r ,记录长度为 I I ,物理块大小为 s i z e size ,则相对块号计算为 b = I r / s i z e b=I*r/size .

连续文件结构的基本优点是在连续存取时速度较快,如果文件中第n个记录刚被存取过,而下一个要存取的是n+1个记录,则这个存取操作将会很快完成。当连续文件在顺序存取设备(或称为单一存储设备,如磁带)上时, 这一优点是很明显的。所以,存于磁带上的记录一般均采用连续结构。如果是直接存取设备(或称为多路存储设备,如磁盘),在多道程序情况下,由于其他用户可能驱使磁头移向其他柱面,因而就会降低这一优越性。所以,对于磁盘、磁鼓可以采用连续结构,也可采用非连续结构(后者更为好些)。

对于顺序处理的情况,顺序文件结构是一种最经济的结构方式。连续文件结构对于变化少、可以作为一个整体处理的大量数据段较为方便,而对那些变化频繁的少量记录不宜采用。而且,对于连续文件结构来说,其文件长度一经固定便不易改变,因而不利于文件的增生和扩充。

2.串联文件

2.1 串联文件结构(链表结构)

串联文件结构是按顺序由串联的块组成的,即文件的信息按存储介质的物理特性存于若干块中,一块中可包含一个逻辑记录或多个逻辑记录,也可以是若干物理块包含一个逻辑记录。每个物理块的最末一个字(或第一个字)作为链接字,它指出后继块的物理地址。文件的最后一块的链接字为结束标记“ \land ”,它表示文件至本块结束。串联文件结构如图2所示,一个文件A有三个记录,分别分配到100、150、 57号物理块中,它的第一个物理块号由该文件的文件目录项指出。

图2 串联文件结构

串联文件采用的是一种非连续的存储结构,文件的逻辑记录可以存放到不连续的物理块中,能较好地利用辅存空间。另外,还易于对文件进行扩充,即只要修改链接字就可将记录插入到文件中间或从文件中删除若干记录。

串联文件结构虽比较易于修改,但由于要存放链指针而需要一定的存储空间。对这类文件的存取都必须通过缓冲区,待得到链接字后才能找到下一个物理块的地址。所以,串联文件只适用于顺序存取方式,而不适用于直接存取方式。因为在直接存取时为了找到一个记录,文件必须从文件头开始一块一块查找,直到所需的记录被找到。

2.2 文件映照结构(静态链表结构)

在文件映照结构中,系统有一个文件映照图(以磁盘块号为序),图中每一个表项用来记录磁盘块号。每个文件的文件目录项中,用于描述文件物理结构的表项指向文件映照图中的某个位置,其内容为该文件的第一块, 其后的各块,在文件映照图中依次勾链,文件的最后一块用尾标记表示。文件映照结构如图3所示。其中,文件A占据了磁盘的第3、6、4和8块。

图3 文件映照结构

文件映照结构如同串联文件(块链接法) 一样,顺序存取时较快。文件映照图一般较大,不宜保存在主存中,因此,通常将其本身作为一个文件保存在磁盘中,需要时再每次送一块到主存在最坏的情况下,也可能要把文件映照图全部读入主存,才能找到一个文件在磁盘中的所有物理块。仅当表示文件的物理块的一些单元恰好在文件映照图的同一块中时,才能降低开销。由此可见,把每个文件所占的空间尽量靠近显然是有利的,而不应该将文件散布在整个磁盘上。

Windows系统的文件分配表( 即FAT表)是通过一一个链接列表(即文件映照结构)来
实现的。FAT是一个包含N个整数的列表,N是存储设备上最大的簇数(磁盘上最小可寻址存储单元称为扇区,通常每个扇区为512个字节(或字符)。由于多数文件比扇区大得多,因此如果对一个文件分配最小的存储空间,将使存储器能存储更多数据,这个最小存储空间即称为簇)。表中每个记录的位数称为FAT大小,是12、16或32三个数之一。感兴趣的读者可查阅有关的资料。

3. 随机文件

随机文件组织是实现非连续分配的另一种方案。在随机文件结构中,数据记录存放于直接存取型存储设备(如磁盘、光盘)上, 数据记录的关键字与其地址之间建立某种关系。随机文件的记录就是按这种关系排列、分布的,并利用这种关系进行存取。.有三种形式的随机文件结构:直接地址结构计算寻址结构索引结构。索引结构在第4节讨论。

3.1 直接地址结构

当知道某个记录的地址时,可直接使用这个地址进行存取。这意味着,用户必须知道每个记录的具体地址,这是很不方便的。因此,直接地址结构并不常用。当然在使用这种结构时,存取效率是最高的,因为不需要进行任何“查找”。在某些数据库系统中的“数据库码”,就是采用这种结构。

3.2 计算寻址结构—— 散列文件

在计算寻址结构方法中,记录的关键字经过某种计算处理,转换成相应的地址。这种计算方式就是通常所说的散列(hash, 也称为“杂凑”)。如果用以标识记录的关键字与记录地址之间存在一种直接关系,那么,利用这种关系实现记录存取的文件称为散列文件。

这种直接关系是通过关键字的变换来建立的。由于一般情况下,地址的总数比可能的关键字的值的总数要小得多,即不会是一对一的关系,因此不同的关键字在计算之后,可能会得出相同的地址,称为“冲突”。一种散列算法是否成功的一个重要标志,是看其将不同的关键字映射到同一地址的几率有多大,这个几率越小,则此散列算法的性能越好,即“冲突”产生的几率越小越好。

散列算法的基本思想是根据关键字来计算相应记录的地址,所以必须解决如下两个问题:其一,寻找一个hash函数h(k)实现关键字到地址的转换;其二,确定解决冲突的办法。

常用的散列算法如下。

  • 截段法,截取关键字的某一指定部分作为地址。这里之所以截段是为了缩小关键字的数值范围,且截取时应选择随机性较好的段。
  • 特征位抽取法,抽取关键字数码串的某些位并将其连接起来作为地址。这种方法既可起到缩小关键字数值范围的作用,又能更灵活有效地选择那些随机性较好的数位。
  • 除余法,把标识符除以某一数而取其余数作为地址。使用这种方法时,除数的选择很重要。例如,除数的大小可保证变换所得的地址范围落在给定的存储区内,而除数的性质与关键字的变换结果在存储区的分布及冲突情况多少密切相关。在许多情况下,选用质数作为除数
  • 折叠法,把关键字数码串分段,然后叠加起来作为地址。有时,还可把折叠后的结果再折叠。
  • 平方取中法,把关键字平方后取其结果的中间部分作为地址。

以上列举了五种变换方法,变换的方法形形色色,在此不再一一列举。但值得注意的是,不同的变换方法应针对不同情况加以选择。因为每一种变换方法都有自己的特点,一个独立变换对于关键字集合来说,在任何情况下总是好的这种情况并不存在。相对而言,在大部分情况下,除余法比别的办法好。

4. 索引文件

4.1 索引文件结构

为了能随机地访问文件的任何一部分,构造了索引文件。这种文件将逻辑文件顺序地划分成长度与物理存储块长度相同的逻辑块,然后为每个文件分别建立逻辑块号与物理块号的对照表。这张表称为该文件的索引表。用这种方法构造的文件称为索引文件。索引文件的索引项按文件逻辑块号顺序排列,而分配到的物理块号可以是不连续的。例如,某文件A有四个逻辑块,分别存放在物理块23、19、26、29中,该索引文件结构如图4所示。

图4 索引文件结构

索引文件在存储区中占两个区:索引区数据区。索引区存放索引表,数据区存放数据文件本身。访问索引文件需要两步操作。第一步是查文件索引,由逻辑块号查得物理块号:第二步是由此物理块号而获得所要求的信息。这样做需两次访问文件存储器。如果文件索引表已经预先调入主存,则只要一次访问就行了。

索引文件的优点是可以直接读写任意记录,而且便于文件的增删。当增加或删除记录时,应对索引表及时加以修改。由于每次存取都涉及索引表的查找,因此,所采用的查找策略对文件系统的效率有很大的影响。通常使用的查找策略有二分查找和顺序扫描两种。

4.2 索引表的组织

如果索引文件比较大,索引表项也就比较多,若按顺序表组织,索引表就会较长,查找不便。索引表的组织对文件系统的效率有很大的影响。下 面讨论三种索引表的组织结构。

1. 直接索引

  • 直接索引结构。在文件目录项中有一组表项用于索引,每一个表项登记的是逻辑记录所在的磁盘块号。直接索引文件的结构如图5 (图中的逻辑记录号实际上可以省略)所示。

图5 直接索引结构

  • 直接索引结构文件大小的计算。在直接索引结构中,文件目录项中用于索引的表项数目决定了文件最大的逻辑记录数,设表项数目为 n n ,逻辑记录大小为 512 B 512B ,则所允许的文件最大的字节数是 n 512 B n*512B 。在图5所示的直接索引结构中, n = 4 n=4 , 逻辑记录大小为 512 B 512B ,则所允许的文件最大的字节数是 4 512 B 4*512B 为了突破这一限制,提出了一级间接索引结构。

2. 一级间接索引

在一级间接索引结构中,利用磁盘块作为一级间接索引表块。若磁盘块的大小为
512B,用于登记磁盘块号的表项占用2B,这样,一个磁盘块可以登记256个表项。

  • 一级间接索引。文件目录项中有一组表项,其内容登记的是第一级索引表块的块号。第一级索引表块中的索引表项登记的是文件逻辑记录所在的磁盘块号。

图6 一级间接索引结构

  • 一级间接索引结构文件大小的计算。在一级间接索引结构中,若文件目录项中用于索引的表项数目为,逻辑记录大小为 512 B 512B ,则所允许的文件最大的字节数是 n 256 512 B ( n 512 B 2 B 512 B ) n*256*512B(n*\frac{512B}{2B}*512B) 。如图6所示的一级间接索引结构中, n = 4 n=4 , 逻辑记录大小为 512 B 512B ,则所允许的文件最大的字节数是 4 256 512 B 4*256*512B .为了进一步扩大文件的大小,增强文件系统的能力又提出了二级间接索引结构。

3. 二级间接索引

  • 二级间接索引。文件目录项中有一组表项,其内容登记的是第二级索引表块的块号。第二级索引表块中的索引表项登记的第一级索引表块的块号,第一级索引表项中登记的是文件逻辑记录所在的磁盘块号。二级间接索引文件的结构如图7所示(注:图中,省略了索引表以及存放记录的磁盘块的块号,省略了逻辑记录号)。

图7 二级间接索引结构

  • 二级间接索引结构文件大小的计算。在二级间接索引结构中,利用磁盘块作为一级间接和二级间接索引表块。每个磁盘块可以登记 256 256 个表项。.在二级间接索引结构中,若文件目录项中用于索引的表项数目为 n n ,逻辑记录大小为 512 B 512B ,则所允许的文件最大的字节数是 n 25 6 2 512 B ( n ( 512 B 2 B ) 2 512 B ) n*256^2*512B(n*(\frac{512B}{2B})^2*512B) 。在图7所示的二级索引结构中,所允许的文件最大的字节数是 4 25 6 2 512 B 4*256^2*512B .

为了进一步增强文件系统的能力,还可以提出了三级间接索引结构。但必须注意到,随着索引级数的增加,虽然能表示的文件逻辑记录数目增加了,但要检索到一个记录所需时间也增加了。在UNIX系统中,采用的是一种改进的索引表,使UNIX文 件系统使用方便且十分有效。

5. 文件物理结构比较

文件的物理结构和存取方法与系统的用途和物理设备特性密切相关。比如,慢速字符设备和磁带上的文件应组织为连续文件,故应采用顺序存取方法。很显然,在磁带上组织索引文件或串联文件不太合适,因为来回倒带定位花费的时间开销太大。对于磁盘(鼓)那样的设备,可以有多种结构和存取方法。

  • 连续文件的特点。连续文件的优点是不需要额外的空间开销,只要在目录中指出起始块号和文件长度,就可以对文件进行访问,且一次可以读出整个文件。对于固定不变且要长期使用的文件(比如系统文件),这是一种较为节省的方法。连续文件存在如下缺点。

    • 不能动态增长。因为在它后面如果已记录了别的文件,则这一文件增长就可能破坏后一文件。如果后移下一个文件,则系统开销太大,甚至不可能。
    • 一开始就提出文件长度要求,而要用户预先提出文件较准确的长度不是太容易的。
    • 一次要求比较大的存储空间,不一定好找。因为,如果辅存上只有许多小的自由空间,虽然其总容量大于文件要求,但由于不连续,因而这些空间可能被浪费。
  • 串联文件的特点。串联文件的优点是:可以较好地利用辅存空间;易于文件扩
    充。顺序存取较为方便。但存在如下缺点。

    • 在处理文件时若要进行随机访问,需要花费较大的开销,在时间上比较浪费。
    • 对块链接而言,每个块中都要有链接字,所以要占用一定的存储空间。
  • 随机文件的特点。随机文件是一种比较好的结构,综合了,上述两种方法的优点,既能有效地利用存储空间,又能方便地直接存取。其中索引文件结构应用比较广泛。在实现索引结构时应考虑如何有效地存储和访问索引表,使文件系统既能支持足够大的文件、又能够保证系统的响应时间。

猜你喜欢

转载自blog.csdn.net/qq_40791129/article/details/106296352