《操作系统》--文件管理

8.1 文件和文件系统

文件系统有两部分组成: 文件集合和目录

1.定义

文件是以计算机硬盘为载体的存储在计算机上的信息集合,在用户进行的输入、输出中,以文件位基本单位。

文件管理系统是实现的文件的访问、修改和保存,对文件维护管理的系统。

2. 文件的结构

  • 数据项:是文件系统中最低级的数据组织形式,可分为以下两种类型:
    • 基本数据项:用于描述一个对象的某种属性的一个值,是数据中的最小逻辑单位。
    • 组合数据项:由多个基本数据项组成。
  • 记录:是一组相关的数据项的集合,用于描述一个对象在某方面的属性。
  • 文件:一组信息的集合
  •     是指由创建者所定义的、具有文件名的一组相关元素的集合,分为有结构文件和无结构文件    两种。
    • 有结构的文件中,文件由若干个相似的记录组成,如一个班的学生记录;
    • 无结构文件则被视为一个字符流,比如一个二进制文件或字符文件。

文件主要属性:

文件类型、 文件长度、文件的物理位置、文件创建的时间

8.1.4 文件操作

 1. 最基本的文件操作:

 文件属于抽象数据类型。为了正确地定义文件,需要考虑可以对文件执行的操作。操作系统提供系统调用,它对文件进行创建、写、读、重定位、删除和截断等操作。

 创建文件(creat 系统调用)

  • 为新文件分配必要的外存空间;
  • 在目录 中为之创建一个目录项,目录项记录了新文件名、在外存中的地址及其他可能的信息。

删除文件(delete 系统调用)

  • 先从目录中检索指定文件名的目录项
  • 然后释放该文件所占的存储空间,以便可被其他文件重复使用,并删除目录条目。

读文件(read系统调用)

  • 对于给定文件名,搜索目录以查找文件位置。
  • 系统维护一个读位置的指针。
  • 每当发生读操作时,更新读指针。

写文件(write系统调用)

  • 对于给定文件名,搜索目录以查找文件位置。
  • 系统必须为该文件维护一个写位置的指针。
  • 每当发生写操作时,便更新写指针。

一个进程通常只对一个文件读或写,因此当前操作位置可作为每个进程当前文件位置的指针。

由于读和写操作都使用同一指针,因此节省了空间,也降低了系统复杂度。

设置文件的读/写位置(重新定位文件)

也称文件定位。搜索目录以找到适当的条目,并将当前文件位置指针重新定位到给定值。

重新定位文件不涉及读、写文件。

  • 截断文件

    允许文件所有属性不变,并删除文件内容,将其长度置为0并释放其空间。

2.文件的打开与关闭操作

打开文件(open系统调用)

  • 过程:调用open根据文件名搜索目录,将指明文件的属性(包括该文件在外存上的物理位置),从外存复制到内存打开文件表的一个表目中,并将该表目的编号(也称索引)返回给用户

打开文件时并不会把文件数据直接读入内存。“索引号”也称“文件描述符”

打开文件之后,对文件的操作不再需要每次都查询目录,可以根据内存中的打开文件表进行操作。

如上图所示,在多个不同进程同时打开文件的操作系统中,通常采用两级表:整个系统表和每个进程表。

  • 整个系统的打开文件表包含FCB的副本及其他信息。
  • 每个进程的打开文件表根据它打开的所有文件,包含指向系统表中适当条目的指针。

一旦有进程打开了一个文件,系统表就包含该文件的条目。当另一个进程执行调用open时,只不过是在其文件打开表中增加一个条目,并指向系统表的相应条目

  • 关闭文件(close系统调用)

    • 1.将进程的打开文件表相应表项删除
    • 2.回收分配给该文件的内存空间等资源
    • 3.系统打开文件表的打开计数器count减1,若count=0,则删除对应表项。

系统打开文件表为每个文件关联一个打开计数器(OpenCount),以记录多少进程打开了该文件。

文件名不必是打开文件表的一部分因为一且完成对FCB在磁盘上的定位,系统就不再使用文件名。对于访问打开文件表的索引,UNIX称之为文件描述符,而Windows称之为文件句柄。
因此,只要文件未被关闭,所有文件操作就通过打开文件表来进行

