操作系统文件的逻辑结构及其文件目录

Posted bfhonor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统文件的逻辑结构及其文件目录相关的知识,希望对你有一定的参考价值。

一、文件的逻辑结构

  • 类似于数据结构的“逻辑结构”和“物理结构”。
    ①、如“线性表”就是一种逻辑结构,在用户角度看来,线性表就是一组有先后关系的元素序列,如:a,b, c, d, e ……
    ②、“线性表”这种逻辑结构可以用不同的物理结构实现,如:顺序表/链表。顺序表的各个元素在逻辑上相邻,在物理上也相邻;而链表的各个元素在物理上可以是不相邻的。因此,顺序表可以实现“随机访问”,而“链表”无法实现随机访问。
    ③、可见,算法的具体实现与逻辑结构、物理结构都有关(文件也一样,文件操作的具体实现与文件的逻辑结构、物理结构都有关)

(二)无结构文件

  • 按文件是否有结构分类,可以分为无结构文件、有结构文件两种。
  • 无结构文件 :文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如:Windows 操作系统中的 .txt 文件。
  • 文件内部的数据其实就是一系列字符流,没有明显的结构特性。

(三)有结构文件

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

1. 顺序文件

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

2. 索引文件

3. 索引顺序文件

(1)索引顺序文件(检索效率分析)

  • 若一个顺序文件有10000个记录,则根据关键字检索文件,只能从头开始顺序查找(这里指的并不是定长记录、顺序结构 的顺序文件),平均须查找 5000 个记录
  • 若采用索引顺序文件结构,可把 10000 个记录分为 √10000 = 100 组,每组 100 个记录。则需要先顺序查找索引表找到分组(共100个分组,因此索引表长度为 100,平均需要查 50 次),找到分组后,再在分组中顺序查找记录(每个分组100 个记录,因此平均需要查 50 次)。可见,采用索引顺序文件结构后,平均查找次数减少为 50+50 = 100 次
  • 同理,若文件共有 106个记录,则可分为 1000 个分组,每个分组 1000 个记录。根据关键字检索一个记录平均需要查找 500+500 = 1000 次。这个查找次数依然很多,如何解决呢?

(2)多级索引顺序文件

  • 为了进一步提高检索效率,可以为顺序文件建立多级索引表。例如,对于一个含 106个记录的文件,可先为该文件建立一张低级索引表,每 100 个记录为一组,故低级索引表中共有 10000 个表项(即10000个定记录),再把这 10000 个定长记录分组,每组100个,为其建立顶级索引表,故顶级索引表中共有 100 个表项。

二、文件目录

(一)文件控制块

  • 当我们双击“照片”后,操作系统会在这个目录表中找到关键字“照片”对应的目录项(也就是记录),然后从外存中将“照片”目录的信息读入内存,于是,“照片”目录中的内容就可以显示出来了。
  • FCB 的有序集合称为“文件目录”,一个FCB就是一个文件目录项
  • FCB 中包含了文件的基本信息文件名物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写、禁止访问的用户名单等),使用信息(如文件的建立时间、修改时间等)。
  • 最重要,最基本的还是 文件名、文件存放的物理地址FCB 实现了文件名和文件之间的映射。使用户(用户程序)可以实现“按名存取”
  • 需要对目录进行哪些操作?
    ①、搜索:当用户要使用一个文件时,系统要根据文件名搜索目录,找到该文件对应的目录项
    ②、创建文件:创建一个新文件时,需要在其所属的目录中增加一个目录项
    ③、删除文件:当删除一个文件时,需要在目录中删除相应的目录项
    ④、显示目录:用户可以请求显示目录的内容,如显示该目录中的所有文件及相应属性
    ⑤、修改目录:某些文件属性保存在目录中,因此这些属性变化时需要修改相应的目录项(如:文件重命名)

(二)目录结构

1. 单级目录结构

  • 早期操作系统并不支持多级目录,整个系统中只建立一张目录表,每个文件占一个目录项。

2. 两级目录结构

  • 早期的多用户操作系统,采用两级目录结构。分为主文件目录(MFD,Master File Directory)和用户文件目录(UFD,User Flie Directory)。

3. 多级目录结构(又称树形目录结构)

  • 用户(或用户进程)要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级目录之间用“/”隔开。从根目录出发的路径称为绝对路径
  • 例如:自拍.jpg 的绝对路径是 “/照片/2015-08/自拍.jpg
  • 系统根据绝对路径一层一层地找到下一级目录。刚开始从外存读入根目录的目录表;找到“照片”目录的存放位置后,从外存读入对应的目录表;再找到“2015-08”目录的存放位置,再从外存读入对应目录表;最后才找到文件“自拍.jpg”的存放位置。整个过程需要3次读磁盘I/O操作
  • 很多时候,用户会连续访问同一目录内的多个文件(比如:接连查看“2015-08”目录内的多个照片文件),显然,每次都从根目录开始查找,是很低效的。因此可以设置一个“当前目录”。
  • 例如,此时已经打开了“照片”的目录文件,也就是说,这张目录表已调入内存,那么可以把它设置为“当前目录”。当用户想要访问某个文件时,可以使用从当前目录出发的“相对路径” 。
  • 在 Linux 中,“.”表示当前目录,因此如果“照片”是当前目录,则”自拍.jpg”的相对路径为:“./2015-08/自拍.jpg”。从当前路径出发,只需要查询内存中的“照片”目录表,即可知道”2015-08”目录表的存放位置,从外存调入该目录,即可知道“自拍.jpg”存放的位置了。
  • 可见,引入“当前目录”和“相对路径”后,磁盘I/O的次数减少了。这就提升了访问文件的效率。
  • 树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构

4. 无环图目录结构

  • 可以用不同的文件名指向同一个文件,甚至可以指向同一个目录(共享同一目录下的所有内容)。
  • 需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。用户提出删除结点的请求时,只是删除该用户的FCB、并使共享计数器减1,并不会直接删除共享结点。
  • 只有共享计数器减为0时,才删除结点。
  • 注意:共享文件不同于复制文件。在 共享文件中,由于各用户指向的是同一个文件,因此只要其中一个用户修改了文件数据,那么所有用户都可以看到文件数据的变化。

(三)索引结点(FCB的改进)

  • 当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。
  • 存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”。
  • 相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件等

以上是关于操作系统文件的逻辑结构及其文件目录的主要内容,如果未能解决你的问题,请参考以下文章

操作系统| 文件管理(文件的结构目录管理的四个要求目录的检索技术)

Linux常见目录及其作用

文件管理-第一节2:文件的逻辑结构

QDir类及其用法总结

Linux目录与文件操作

Linux文件系统目录