操作系统之文件管理

文件管理,由于系统的内存有限并且不能长期保存,故平时总是把它们以文件的形式存放在外存中,需要时再将它们调入内存。如何高效的对文件进行管理是操作系统实现的目标。

文件系统管理的对象有文件目录磁盘。还提供文件共享与保护以及方便的接口

1、文件

文件系统的管理功能是通过把它所管理的程序和数据组织成一系列文件的方法来实现的。

文件则是指具有文件名的若干相关元素的集合。元素通常是记录,而记录是一组有意义的数据项的集合。

一个文件可对应若干个记录,一个记录可对应若干个数据项。

1)文件属性

①名称:文件名称唯一,以容易读取的形式保存。

②标识符:标识文件系统内文件的唯一标签,通常为数字,它是对人不可读的一种内部名称。

③类型:被支持不同类型的文件系统所使用。

④位置:指向设备和设备上文件的指针。

⑤大小:文件当前大小(用字节、字或块表示),也可包含文件允许的最大值。

⑥保护:对文件进行保护的访问控制信息。

⑦时间、日期和用户标识:文件创建、上次修改和上次访问的相关信息,用于保护、 安全和跟踪文件的使用。
2)基本操作

      ① 创建文件,在创建一个新文件时,系统首先要为新文件分配必要的外存空间,并在文件系统的目录中,为之建立一个目录项,目录项中应该记录新文件的文件名及其在外存的地址等属性。

  ② 删除文件,当已不再需要某文件时,可将其从文件系统中删除,在删除时,系统应先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。

  ③ 读文件,读文件时,须在相应系统调用中给出文件名和应读入的内存目标地址。此时,系统要查找目录,找到指定目录项,从中得到被读文件在外存中的位置。在目录项中,还有一个指针用于对文件进行读/写。

  ④ 写文件,写文件时,须在相应系统调用中给出文件名和其在内存源地址。此时,系统要查找目录,找到指定目录项,从再利用目录中的写指针进行写操作。

  ⑤ 截断文件,如果一个文件的内容已经陈旧而需要全部更新时,一种方法是将此文件删除,再重新创建一个新文件,但如果文件名和属性均无改变,则可采取截断文件的方法,其将原有的文件长度设置为0,放弃原有文件的内容。

  ⑥ 设置文件的读/写位置,用于设置文件读/写指针的位置,以便每次读/写文件时,不需要从始端开始而是从所设置的位置开始操作。可以改顺序存取为随机存取。
3)文件的打开和关闭

关闭文件则归还了文件的使用权。

4)文件逻辑结构(从用户角度看

有结构文件(记录文件)和无结构文件(流文件)。

组织形式有:

  •  顺序文件:适用于批量操作,不利于添加和删除。
  • 索引文件:定长和变长。索引表与文件一一对应。通过在索引表中找到符合的关键字,后通过对应的指针,找到指向的文件。优点就是拥有较快的检索速度,适合用于对及时性要求比较高的场合。
  • 索引顺序文件:为顺序文件建立索引项。
  • 直接文件:对于直接文件,则根据给定的记录键值,直接获得指定记录的物理地址,换言之,记录键值本身就决定了记录的物理地址,这种由记录键值到记录物理地址的转换被称为键值转换。
  • 哈希文件:利用Hash函数可将记录键值转换为相应记录的地址,为了能实现文件存储空间的动态分配,通常由Hash函数所求得的并非是相应记录的地址,而是指向一目录表相应表目的指针,该表目的内容指向相应记录所在的物理块。 

5)物理结构