其他文件操作

4.文件的保护

8.2.0   文件控制块和索引节点

文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取"。

操作系统通过文件控制块(FCB)来维护文件元数据。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。下图为一个典型的FCB。

FCB包含以下信息:

  • 基本信息:如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等。
  • 存取控制信息:包括文件主的存取权限、核准用户的存取权限以及一般用户的存取权限。
  • 使用信息:如文件建立时间、上次修改时间等。

一个文件目录也被视为一个文件,称为目录文件。

FCB的有序集合称为文件目录。

2.索引节点

在检索目录时,只用到了文件名,因此有的系统采用文件名与文件描述分开的方法,使文件描述信息单独形成一个称为索引结点的数据结构,简称 i 结点(inode)。

​ 在文件目录中的每个目录项仅由文件名和指向该文件所对应的i结点的指针构成。

假设一个FCB为64B,盘块大小是1KB,则每个盘块中可以存放16个FCB(FCB必须连续存放),若一个文件目录共有640个FCB,则查找文件平均需要启动磁盘20次。

而在UNIX系统中,一个目录项仅占16B,其中14B是文件名,2B是 i 结点指针。在1KB的盘块中可存放64个目录项。这样,可使查找文件的平均启动磁盘次数减少到原来的1/4,大大节省了系统开销。

磁盘索引节点

它是指存放在磁盘上的索引结点。每个文件有一个唯一的磁盘索引结点,主要包括以下内容:

  • 文件主标识符,拥有该文件的个人或小组的标识符。

  • 文件类型,包括普通文件、目录文件或特别文件。

  • 文件存取权限,各类用户对该文件的存取权限。

  • 文件物理地址,每个索引结点中含有13个地址项,即iaddr(0)~iaddr(12),它们以直接或间接方式给出数据文件所在盘块的编号。

  • 文件长度,指以字节为单位的文件长度。

  • 文件链接计教,在本文件系统中所有指向该文件的文件名的指针计数。

  • 文件存取时间,本文件最近被进程存取的时间、最近被修改的时间及索引结点最近被修改的时间。

内容索引节点

它是指存放在内存中的索引结点当文件被打开时,要将磁盘索引结点复制到内存的索引结点中,便于以后使用。在内存索引结点中增加了以下内容:

  • 索引结点编号,用于标识内存索引结点。
  • 状态,指示 i 结点是否上锁或被修改。
  • 访问计数,每当有一进程要访问此 i 结点时,计数加1;访问结束减1。
  • 逻辑设备号,文件所属文件系统的逻辑设备号。
  • 链接指针,设置分别指向空闲链表和散列队列的指针。

8.2  文件的逻辑结构

 文件的逻辑结构是从用户观点出发看到的文件的组织形式。文件的物理结构(存储结构)是从实现观点出发看到的文件在外存上的存储组织形式。

​ 文件的逻辑结构与存储介质特性无关,它实际上是指在文件的内部,数据逻辑上是如何组织起来的。

  1. 无结构文件(流式文件)

    无结构文件将数据按顺序组织成记录并积累、保存,它是有序相关信息项的集合,以字节(Byte)为单位。

    • 只能通过穷举搜索的方式访问记录。

    • 其管理简单,用户操作方便。

    • 对基本信息单位操作不多的文件适于采用字符流的无结构文件。例如源程序文件、目标代码文件等。

  1. 有结构文件(记录式文件)

    • 顺序文件

      文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。

      各个记录在物理上可以顺序存储或链式存储。

      • 链式存储:无论是定长何变长记录,都无法实现随机存取,每次只能从第一个记录开始依次往后查找

      • 顺序存储:

        可实现随机存取,记录长度为L,则第ⅰ个记录存放的相对位置是i*L

        若采用串结构,记录之间的顺序与关键字无关,无法快速找到某关键字对应的记录

        若采用顺序结构,可以快速找到某关键字对应的记录(如折半查找)

      定长记录的顺序文件,若物理上采用顺序存储,则可实现随机存取:若能再保证记录的顺序结构,则可实现快速检索(即根据关键字快速找到对应记录)

      优点:读写一大批文件时,效率最高。适用于顺序存储设备(磁带)

      缺点:不方便增加、删除记录

