操作系统 文件管理概述

概述

文件(File),诞生的目的是为了专门负责管理外存储器上的信息,使用户可以按文件名高效快速的存取信息而不用关心底层实现。

**文件是具有符号名的、在逻辑上具有完整意义的一组相关信息项的集合。**信息项是构成文件的基本单位,里面可以是字符,也可以是记录。一个文件包含文件体和文件说明。文件体是文件的真实内容。文件说明是操作系统管理文件所需的信息,包括文件名、文件内部标识、文件类型、存储地址、长度、权限、建立时间、访问时间等等。

文件的关键在命名,文件名是进程创建文件时确定的,创建后文件将独立于进程直到它被删除。当其他进程要使用文件时也要指定文件名,不同的操作系统对文件命名规则略有不同。

对文件根据不同的方式可做如下分类:

  1. 按性质用途分类:系统文件、库文件、用户文件
  2. 按保存期限分类:临时文件、档案文件、永久文件
  3. 按保护方式分类:只读文件、读/写保护文件、可执行文件、无保护文件
  4. UNIX类系统分类:普通文件、目录文件、设备文件

文件的结构

文件的结构指的是文件的组织形式,在用户角度角度来看文件称为文件的逻辑结构,因为用户只需要知道文件名就可以存取信息,无需知道文件实际位于的位置。而在实现的角度看则成为物理结构。

文件的逻辑结构

文件的逻辑结构主要分为两类:

  1. 有结构的记录式文件

    它是由一个以上的记录构成的,故称为记录式文件,其中的记录通常都是描述实体集的,有相同或不一的数据项,记录的长度可分为以下两类:

    • 定长记录

      指文件中所有记录的长度都相同,所有记录中的数据项都处于记录中的相同位置,具有相同的顺序和长度,文件长度用记录数目表示。定长记录的特点是处理方便,系统开销小,是目前较为常用的记录格式。

    • 变长纪录

      指文件中记录长度各不相同,一个记录中包含的数据项目可以是不同的。

  2. 无结构的流式文件

    文件体为字节流,不划分记录,这种文件一般使用顺序访问方式,并且每次读写访问可以指定任一数据的长度。流式文件可以看做是一种特殊的记录式文件。在UNIX系统中,所有文件都被看作是流式文件,即使是有结构的文件也当做流式文件处理。

文件的物理结构

文件的物理结构主要是指文件内部的组织形式,即如何在存储设备上存放。下面是几种常见的物理结构:

  1. 连续结构

    最普通的方法,即存放在连续编号的物理块上,只需知道文件其实块号和长度,就可以方便的进行文件的存取。连续结构是所有逻辑文件中存取效率最高的,但缺点是插入和删除较浪费时间,现在主要利用**事务文件(Transactor File)**记录,然后规定每隔一段时间就与主文件合并。这样就不用在每次插入、删除时都去移动文件所在的物理块。

  2. 链接结构

    类似于编程领域中的链表,也叫串联结构,即每个物理块都设置一个指针指向下一个物理块,只需知道第一个物理块号,就可以顺序找出所有的物理块。

  3. 索引结构

    在采用索引结构时,逻辑上连续的文件信息存放在不连续的物理块,每个文件都会有一张索引表,其中记录逻辑块号对应的物理块号,并将索引表的位置记录在文件的目录项中。

  4. 多个物理块索引表

    即多重的索引结构,其实现各不相同,如UNIX系统采用了3级索引结构。

文件目录

之前提到过,进程有PCB给系统提供必要信息,文件也有一个类似的结构,称为 文件控制块(FCB, File Control Block) ,文件控制块的有序集合称为文件目录。也就是说,文件目录是由FCB组成的,专用于文件的检索。因此FCB也称为目录项。

FCB一般包含三类信息:

  1. 基本信息:文件名、物理地址、长度、块数等
  2. 存储控制信息:读写权限、用户组等
  3. 使用信息:建立日期、修改日期、访问日期等

另外目录结构的组织方式直接影响文件的存取速度,曾经有过一级目录结构与二级目录结构,但现代操作系统中主要都是使用多级目录结构。这种目录结构像一颗倒置的树,所以也称为树型目录结构,从树根往下结点代表目录,叶结点则代表文件。

存储空间管理

要将文件保存到外存上,首先必须要知道存储空间的使用情况,即哪些物理块被使用了,哪些是空闲的。

因此文件系统必须对磁盘空间进行管理,外存空闲空间管理通常使用一种 磁盘分配表(Disk Allocation Table) 来实现。常用的方法有4种:

  1. 空闲区表

    将外存空间的一个连续未分配区域称为空闲区,操作系统会为磁盘上所有空闲区间建立一个空闲表,每个表项对应一个空闲区,空闲表中包含序号、空闲区的第一块块号、空闲块块数和状态等信息,这种方法适用于连续文件结构。

  2. 位示图

    在外存上建立一张位示图,记录文件存储器的使用情况,每一位对应存储器上的一个物理块。这种方法描述能力强,适用于各种物理结构。

  3. 空闲块链

    使每个空闲块含有指向下一个空闲物理块的指针,即构成链表,而头指针则置于特定位置。不需要磁盘分配表,较节省空间。

  4. 成组链接法

    UNIX系统使用的方法,让系统将空闲区分为若干组,每100个空闲块为一组,每组中的第一个空闲块中有指针指向下一组空闲组。这是一种成组后使用指针链接的方式。

文件的保护

文件系统保护文件的方式一般都是存取控制,即对不同用户给予规定的不同权限,以防止文件未经文件主同意被修改。为了保存不同用户对文件的访问权限,一般采用如下方法:

  1. 存储控制矩阵

    这是最简单的一种方法,即令一二维矩阵囊括所有用户对文件的访问权限,这一二维矩阵 M i j M_{ij} Mij指的是用户 i i i对文件 j j j的访问权限,实现比较简单,清晰。

    但实际上当用户数和文件数量都很大时,这个矩阵就要耗费非常多的空间,因此一般并不采用。

  2. 存取控制表

    这是矩阵的改进方式,由于文件一般只与少数用户有关,因此将用户分为三类: 文件主同组用户其他用户 。而不分开按每个用户存储,这样就可以节省巨大的空间。类UNIX系统就采用了这种方法。

  3. 用户权限表

    这其实算是存储控制表的另外一种实现,它是以用户组为单位,将文件集存入表中,而不是以文件的单位。但实际上大同小异。

  4. 密码,文件存储时加密,在访问时询问密码解密,安全性很高,但缺点是加密解密需要耗费大量的时间。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值