文件的物理结构

    文件的物理结构是指文件在存储设备上的存放方法。文件的物理结构侧重于提高存储器的利用效率和降低存取时间。文件的存储设备通常划分为大小相同的物理块,物理块是分配和传输信息的基本单位

    文件的物理结构涉及文件存储设备的组块策略和文件分配策略,决定文件信息在存储设备上的存储位置。常用的文件分配策略有:

    (1)顺序分配(连续分配)。这是最简单的分配方法。在文件建立时预先分配一组连续的物理块,然后,按照逻辑文件中的信息(或记录)顺序,依次把信息(或记录)按顺序存储到物理块中。这样,只需知道文件在文件存储设备上的起始位置和文件长度,就能进行存取,这种分配方法适合于顺序存取,在连续存取相邻信息时,存取速度快。其缺点是在文件建立时必须指定文件的信息长度,以后不能动态增长,一般不宜用于需要经常修改的文件。

    (2)链接分配(串联分配)。这是按单个物理块逐个进行的。每个物理块中(一般是最后一个单元)设有一个指针,指向其后续连接的下一个物理块的地址,这样,所有的物理块都被链接起来,形成一个链接队列。在建立链接文件时,不需要指定文件的长度,在文件的说明信息中,只需指出该文件的第一个物理块块号,而且链接文件的文件长度可以动态地增长。只调整物理块间的指针就可以插入或删除一个信息块。

    链接分配的优点是可以解决存储器的碎片问题,提高存储空间利用率。由于链接文件只能按照队列中的链接指针顺序查找,因此搜索效率低,一般只适用于顺序访问,不适用于随机存取。

    (3)索引分配。这是另一种对文件存储不连续分配的方法。采用索引分配方法的系统,为每一个文件建立一张索引表,索引表中每一表项指出文件信息所在的逻辑块号和与之对应的物理块号。

    索引分配既可以满足文件动态增长的要求,又可以方便而迅速地实现随机存取。对一些大的文件,当索引表的大小超过一个物理块时,会发生索引表的分配问题。一般采用多级(间接索引)技术,这时在由索引表指出的物理块中存放的不是文件存放处而是存放文件信息的物理块地址。这样,如果一个物理块能存储 n 个地址,则一级间接索引将使可寻址的文件长度变成 n2 块,对于更大的文件可以采用二级甚至三级间接索引(例如,UNIX 操作系统采用三级索引结构,如图所示)。

操作系统之文件管理

    索引文件的优点是既适用于顺序存取,又适用于随机存取。缺点是索引表增加了存储 空间的开销。另外,在存取文件时需要访问两次磁盘,一次是访问索引表,另一次是根据索引表提供的物理块号访问文件信息。为了提高效率,一种改进的方法是,在对某个文件进行操作之前,预先把索引表调入内存。这样,文件的存取就能直接从内存的索引表中确定相应的物理块号,从而只需要访问一次磁盘。

2 目录

为了能够对文件实施有效的管理,必须对它们加以妥善组织,这主要是通过文件目录实现的,文件目录也是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用,对目录的管理要求如下:

  ① 实现按名存取,即用户只须向系统提供所需访问的文件的名字,便能够快速准确地找到指定文件在外存上的存储位置,这是目录管理中最基本的功能。

  ② 提高对目录检索速度,通过合理地组织目录结构的方法,可加快对目录的检索速度,从而提高对文件的存取速度。

  ③ 文件共享,在多用户系统中,应该允许用户共享一个文件。

  ④ 允许文件重名,系统应允许不同用户对不同文件采用相同的名字,以便用户按照自己的习惯给文件命名和使用文件。

1)文件控制块:在文件系统内部给每个文件惟一 地设置一个文件控制块,它用于描述和控制文件的数据结构,与文件一一对应。

2)文件目录:文件控制块的有序集合。

3)目录项:文件目录中的一个文件控制块。

4)目录文件:完全由目录项构成的文件。

