Linux操作系统:用户对文件的存取方法

文件的存取方法是由文件的性质和用户使用文件的方式决定的。按存取的顺序来分,通常有顺序存取和随机存取两类。

顺序存取严格按字符流或记录的排列次序依次存取。如在提供记录式文件结构的系统中,当前读取记录Ri,则下次要读取的记录自动地确定为Ri+1。随机存取允许按用户要求随意存取文件中的一个记录,下次要存取的记录和当前存取的记录间并不存在顺序关系。

1.顺序存取方法

对文件的大量操作是读和写。读文件操作是按照文件指针指示的位置读取文件的内容,并且文件指针自动地向前推进。类似地,写文件操作是把信息附加到文件的末尾,且把文件指针移到文件的末尾。可以把这样的文件看成一条信息带,按顺序存取。在早期的操作系统中这种方法是唯一的存取文件方法,所针对的存储介质是磁带,而不是磁盘。


Linux操作系统:用户对文件的存取方法

顺序存取定长记录文件

可用一个文件读写指针rp指向下一次要读出的记录的起始地址。当该记录读出后,对rp做相应的修改。例如,对定长记录文件,有

rpi+1= rpi + l

其中,l是记录长度。

对变长记录文件进行顺序存取时,每读、写一个记录之后,读写指针rp也同样要进行调整,指向下一个要存取的记录的起始地址。但由于各记录的长度不同,所以有如下关系:

rpi+1= rpi + li

其中,li是第i个记录的长度


Linux操作系统:用户对文件的存取方法

顺序存取变长记录文件

2.随机存取方法

随机存取也称作直接存取,它是基于磁盘的文件存取模式。对于定长记录文件来说,随机存取把一个文件视为一系列编上号的块或记录,通常每块的大小是一样的,它们被操作系统作为最小的定位单位。每块大小可以是1 B、512 B、1 024 B或其他数值,这取决于系统。


Linux操作系统:用户对文件的存取方法

随机存取定长记录文件

随机存取文件方式允许以任意顺序读取文件中的信息,例如,当前读取第14块,接着读取第53块、第7块等。随机存取方式主要用于对大批信息的立即访问,如对大型数据库的访问。当接到访问请求时,系统计算出信息所在块的位置,然后直接读取其中的信息。

进行随机存取时,先要设置读写指针的当前位置,可用专门的操作seek实现。然后,从这个位置开始读取文件内容。在随机方式下用户对文件的存取是逻辑操作,即从使用者的角度出发对文件进行操作,然后由操作系统将逻辑地址(或相对块号)转换为设备的物理地址(或物理块号),最后驱动设备进行相应操作。

3.其他存取方法

其他存取方法是建立在随机存取方法之上的。这些方法一般都包含对文件的索引构造。例如,对于变长记录结构的文件,通过计算从头至指定记录的长度来确定读写位移,这种方式很不方便。通常采用索引表组织方式。

每个文件有一个索引表。索引表是按记录号顺序排列的,每个表项有两个数据项:记录长度和指向该记录在文件空间中首地址的指针。

为了找到文件中的一个记录,利用记录号作为索引,可以很快找到表中的项,从而获取所需记录的首地址。当然,该表要占用一部分存储空间。


Linux操作系统:用户对文件的存取方法

直接存取变长记录文件的索引表结构

对于大型文件,索引文件本身也变得很大,需占用大量内存。

解决此问题的一种办法是建立二级索引,即主索引文件包含的项是指向次索引文件的指针,次索引文件包含的项才是指向实际数据项的指针。

例如,IBM的索引顺序存取方法(ISAM)使用一个小型的主索引,它指向次索引所在的磁盘块,二次索引块指向实际的文件块。若要找出特定的项,先对主索引进行二分法查找,它提供次索引文件的块号。读入这一块,再进行二分法查找,找到包含所要记录的块。

最后,顺序查找这些块。利用这种方法,至多两次直接存取就可以找出任意记录的位置。


分享到:


相關文章: