美文网首页OS
文件管理基础&文件的逻辑结构

文件管理基础&文件的逻辑结构

作者: HRADPX | 来源:发表于2019-07-29 21:17 被阅读0次

    前言

      操作系统作为系统的资源的管理者,自然需要对计算机中的文件进行管理。如文件内存的数据是怎么组织起来的,文件与文件之间又应该怎么组织起来等。
      文件管理内容

      本文内容

    1 文件管理基础

      1.1 文件属性

      文件:就是一组有意义的信息或数据集合。
      文件的属性


    (1) 文件名:有创建文件的用户决定文件名,主要是方面用户找到文件,同一目录下不允许有重名文件
    (2) 标识符:一个系统内的各文件标识符唯一,对用户来说毫可读性,因此标识符只是操作系统用于区分各个文件的一种内部名称。
    (3) 类型:指明文件的类型。如txt、bat、xml等
    (4) 位置:文件存放的路径(让用使用)、在外存中的地址(操作系统使用,对用户不可见)。
    (5) 创建时间、最后修改时间...

      1.2 操作系统向上提供的功能

      操作系统提供了创建、修改、删除、读文件...功能。应用程序通过操作系统提供的不同的系统调用实现不同的功能。如可以创建文件,(点击新建后,图形化交互进程背后调用了操作系统的“create系统调用”)。可以“读文件”,将文件数据读入内存,才能让CPU处理。(对于记事本,双击后,记事本应用程序通过操作系统提供的读文件功能,即“read系统调用”,将文件数据从外存读入内存,并在显示在屏幕上)。



      通过这几个最基本的操作可以完成更加复杂的操作。如复制文件,先创建一个新的空文件,再把源文件读入内存,再将内存中的数据写到新文件中。

      1.3文件在外存中的存储

    2 文件的逻辑结构

      所谓的“逻辑结构”,就是指在用户看来,文件内部的数据应该是如何组织起来的。而“物理结构”指的是在操作系统看来,文件的数据是如何存放在外存中。
      按文件是否有结构分类,可以分为无结构文件、有结构文件两种。

      2.1 无结构文件

      无结构文件:文件内部的数据就是一系列二进制流或字符流组成。又称“流文件”。如Windows操作系统中的.txt文件。

      2.2 有结构文件

      有结构文件:由一组相似记录组成,又称“记录文件”。每条记录又由若干个数据项组成。如数据库表文件。一般来说,每条记录有一个数据项可作为关键字(作为识别不同的ID)。根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录可变记录两种。


      有结构文件中的各条记录在逻辑上如何组织,可以分为三类:顺序文件、索引文件、索引顺序文件
      2.2.1 顺序文件

      顺序文件:文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变的。各个记录在物理上可以顺序存储链式存储



      为了便于理解,下面看顺序存储的串结构和顺序结构的区别。假设一条学生记录占一个内存块,如下图所示

      下面对这两种存储分别考虑能够实现随机存储和快速找到某个关键字对应的记录存放位置?
      这两个结构都很熟悉,所以直接给出结论

    (1) 链式存储无论是定长还是可变长记录,都无法实现随机存取,每次只能从第一个记录开始依次往后开始查找。
    (2) 顺序存储的可变长记录,同样也无法实现随机存取。
    (3) 顺序存储的定长记录,可以实现随机存取。如果记录的长度为L,那么第i条记录的相对位置就是 i*L。
    (4) 顺序存储的串结构无法实现快速找到某个关键字对应的记录。因为串结构中记录不会按照关键字排序,而顺序结构可以实现快速找到某个关键字对应的记录(如折半查找)。

      下图同上


      对于顺序存储的定长记录,如果是串结构的话,由于不是按照关键字存储,所以无法实现快速找到某个关键字对应的记录。
      顺序文件(这里指的是物理上顺序存储的顺序文件,下同)的缺点:增加或删除一个记录比较困难(如果是串结构相对简单)。
      2.2.2 索引文件

      对于可变长记录文件,要找到第i个记录,就必须要先查找前i-1个记录,但是可变长在很多应用场景中又是必须的,所以就有了索引表。


      索引表本身是定长记录的顺序表。因此可以快速找到第i个记录对应的索引项。可将关键字作为索引号内容,若关键字顺序排列,还可以折半查找。
      每当要增加或删除一个记录时,需要对索引表进行修改。由于索引文件有很快的检索速度,因此主要用于对信息处理的及时性较高的场合。
      此外,可以用不同的数据项建立多个索引表。如学生信息表中,可以用关键字学号建立一张索引表,也可以使用姓名建立一张索引表。这样就可以根据姓名快速的检索文件了(类似数据库)。
      索引文件的缺点:每条记录对应一个索引表项,因此索引表可能会很大。如果文件每个记录平均只占8B,而每个索引表项占32个字节,那么索引表都要比文件内容本身大4倍,这样对存储空间的利用率太低了。
      2.2.3 索引顺序文件

      针对索引文件的缺点,引入索引顺序文件。索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但是不同的是,并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项
      下图,将按照学生姓名的首字母进行了分组,首字母相同的分为一组,索引表和分组内的记录都没有按照关键字排序。这样可以大大减少索引表所占的空间大小。


      如果一个顺序文件中有10000个记录,则根据关键字检索文件,只能从头开始查询,对于索引文件(未按关键字排序),平均需要查询5000次。而对于索引顺序文件,假设把10000个记录分为100组,索引顺序文件中就有100个记录项,平均需要查找50次定位到相应的组,再从组内平均查找50次得到结果,所以总共查询了100次。相对于索引文件减少了很多,但是如果记录文件很多的情况下,如有1000000条记录,平均分成1000组,平均也需要1000次查询,次数也很多,这种方案也不是很理想。
      为了进一步提高检索的效率,可以为顺序文件建立多级索引表。例如,对于一个含100W条记录的文件,可先为该文件建立一个低级索引表,每100个记录为一组,故低级索引表共有10000个表项(即10000个定长记录),再把这10000个定长记录分组,每组100个,为其建立顶级索引表,故顶级索引表共有100个表项。

      从上图可以看到,在100W条记录中查找某条记录,只需要150次,大大减少了查询次数。

    3 小结


      本文完

    相关文章

      网友评论

        本文标题:文件管理基础&文件的逻辑结构

        本文链接:https://www.haomeiwen.com/subject/tkabrctx.html