目录结构

      1)单级目录: DOS2.0版本以下采用,全部文件都登记在同一目录中。优点是简单,缺点是无法防止重名或被刪,安全保密性差,目前已淘汰。

      2)二级目录:为每个用户单独建立一个目录,各管辖自己下属的文件。产生于多用户分时系统,DOS2.0 版本以上采用,文件主目录(MFD)的表目按用户分,每个用户有一个用户文件目录(UFD)。优点是允许重名,提高搜索速度,缺点是不太适合大量用户和大量文件的大系统。

    3)树形目录:多级目录结构的一种形式,形同一棵倒置的树。产生于UNIX操作系统,已被现代操作系统广泛采用。目录与文件在一起,目录也做成文件。操作系统中每一名字由“全路径”能确定唯一文件,有根/茎/叶(端头)层次关系概念。,

      4)非循环图目录:以称带链接的树形目录,访问同一文件(或目录)可以有多条路径。UNIX的文件系统是树型结构,而且是带链接的树型结构。

路径名

      在树型目录中,同一目录中的各个文件不能同名,但不同目录中的文件可以同名。例如树型图中目录/usr中都有名字为fp的项,但是它们代表了不同的文件。文件路径名有两种表示形式:绝对路径名和相对路径名。

      1)绝对路径名(全路径名) :是从根目录开始到达所要查找文件的路径。例如,在UNIX系统中,以“1”表示根目录。 图中两个fp文件的绝对路径名是: (root)/usr/fp; (root)/us/m1/prog/fp;

      2)相对路径名:系统为每个用户设置一个当前目录(又称工作目录),访问某个文件时,就从当前目录开始向下顺次检索。例如,如图当前目录是usr,则有:

        (root) /usr/fp;(绝对路径名)

        fp; ( 当前路径省略路径名)
       ( root) /usr/m1/prog/fp;  (绝对路径名)

        ml/prog/fp; ( 相对路径名)

目录查询方法

       线性检索法;hash方法。

3 磁盘

文件存储设备管理,就是操作系统要有效地进行存储空间的管理。由于文件存储设备是分成许多大小相同的物理块,并以块为单位交换信息,因此,文件存储设备的管理实质上是对空闲块的组织和管理问题。它包括空闲块的组织,空闲块的分配与空闲块的回收等问题。有3种不同的空闲块管理方法,它们分别是索引法、链接法和位示图法。

    (1)索引法。索引法把空闲块作为文件并采用索引技术。为了有效,索引对应于一个 或由几个空闲块构成的空闲区。这样,磁盘上每一个空闲块区都对应于索引表中一个条目,这个方法能有效地支持每一种文件分配方法。

    (2)链接法。链接法使用链表把空闲块组织在一起,当申请者需要空闲块时,分配程序从链首开始摘取所需的空闲块。反之,管理程序把回收的空闲块逐个挂入队尾,这个方法适用于每一种文件分配方法。空闲块的链接方法可以按释放的先后顺序链接,也可以按 空闲块区的大小顺序链接。后者有利于获得连续的空闲块的请求,但在分配请求和回收空闲块时系统开销多一点。

    (3)位示图法。该方法是在外存上建立一张位示图(Bitmap),记录文件存储器的使用情况。每一位仅对应文件存储器上的一个物理块,取值0 和1 分别表示空闲和占用。文件存储器上的物理块依次编号为:0、1、2、…。假如系统中字长为32位,有4096个物

理块,那么在位示图中的第1个字对应文件存储器上的0、1、2、…、31号物理块;第2 个字对应文件存储器上的32、33、34、…、63号物理块;第128字对应文件存储器上的4064、4065、…、4095号物理块。这样位示图的大小为32字。

    位示图是利用二进制的一位来表示磁盘中一个盘块的使用情况,如图所示。当其 值为“0”时,表示对应的盘块空闲;为“1”时表示已分配。由所有盘块对应的位构成一个集合,称为位示图。位示图也可描述为一个二维数组map:Varmap:array[1.…m,1.…n]of bit;
操作系统之文件管理

参考文件:

https://blog.****.net/hu19930613/article/details/81368520

https://blog.****.net/liushengxi_root/article/details/80950916