2.索引文件

索引表:高效查询变长记录文件。索引表本身是定长记录的顺序文件,因此可以快速找到第ⅰ个记录对应的索引项。

3.索引顺序文件

索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项

  • 将记录分组,每组对应一个素引表项
  • 检素记录时先顺序查索引表,找到分组,再顺序查找分组
  • 当记录过多时,可建立多级素引表

8.3 文件的物理结构

文件的物理结构即文件的存储结构,就是研究文件的实现,即文件数据在物理存储设备上是如何分布和组织的。

​ 文件分配对应于文件的物理结构,是指如何为文件分配磁盘块。常用的磁盘空间分配方法有三种:连续分配、链接分配和索引分配。

1.连续分配

连续分配方法要求每个文件在磁盘上占有一组连续的块。磁盘地址定义了磁盘上的一个线性排序,这种排序使作业访问磁盘时需要的寻道数和寻道时间最小。

注:会产生外部碎片

  • 访存次数:访问第n条记录需访问磁盘1次

2.链接分配

接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。

访问第n条记录需访问磁盘n次

隐式链接

除文件的最后一个盘块之外每个盘块中都存有指向下一个盘块的指针。文件目录包括文件第一块的指针和最后一块的指针

采用隐式链接的链接分配方式,很方便文件拓展。另外,所有的空闲磁盘块都可以被利用,不会有碎片问题,外存利用率高

显示链接

把用于链接文件各物理块的指针显式地存放在文件分配表(FAT)中。一个磁盘只会建立一张文件分配表。开机时文件分配表放入内存,并常驻内存

采用链式分配(显式链接)方式的文件,支持顺序访问,也支持随机访问(想访问ⅰ号逻辑块时,并不需要依次访问之前的0~i-1号逻辑块),由于块号转换的过程不需要访问磁盘,因此相比于隐式链接来说,访问速度快很多。

文件分配表:FAT不仅记录了文件分配信息(显示链接),还“兼职”做了空闲块管理

3.索引分配

 索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。

索引表的 逻辑块号 可以是隐含的,进一步节约空间;

链接方案

如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。

缺点:需要顺序访问,当文件很大时,查找效率低下

多级索引

多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。

采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作

缺点:即使是小文件,访问数据块也需受K+1次读磁盘

混合索引

多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。

允许的文件最大长度:设有N0个直接地址项;N1个一次间接地址项;N2个二次间接地址项;每个盘块大小M字节;盘块号占m个字节,公式如下:

优点:对于小文件,只需较少的读磁盘次数就可以访问目标数据块。(一般计算机中小文件更多)

单个文件的逻辑结构和物理结构之间是否存在某些制约关系?

        文件的逻辑结构是用户可见的结构,即从用户角度看到的文件的全貌。文件的物理结构是文件在存储器上的组织结构。它和文件的存取方法以及存储设备的特性等都有着密切的联系。单个文件的逻辑结构和物理结构之间虽无明显的制约或关联关系,但是如果物理结构选择不慎,也很难体现出逻辑结构的特点,比如一个逻辑结构是顺序结构,而物理结构是隐式链接结构的文件,即使理论上可以很快找出某条记录的地址,而实际仍需在磁盘上一块一块地找。
       学到这里时,读者应能有这样的体会:现代操作系统的思想中,处处能见到面向对象程序设计的影子。本节我们学习的一个新概念一—文件,实质上就是一个抽象数据类型,也就是一种数据结构,若读者在复习操作系统之前已复习完数据结构,则遇到一种新的数据结构时,一定会有这样的意识:要认识它的逻辑结构、物理结构,以及对这种数据结构的操作

8.3  文件目录

文件目录是一种数据结构,用于标志系统中的文件及其物理地址。

对目录管理要求:

 1 .按名存取

  2. 提高对目录的检索速度

  3. 文件共享

  4. 允许文件重名

8.3.1 文件控制块和索引节点        

1.文件控制块

用于描述和控制文件的数据结构,文件管理程序可以借助FCB中的信息对文件进行操作,文件与FCB一一对应,人们把FCB的有序集合称为文件目录,即一个FCB就是一个文件目录项,

通常一个文件目录也被看作一个文件,称为目录文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值