OS知识点汇总(考研用)——第四章:文件管理

OS知识点汇总(考研用)——第四章:文件管理

 本文参考于《2021年操作系统考研复习指导》(王道考研),《计算机操作系统教程》

  思维导图:
在这里插入图片描述

4.文件管理

4.1 文件系统基础

 4.1.1 文件的概念
  1.文件的定义

  文件(File)是以计算机硬盘为载体的存储在计算机上的信息集合, 文件可以是文本文档、图片、程序等。在系统运行时,计算机以进程为基本单位进行资源的调度和分配;而在用户进行的输入、输出中,则以文件为基本单位。 大多数应用程序的输入都是通过文件来实现的,其输出也都保存在文件中,以便信息的长期存储及将来的访问。当用户将文件用于应用程序的输入、输出时,还希望可以访问文件、修改文件和保存文件等,实现对文件的维护管理,这就需要系统提供一个文件管理系统,OS中的文件系统(File System)就是用于实现用户的这些管理要求的。OS中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关的软件、被管理文件及实施文件管理所需的数据结构。
  文件系统要完成的功能有:
  对于用户而言,文件系统最主要的功能是实现对文件的基本操作,让用户可以按名存储和查找文件,组织成合适的结构,并应当具有基本的文件共享和文件保护功能。对于OS本身而言,文件系统还需要管理与磁盘的信息交换,完成文件逻辑结构和物理结构上的变换,组织文件在磁盘上的存放,采取好的文件排放顺序和磁盘调度方法以提升整个系统的性能。
  文件究竟由哪些东西组成:
  首先,文件中肯定包括一块存储空间,更准确的说,是存储空间中的数据;其次,由于OS要管理成千上万的数据,因此必定需要对这些数据进行划分,然后贴上“标签”,以便于分类和索引,所以文件必定包含分类和索引的信息;最后,不同的用户拥有对数据的不同访问权限,因此文件中一定包含一些关于访问权限的信息。
  文件实质上就是一个抽象数据类型ADT,也就是一种数据结构


  举一简单例子来类比文件:
  计算机中的一个文件看成图书馆中的一本书,OS管理文件,相当于图书管理员管理图书馆中的书。
  首先,一本书的主体一定是书中的内容,相当于文件中的数据;其次,不同类别的书需要放在不同的书库,然后加上编号,再把编号登记在图书管理系统中,方便读者查阅,相当于文件的分类和查找;最后,有些价格较高的书只能借给VIP会员或权限比较高的其他读者,而有些普通的书可供任何人借阅,这就是文件的访问权限。


  从用户的角度看,文件系统是OS的重要部分之一。用户关心的是如何命名、分类和查找文件,如何保证文件数据的安全性及对文件可以进行哪些操作等。而对其中的细节,如文件如何存储在辅存上,如何管理文件辅存区域等关心甚少。
  文件系统提供了与二级存储相关的资源的抽象,让用户能在不了解文件的各种属性、文件存储介质的特征及文件在存储介质上的具体位置等情况下,方便快捷地使用文件。
  用户通过文件系统建立文件,提供应用程序的输入、输出,对资源进行管理。通过自底向上的方式定义文件结构如下:
  (1)数据项
  数据项是文件系统中最低级的数据组织形式,可分为以下两种类型:
  a.基本数据项
  用于描述一个对象的某种属性的一个值,如姓名、日期或证件号等,是数据中可命名的最小逻辑数据单位,即原子数据
  b.组合数据项
  由多个基本数据项组成

  (2)记录
  记录是一组相关的数据项的集合,用于描述一个对象在某方面的属性, 如一名考生的报名记录包括考生姓名、出生日期、报考学校代号、身份证号等一系列域。
  (3)文件
  文件是指由创建者所定义的一组相关信息的集合,逻辑上可分为有结构文件和无结构文件两种在有结构文件中,文件由一组相似的记录组成, 如报考某学校的所有考生的报考信息记录,又称记录式文件;而无结构文件则被视为一个字符流, 比如一个二进制文件或字符文件,又称流式文件。

  实际上关于文件并无严格的定义。在OS中,通常将程序和数据组织成文件。文件可以是数字、字母或二进制代码,基本访问单元可以是字节、行或记录。文件可以长期存储于磁盘或其他二级存储器中,允许可控制的进程间共享访问,能够被组织成复杂的结构。

  2.文件的属性

  (1)名称
  文件名称唯一,以容易读取的形式保存
  (2)标识符
  标识文件系统内文件的唯一标签,通常为数字,是对人不可读的一种内部名称。
  (3)类型
  被支持不同类型的文件系统所使用
  (4)位置
  指向设备和设备上文件的指针
  (5)大小
  文件当前大小(用字节、字或块表示),也可包含文件允许的最大值
  (6)保护
  对文件进行保护的访问控制信息
  (7)时间、日期和用户标识
  文件创建、上次修改和上次访问的相关信息,用于保护和跟踪文件的使用

  所有文件的信息都保存在目录结构中,而目录结构保存在外存上。文件信息在需要时才调入内存。 通常,目录条目包括文件名称及其唯一的标识符,而标识符定位其他属性的信息。

  3.文件的基本操作

  文件属于抽象数据类型。 OS提供系统调用,它对文件进行创建、写、读、重定位、删除和截断等操作。
  (1)创建文件
  创建文件有两个必要步骤:一是在文件系统中为文件找到空间;二是在目录中为新文件创建条目,该条目记录文件名称、在文件系统中的位置及其他可能的信息。
  (2)写文件
  为了写文件,执行一个系统调用,指明文件名称和要写入文件的内容。对于给定文件名称,系统搜索目录以查找文件位置。系统必须为该文件维护一个写位置的指针。每当发生写操作时,便更新写指针。
  (3)读文件
  为了读文件,执行一个系统调用,指明文件名称和要读入文件块的内存位置。同样,需要搜索目录以找到相关目录项,系统维护一个读位置的指针。每当发生读操作时,更新读指针。一个进程通常只对一个文件读或写,因此当前操作位置可作为每个进程当前文件位置的指针。由于读和写操作都使用同一指针,因此节省了空间,也降低了系统复杂度。
  (4)文件重定位(文件寻址)
  按某条件搜索目录,将当前文件位置设为给定值, 并且不会读、写文件
  (5)删除文件
  先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。
  (6)截断文件
  允许文件所有属性不变,并删除文件内容,即将其长度设为0并释放其空间。

  这6个基本操作可以组合起来执行其他文件操作。例如,一个文件的复制,可以创建新文件、从旧文件读出并写入新文件

  4.文件的打开与关闭

  因为许多文件操作都涉及为给定文件搜索相关目录条目,因此许多系统要求在首次使用文件时,使用系统调用open将指明文件的属性(包括该文件在外存上的物理位置)从外存复制到内存打开文件表的一个表目中,并将该表目的编号(也称索引)返回给用户。 OS维护一个包含所有打开文件信息的表(打开文件表,open-file table)。 当用户需要一个文件操作时,可通过该表的一个索引指定文件,因此省略了搜索环节。当文件不再使用时,进程可以关闭它,OS从打开文件表中删除这一条目。
  大部分OS要求在文件使用之前就被显式地打开。操作open会根据文件名搜索目录,并将目录条目复制到打开文件表。 若调用open的请求(创建、只读、读写、添加等)得到允许,则进程就可打开文件,而open通常返回一个指向打开文件表中的一个条目的指针。 通过使用该指针(而非文件名)进行所有I/O操作, 以简化步骤并节省资源。
  在open调用完成后,OS对该文件的任何操作都不再需要文件名,而只需要open调用返回的指针。
  整个系统表包含进程相关信息,如文件在磁盘的位置、访问日期和大小。一个进程打开一个文件,系统打开文件表就会为打开的文件增加相应的条目。 当另一个进程执行open时,只不过是在其进程打开表中增加一个条目,并指向整个系统表的相应条目。通常,系统打开文件表的每个文件时,还用一个文件打开计数器(Open Count),以记录多少进程打开了该文件。每个关闭操作close使count递减,当打开计数器为0时,表示该文件不再被使用,系统将回收分配给该文件的内存空间等资源。 若文件被修改过,则将文件写回外存,并将系统打开文件表中的相应条目删除,最后释放文件的文件控制块(File Control Block,FCB)
  每个打开文件都有如下关联信息:
  (1)文件指针
  系统跟踪上次的读写位置作为当前文件位置的指针,这种指针对打开文件的某个进程来说是唯一的,因此必须与磁盘文件属性分开保存。
  (2)文件打开计数
  文件关闭时,OS必须重用其打开文件表条目,否则表内空间会不够用。因为多个进程可能打开同一个文件,所以系统在删除打开文件条目之前,必须等待最后一个进程关闭文件。计数器跟踪打开和关闭的数量,计数为0时,系统关闭文件,删除该条目。
  (3)文件磁盘位置
  绝大多数文件操作都要求系统修改文件数据。该信息保存在内存中,以免为每个操纵都从磁盘中读取
  (4)访问权限
  每个进程打开文件都需要有一个访问模式(创建、只读、读写、添加等)。该信息保存在进程的打开文件表中,以便OS能够允许或拒绝之后的I/O请求。

 4.1.2 文件的逻辑结构

  文件的逻辑结构是从用户观点出发看到的文件的组织形式。文件的物理结构(又称文件的存储结构)是从实现观点出发看到的文件在外存上的存储组织形式。 文件的逻辑结构与存储介质特性无关,但文件的物理结构与存储介质的特性有很大关系。 文件的逻辑结构实际上是指在文件内部,数据逻辑上是如何组织起来的
  按逻辑结构,文件可划分为无结构文件和有结构文件两种。

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

  无结构文件是最简单的文件组织形式。无结构文件将数据按顺序组织成记录并积累、保存,它是有序相关信息项的集合,以字节为单位。 由于无结构文件没有结构,因而对记录的访问只能通过穷举搜索的方式,因此这种文件形式对大多数应用不适用。但字符流的无结构文件管理简单,用户可以方便地对其进行操作。所以,那些对基本信息单位操作不多的文件较适于采用字符流的无结构方式,如源程序文件、目标代码文件等。

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

  有结构文件按记录的组织形式可以分为如下几种:
  (1)顺序文件
  文件中的记录一个接一个地顺序排列,记录通常是定长的,可以顺序存储或以链表形式存储,在访问时需要顺序搜索文件。 顺序文件有以下两种结构:第一种是串结构记录之间的顺序与关键字无关。通常的办法是由时间决定,即按存入时间的先后排列,最先存入的记录作为第1条记录,其次存入的为第2条记录,以此类推。第二种是顺序结构,指文件中的所有记录按关键字顺序排列。
  在对记录进行批量操作,即每次要读或写一大批记录时,顺序文件的效率是所有逻辑文件中最高的; 此外,也只有顺序文件才能存储在磁带上,并能有效地工作,但顺序文件对查找、修改、增加或删除单条记录的操作比较困难。
  (2)索引文件
  索引文件示意图如下:
在这里插入图片描述
  对于定长记录文件,要查找第i条记录,可直接根据下式计算得到第i条记录相对于第1条记录的地址:
  Ai=i x L
  然而,对于可变长记录的文件,要查找第i条记录,必须顺序地查找前i-1条记录,从而获得相应记录的长度L,进而按下式计算出第i条记录的首址:(假定每条记录前用一个字节指明该记录的长度)
  在这里插入图片描述
  变长记录文件使用顺序查找,系统开销较大。为此,可以建立一张索引表以加快检索速度,索引表本身是定长记录的顺序文件。在记录很多或访问要求高的文件中,需要引入索引以提供有效的访问。
  (3)索引顺序文件
  索引顺序文件是顺序和索引两种组织形式的结合。索引顺序文件将顺序文件中的所有记录分为若干组,为顺序文件建立一张索引表,在索引表中为每组中的第一条记录建立一个索引项,其中含有该记录的关键字值和指向该记录的指针。
在这里插入图片描述
  如图所示,主文件名包含姓名和其他数据项。姓名为关键字,索引表中为每组的第一条记录(不是每条记录)的关键字值,用指针指向主文件中该记录的起始位置。索引表只包含关键字和指针两个数据项,所有姓名关键字递增排列。主文件中记录分组排列,同一个组中的关键字可以无序,但组与组之间的关键字必须有序。查找一条记录时,首先通过索引表找到其所在的组,然后在该组中使用顺序查找。
  对于含有N条记录的顺序文件,查找某关键字值的记录时,平均需要查找N/2次。在索引顺序文件中,假设N条记录分为 N \sqrt{N} N 组,索引表中有 N \sqrt{N} N 个表项,每组有 N \sqrt{N} N 条记录,在查找某关键字值的记录时,先顺序查找索引表,需要查找 N \sqrt{N} N /2次,然后在主文件中对应的组中顺序查找,需要查找 N \sqrt{N} N /2次,因此共需查找 N \sqrt{N} N 次。 索引顺序文件提高了查找效率,若记录数很多,则可采用二级或多级索引

  索引文件和索引顺序文件都提高了存取的速度,但因为配置索引表而增加了存储空间。

  (4)直接文件或散列文件(Hash File)
  给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址。 这种映射结构不同于顺序文件或索引文件,没有顺序的特性
  散列文件有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同

  有结构文件逻辑上的组织,是为在文件中查找数据服务的(顺序查找、索引查找、索引顺序查找、哈希查找)


  文件的逻辑结构和物理结构:
  文件的逻辑结构是用户可见的结构,即用户使用文件的结构。文件的物理结构是文件在存储器上的组织结构,它表示一个文件在辅存上安置、链接、编目的方法。它和文件的存取方法以及辅存设备的特性等都有着密切的联系。单个文件的逻辑结构和物理结构之间虽无明显的制约或关联关系,但是若物理结构选择不慎,也很难体现出逻辑结构的特点,比如一个逻辑结构是顺序结构,而物理结构是隐式链接结构的文件,即使理论上可以很快找出某条记录的地址,而实际找时仍然需要在磁盘上一块一块地找。


 4.1.3 目录结构

  与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的信息如属性、位置和所有权等,这些信息主要由OS进行管理。目录管理的基本要求:从用户的角度看,目录在用户(应用程序)所需要的文件名和文件之间提供一种映射,所以目录管理要实现“按名存取”;目录存取的效率直接影响到系统的性能,所以要提高对目录的检索速度;在共享系统中,目录还需要提供用于控制访问文件的信息。此外,文件允许重名也是用户的要求,目录管理通过树形结构来解决和实现
  前面介绍了文件内部的逻辑结构,下面介绍多个文件之间在逻辑上是如何组织的,这实际上是文件“外部”的逻辑结构的问题

  1.文件控制块和索引结点

  与进程管理相似,为实现目录管理,OS中引入了文件控制块的数据结构
  (1)文件控制块
  文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。 为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,成为目录项。
  FCB主要包含以下信息:
  a.基本信息:
  如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等
  b.存取控制信息
  如文件的存取权限等
  c.使用信息
  如文件的建立时间、修改时间等

  (2)索引结点
  在检索目录文件的过程中,只用到了文件名,仅当找到一个目录项(查找文件名与目录项中文件名匹配)时,才需要从该目录项中读出该文件的物理地址。也就是说,在检索目录时,文件的其他描述信息不会用到,也不需要调入内存。因此,有的系统(如UNIX)采用了文件名和文件描述信息分开的方法,文件描述信息单独形成一个称为索引结点的数据结构,简称i结点。 在文件目录中的每个目录项仅由文件名和指向该文件所对应的i结点的指针构成。
在这里插入图片描述
  若一个FCB的大小是64B,盘块大小是1KB,则在每个盘块中可以存放16个FCB(FCB必须连续存放)。而在UNIX系统中,一个目录项仅占16B,其中14B是文件名,2B是i结点指针。在1KB的盘块中可以存放64个目录项。这样,就可使查找文件时的平均启动磁盘次数减少到原来的1/4,大大节省了系统开销。
  存放在磁盘上的索引结点称为磁盘索引结点,UNIX中的每个文件都有一个唯一的磁盘索引结点, 主要包括以下几个方面:
  (1)文件主标识符
  拥有该文件的个人或小组的标识符
  (2)文件类型
  包括普通文件、目录文件或特别文件
  (3)文件存取权限
  各类用户对该文件的存取权限
  (4)文件物理地址
  每个索引结点中含有13个地址项,即iaddr(0)~iaddr(12),它们以直接或间接方式给出数据文件所在盘块的编号
  (5)文件长度
  以字节为单位
  (6)文件链接计数
  在本文件系统中所有指向该文件的文件名的指针计数
  (7)文件存取时间
  本文件最近被进程存取的时间、最近被修改的时间及索引结点最近被修改的时间

  文件被打开时,磁盘索引结点复制到内存的索引结点中,以便于使用。在内存索引结点中又增加了以下内容:
  (1)索引结点编号
  用于标识内存索引结点
  (2)状态
  指示i结点是否上锁或被修改
  (3)访问计数
  每当有一进程要访问此i结点时,计数加1,访问结束减1
  (4)逻辑设备号
  文件所属文件系统的逻辑设备号
  (5)链接指针
  设置分别指向空闲链表和散列队列的指针

  2.目录结构

  在目录层次上所需要执行的操作:
  (1)搜索
  当用户使用一个文件时,需要搜索目录,以找到该文件的对应目录项
  (2)创建文件
  当创建一个新文件时,需要在目录中增加一个目录项
  (3)删除文件
  当删除一个文件时,需要在目录中删除相应的目录项
  (4)显示目录
  用户可以请求显示目录的内容,如显示该用户目录中的所有文件及属性
  (5)修改目录
  某些文件属性保存在目录中,因而这些属性的变化需要改变相应的目录项。

  操作时,考虑以下几种目录结构:
  (1)单级目录结构
  在整个文件系统中只建立一张目录表,每个文件占一个目录项。
在这里插入图片描述
  当访问一个文件时,先按文件名在该目录中查找到相应的FCB,经合法性检查后执行相应的操作。当建立一个新文件时,必须先检索所有目录项以确保没有重名的情况,然后在该目录中增设一项,把FCB的全部信息保存在该项中。 当删除一个文件时,先从该目录中找到该文件的目录项,回收该文件所占用的存储空间,然后清除该目录项。
  单级目录结构实现了按名存取,但查找速度慢,文件不允许重名,不便于文件共享,而且对于多用户的OS不适用。

  (2)两级目录结构
  将文件目录分成主文件目录(Master File Directory,MFD)和用户文件目录(User File Directory,UFD)两级
  在这里插入图片描述
  主文件目录项记录用户名及相应用户文件目录所在的存储位置。用户文件目录项记录该用户文件的FCB信息。 当某用户欲对其文件进行访问时,只需搜索该用户对应的UFD,这既解决了不同用户文件的重名问题,又在一定程度上保证了文件的安全。
  两级目录结构可以解决多用户之间的文件重名问题, 文件系统可以在目录上实现访问限制。但是两级目录结构缺乏灵活性,不能对文件分类

  (3)多级目录结构(树形目录结构)
  将两次目录结构的层次关系加以推广,就形成了多级目录结构,即树形目录结构。
  
  用户要访问某个文件时,用文件的路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件通路上所有目录名与数据文件名用分割符“/”链接而成。从根目录出发的路径称为绝对路径。 当层次较多时,每次从根目录查询会浪费时间,于是加入了当前目录进程对各文件的访问都是相对于当前目录进行的。 当用户要访问某个文件时,使用相对路径标识文件,相对路径由从当前目录出发到所找文件通路上所有目录名与数据文件名用分隔符“/”链接而成。
在这里插入图片描述
  上图为Linux操作系统的目录结构,“/dev/hda”就是一个绝对路径。若当前目录为“/bin”,则“./ls”就是一个相对路径,其中符号“.”表示当前工作目录
  通常,每个用户都有各自的当前目录,登录后自动进入该用户的当前目录。OS提供一条专门的系统调用,供用户随时改变当前目录。例如,在UNIX系统中,“/etc/passwd”文件就包含有用户登录时默认的当前目录,可用cd命令改变当前目录
  树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但在树形目录中查找一个文件时,需要按路径名逐级访问中间结点,这就增加了磁盘访问次数,将影响查询速度。

  (4)无环图目录结构
  树形目录结构能便于实现文件分类,但不便于实现文件共享,为此在树形目录结构的基础上增加了一些指向同一结点的有向边,使整个目录成为一个有向无环图。引入无环图目录结构是为了实现文件共享
在这里插入图片描述
  当某用户要求删除一个共享结点时,若系统只是简单地将它删除,则当另一共享用户需要访问时,会因无法找到这个文件而发生错误。为此,可为每个共享结点设置一个共享计数器,每当图中增加对该结点的共享链时,计数器加1;每当某用户提出删除该结点时,计数器减1。 仅当共享计数器为0时,才真正删除该结点,否则仅删除请求用户的共享链。
  共享文件(或目录)不同于文件拷贝(副本)。若有两个文件拷贝,则每个程序员看到的是拷贝而不是原件,若一个文件被修改,另一个程序员的拷贝不会改变。而对于共享文件,只存在一个真正的文件,任何改变都会为其他用户所见。
  无环图目录结构方便地实现了文件的共享

 4.1.4 文件共享

  文件共享使多个用户(进程)共享同一个文件,系统中只需保留该文件的一个副本。若系统不能提供共享功能,则每个需要该文件的用户都要有各自的副本,会造成对存储空间的极大浪费。随着计算机技术的发展,文件共享的范围已由单机系统发展到多机系统,进而通过网络扩展到全球。这些文件的分享是通过分布式文件系统、远程文件系统、分布式信息系统实现的。这些系统允许多个客户通过C/S模型共享网络中的服务器文件
  现代常用的两种文件共享方法如下:

  1.基于索引结点的共享方式(硬链接)

  在树形结构的目录中,当有两个或多个用户要共享一个子目录或文件时,必须将共享文件或子目录链接到两个或多个用户的目录中, 才能方便地找到该文件
在这里插入图片描述
  在这种共享方式中,诸如文件的物理地址及其他的文件属性等信息,不再放在目录项中,而放在索引结点中。在文件目录中只设置文件名及指向相应索引结点的指针。 在索引结点中还应有一个链接计数count,用于表示链接到本索引结点(即文件)上的用户目录项的数目。当count=2时,表示有两个用户目录项链接到本文件上,或者说有两个用户共享此文件。
  用户A创建一个新文件时,它便是该文件的所有者,此时将count置为1。用户B要共享此文件时,在用户B的目录中增加一个目录项,并设置一个指针指向该文件的索引结点。此时,文件主仍然是用户A,count=2。用户A不再需要此文件,不能将文件直接删除。因为若删除了该文件,则必然也删除了该文件的索引结点,这样便会使用户B的指针悬空, 而用户B可能正在此文件上执行写操作,此时用户B会无法访问到文件。因此用户A不能删除该文件,只是将该文件的count减1,然后删除自己目录中的相应页表项。用户B仍然可以使用该文件。当count=0时,表示没有用户使用该文件,系统将负责删除该文件。
在这里插入图片描述

  2.利用符号链实现文件共享(软链接)

  为使用户B能共享用户A的一个文件F,可以由系统创建一个LINK类型的新文件,也取名为F,并将文件F写入用户B的目录中,以实现用户B的目录与文件F的链接。在新文件中只包含被链接文件F的路径名。这样的链接方法被称为符号链接。
  新文件中的路径名只被视为符号链,当用户B要访问被链接的文件F且正要读LINK类新文件时,OS根据新文件中的路径名去读该文件,从而实现用户B对文件F的共享。
  在利用符号链方式实现文件共享时,只有文件的拥有者才拥有指向其索引结点的指针。而共享该文件的其他用户只有该文件的路径名,并不拥有指向其索引结点的指针。 这样,也就不会发生在文件主删除一个共享文件后留下一个悬空指针的情况。当文件的拥有者把一个共享文件删除后,其他用户通过符号链去访问它时,会出现访问失败,于是将符号链删除,此时不会产生任何影响。利用符号链实现文件共享依然存在问题,例如,一个文件采用符号链方式共享,当文件拥有者将其删除,而在共享的其他用户使用其符号链接访问该文件之前,又有人在同一路径下创建了另一个具有同样名称的文件,则该符号链将仍然有效,但访问的文件已经改变,从而导致错误。
  在符号链的共享方式中,当其他用户读共享文件时,需要根据文件路径名逐个地查找目录,直至找到该文件的索引结点。因此,每次访问时,都可能要多次地读盘,使得访问文件的开销变大并增加了启动磁盘的频率。此外,符号链的索引结点也要耗费一定的磁盘空间。
  符号链方式有一个很大的优点,即网络共享只需提供该文件所在机器的网络地址及该机器中的文件路径。
  上述两种链接方式都存在一个共同的问题,即每个共享文件都有几个文件名,换言之,每增加一条链接,就增加一个文件名。这实质上是每个用户都使用自己的路径名去访问共享文件。当我们试图去遍历整个文件系统时,将会多次遍历到该共享文件。
  硬链接和软链接都是文件系统中的静态共享方法, 在文件系统中还存在着另外的共享需求,即两个进程同时对同一个文件进行操作,这样的共享称为动态共享。
  硬链接就是多个指针指向一个索引结点,保证只要还有一个指针指向索引结点,索引结点就不能删除;软链接就是把到达共享文件的路径记录下来,当要访问文件时,根据路径寻找文件。硬链接的查找速度比软链接的快

 4.1.5 文件保护

  文件共享可能会导致文件被破坏或使未经核准的用户修改文件,因此文件系统必须控制用户对文件的存取,即解决对文件的读、写、执行的许可问题。为此,必须在文件系统中建立相应的文件保护机制。
  文件保护通过口令保护、加密保护和访问控制等方式实现。其中,口令保护和加密保护是为了防止用户文件被他人存取或窃取,而访问控制则用于控制用户对文件的访问方式。

  1.访问类型

  对文件的保护可从限制对文件的访问类型中出发。可加以控制的访问类型主要有以下几种:
  (1)读
  从文件中读
  (2)写
  向文件中写
  (3)执行
  将文件装入内存并执行
  (4)添加
  将新信息添加到文件结尾部分
  (5)删除
  删除文件,释放空间
  (6)列表清单
  列出文件名和文件属性

  此外还可以对文件的重命名、复制、编辑等加以控制。这些高层的功能可以通过系统程序调用低层系统调用来实现。保护可以只在低层提供。例如,复制文件可利用一系列的读请求来完成,这样,具有读访问权限的用户同时也就具有了复制和打印权限。

  2.访问控制

  解决访问控制最常用的方法是根据用户身份进行控制。而实现基于身份访问的最为普通的方法是,为每个文件和目录增加一个访问控制列表(Access-Control List,ACL),以规定每个用户名及其所允许的访问类型。
  这种方法的优点是可以使用复杂的访问方法,缺点是长度无法预计并且可能导致复杂的空间管理,使用精简的访问列表可以解决这个问题。
  精简的访问列表采用拥有者、组和其他 三种用户类型
  (1)拥有者
  创建文件的用户
  (2)组
  一组需要共享文件且具有类似访问的用户
  (3)其他
  系统内的所有其他用户

  这样,只需用三个域即可列出访问表中这三类用户的访问权限。文件拥有者在创建文件时,说明创建者用户名及所在的组名,系统在创建文件时也将文件主的名字、所属组名列在该文件的FCB中。 用户访问该文件时,按照拥有者所拥有的权限访问文件,若用户和拥有者在同一个用户组,则按照同组权限访问,否则只能按其他用户权限访问。 UNIX操作系统即采用此种方法
  口令和密码是另外两种访问控制方法
  口令指用户在建立一个文件时提供一个口令,系统为其建立FCB时附上相应口令,同时告诉允许共享该文件的其他用户。用户请求访问时必须提供相应的口令。 这种方法时间和空间开销不多,缺点是口令直接存在系统内部,不够安全。
  密码指用户对文件进行加密,文件被访问时需要使用秘钥。 这种方法保密性强,节省了存储空间,不过编码和译码要花费一定的时间
  口令和密码都是防止用户文件被他人存取或窃取,并没有控制用户对文件的访问类型
  需注意:
  (1)现代OS常用的文件保护方法是,将访问控制列表与用户、组和其他成员访问控制方案一起组合使用
  (2)对于多级目录结构而言,不仅需要保护单个文件,而且需要保护子目录内的文件,即需要提供目录保护机制。目录操作与文件操作并不相同,因此需要不同的保护机制。


  例题:打开文件操作的主要工作是()
  A.把指定文件的目录复制到内存指定的区域
  B.把指定文件复制到内存指定的区域
  C.在指定文件所在的存储介质上找到指定文件的目录
  D.在内存寻找指定的文件

  答案:A;打开文件操作是将该文件的FCB存入内存的活跃文件目录表,而不是将文件内容复制到主存,找到指定文件目录是打开文件之前的操作

  例题:UNIX操作系统中,输入/输出设备视为()
  A.普通文件  B.目录文件
  C.索引文件  D.特殊文件

  答案:D;UNIX操作系统中,所有设备都被视为特殊的文件,因为UNIX操作系统控制和访问外部设备的方式和访问一个文件的方式是相同的

  例题:文件的逻辑结构是为了方便()而设计的
  A.存储介质特性  B.操作系统的管理方式
  C.主存容量  D.用户

  答案:D;文件结构包括逻辑结构和物理结构。逻辑结构是用户组织数据的结构形式,数据组织形式来自需求,而物理结构是OS组织物理存储块的结构形式
  因此说,逻辑文件的组织形式取决于用户,物理结构的选择取决于文件系统设计者针对硬件结构所采取的策略

  例题:若一个用户进程通过read系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是()
  1.若该文件的数据不在内存,则该进程进入睡眠等待状态
  2.请求read系统调用会导致CPU从用户态切换到核心态
  3.read系统调用的参数应包含文件的名称

  答案:1,2;

  例题:FAT32的文件目录项不包括()
  A.文件名  B.文件访问权限说明
  C.文件控制块的物理位置  D.文件所在的物理位置

  答案:C;一个FCB就是一个文件目录项

  例题:文件系统采用多级目录结构的目的是()
  A.减少系统开销  B.节省存储空间
  C.解决命名冲突  D.缩短传送时间

  答案:C;

  例题:若文件f1的硬链接为f2,两个进程分别打开f1和f2,获得对应的文件描述符为fd1和fd2,则下列叙述中正确的是()
  1.f1和f2的读写指针位置保持相同
  2.f1和f2共享同一个内存索引结点
  3.fd1和fd2分别指向各自的用户打开文件表中的一项

  答案:2,3;每个进程都有一个打开文件表,两个进程各自维护自己的文件描述符;读写指针属于打开文件的关联信息,属于打开文件表中的内容

  例题:对一个文件的访问,常由()共同限制
  A.用户访问权限和文件属性  B.用户访问权限和用户优先级
  C.优先级和文件属性  D.文件属性和口令

  答案:A;注意优先级与权限的区别,用户优先级指在多个用户同时请求该文件时应该先满足谁

  例题:加密保护和访问控制两种机制相比,()
  A.加密保护机制的灵活性更好
  B.访问控制机制的安全性更高
  C.加密保护机制必须由系统实现
  D.访问控制机制必须由系统实现

  答案:D;若访问控制机制不由系统实现,则系统本身的安全性就无法保证。加密机制若由系统实现,则加密方法将无法扩展

  例题:为了对文件系统中的文件进行安全管理,任何一个用户在进入系统时都必须进行注册,这一级安全管理是()
  A.系统级  B.目录级  C.用户级  D.文件级

  答案:系统级安全管理:系统级安全管理的主要任务,是不允许未经核准的用户进入系统;系统级安全管理的方法有:注册、登录
  用户级安全管理:为了给用户分配“文件访问权”设计的,包括:对所有用户进行分类,为指定用户分配文件访问权
  目录级安全管理:为保护系统中的各种目录而设计,与用户权限无关
  文件级安全管理:通过系统管理员或文件主对文件属性的设置,来控制用户对文件的访问

  例题:某文件系统中,针对每个文件,用户类别分为4类:安全管理员、文件主、文件主的伙伴、其他用户;访问权限分为5种:完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应为()
  A.5  B.9  C.12  D.20

  答案:D;每类用户可能拥有多种访问权限,题中明确指出要用二进制位串表示文件权限,因此可以把用户访问权限抽象为一个矩阵,行代表用户,列代表访问权限

  例题:下面的说法中,错误的是()
  1.一个文件在同一系统中,不同的存储介质上的复制文件,应采用同一种物理结构
  2.对一个文件的访问,常由用户访问权限和用户优先级共同限制
  3.文件系统采用树形目录结构后,对于不同用户的文件,其文件名应该不同
  4.为防止系统故障造成系统内文件受损,常采用存取控制矩阵方法保护文件

  答案:1,2,3,4

  例题:下列优化方法中,可以提高文件访问速度的是()
  1.提前读  2.为文件分配连续的簇
  3.延迟写  4.采用磁盘高速缓存

  答案:1,2,3,4;提前读是指在读当前盘块时,将下一个可能要访问的盘块数据读入缓冲区,以便需要时直接从缓冲区中读取,提高了文件的访问速度。延迟写是指先将数据写入缓冲区,并置上延迟写标志,以备不久之后访问,当缓冲区需要再次被分配出去时,才将缓冲区数据写入磁盘,减少了访问磁盘的次数,提高了文件的访问速度。

  例题:对文件的目录结构回答以下问题:
  (1)若一个共享文件可以被用户随意删除或修改,会有什么问题
  (2)若允许用户随意地读、写和修改目录项,会有什么问题
  (3)如何解决上述问题

  答案:(1)将有可能导致共享该文件的其他用户无文件可用,或使用了不想使用的文件,导致发生错误
  (2)用户可以通过修改目录项来改变对文件的存取权限,从而非法地使用系统的文件;另外,对目录项不负责任的修改会造成管理上的混乱
  (3)解决办法是不允许用户直接执行上述操作,而必须通过系统调用来执行这些操作

  例题;在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  答案:(1)可以建立链接。因为F是目录而R是文件,所以可以建立R到F的符号链接。除了符号链接,也可以通过硬链接的方式
  (2)不一定能删除R。因为R被多个目录共享,能否删除R取决于文件系统实现共享的方法。若采用基于索引结点的共享方法,则因删除后存在指针悬空问题而不能删除R结点。若采用基于符号共享的方法,则可以删除R结点
  (3)不一定能删除N。由于N的子目录中存在共享文件R,而R结点本身不一定能被删除,所以N也不一定能被删除

  例题:在这里插入图片描述
  答案:(1)能;不能;(2)需要用户E有访问文件Q的权限。在访问权限许可的情况下,用户E可通过相应路径来访问文件Q,即用户E通过自己的主目录E找到其父目录C,再访问目录C的父目录(根目录),然后依次通过目录D,G,K和O访问文件Q。若用户E的当前目录为E,则访问路径为…/…/D/G/K/O/Q,其中符号“…”表示父目录。
  可在目录G下建立两个链接文件,分别链接到文件S和文件T上。这样用户G就可直接访问这两个文件。
  用户E可修改文件I的存取控制表来对文件I加以保护,不让别的用户使用。具体实现方法是:在文件I的存取控制表中,只留下用户E的访问权限,其他用户对该文件无操作权限,从而达到不让其他用户访问的目的


4.2 文件系统实现

 4.2.1 文件系统层次结构

  现代OS有多种文件系统类型(FAT32,NTFS,ext2,ext3,ext4等),因此文件系统的层次结构也不尽相同,下图是一种合理的层次结构:
在这里插入图片描述

  1.用户调用接口

  文件系统为用户提供与文件及目录有关的调用,如新建、打开、读写、关闭、删除文件,建立、删除目录等。此层由若干程序模块组成,每个模块对应一条系统调用,用户发出系统调用时,控制即转入相应的模块。

  2.文件目录系统

  文件目录系统的主要功能是管理文件目录,其任务有管理活跃文件目录表、管理读写状态信息表、管理用户进程的打开文件表、管理与组织存储设备上的文件目录结构、调用下一级存取控制模块

  3.存取控制验证模块

  实现文件保护主要由该级软件完成,它把用户的访问要求与FCB中指示的访问控制权限进行比较,以确认访问的合法性。

  4.逻辑文件系统与文件信息缓冲区

  逻辑文件系统与文件信息缓冲区的主要功能是,根据文件的逻辑结构将用户要读写的逻辑记录转换成文件逻辑结构内的相应块号

  5.物理文件系统

  物理文件系统的主要功能是把逻辑记录所在的相对块号转换成实际的物理地址。

  6.辅助分配模块

  分配模块的主要功能是管理辅存空间,即负责分配辅存空闲空间和回收辅存空间。

  7.设备管理程序模块

  设备管理程序模块的主要功能是分配设备、分配设备读写用缓冲区、磁盘调度、启动设备、处理设备中断、释放设备读写缓冲区、释放设备等。


  例如,用户要查看文件F中的内容,对OS发出命令(OS有面向用户的接口),于是就经过了第0级的用户调用接口。
  OS得到命令后,需要查找目录以查找文件F的索引信息,可能是FCB,也可能是索引结点,经过了第1级文件目录系统
  通过目录找到文件FCB后,需要查看文件FCB上的信息,看看那个用户有没有访问该文件的权限,于是经过了存取控制验证模块
  用户通过验证后,就真正开始寻址。OS的寻址往往要先得到逻辑地址,再得到物理地址,于是在开始寻址时,OS经过逻辑文件系统与文件信息缓冲区,得到了相应文件的内容的逻辑地址。
  然后在物理文件系统中完成将逻辑地址转换为物理地址的过程。
  至此为止,寻址就已完成。寻址完成后,我们关心的是找到的这块空间应该如何管理,若要释放这块空间,则任务就交给辅助分配模块,若要把这块空间分配给设备用于输入/输出,则把任务交给设备管理程序模块


 4.2.2 目录实现

  在读文件前,必须先打开文件。打开文件时,OS利用路径名找到相应目录项,目录项中提供了查找文件磁盘块所需要的信息。目录实现的基本方法有线性列表和哈希表两种, 目录的实现就是为了查找,因此线性列表实现对应线性查找,哈希表的实现对应散列查找

  1.线性列表

  最简单的目录实现方法是使用存储文件名和数据块指针的线性表。 创建新文件时,必须首先搜索目录表以确定没有同名的文件存在,然后在目录表后增加一个目录项。 删除文件则根据给定的文件名搜索目录表,接着释放分配给它的空间,采用链表结构可以减少删除文件的时间。重用目录项有许多方法:可以将目录项标记为不再使用,或将它加到空闲目录项表上,还可以将目录表中的最后一个目录项复制到空闲位置,并降低目录表长度。线性列表优点在于实现简单,不过由于线性表的特殊性,比较费时

  2.哈希表

  哈希表根据文件名得到一个值,并返回一个指向线性列表中元素的指针。这种方法的优点是查找非常迅速,插入和删除也较简单,不过需要一些预备措施来避免冲突。最大的困难是哈希表长度固定以及哈希函数对表长的依赖性。

  目录查询是通过在磁盘上反复搜索完成的,需要不断地进行I/O操作,开销较大。为减少I/O操作,把当前使用的文件目录复制到内存,以后要使用该文件时只需在内存中操作,因此降低了磁盘操作次数,提高了系统速度

 4.2.3 文件实现

  文件的实现就是研究文件的物理结构,即文件数据在物理存储设备上是如何分布和组织的,包含两个方面:一是文件的分配方式,指对磁盘非空闲块的管理;二是文件存储空间管理,指对磁盘空闲块的管理

  1.文件分配方式

  文件分配对应于文件的物理结构,是指如何为文件分配磁盘块。 常用的磁盘空间分配方法有三种:连续分配、链接分配和索引分配。 有的系统(如RDOS操作系统)对三种方法都支持,但更普遍的是一个系统只支持一种方法。
  (1)连续分配
  连续分配方法要求每个文件在磁盘上占有一组连续的块。
在这里插入图片描述
  磁盘地址定义了磁盘上的一个线性排序,这种排序使作业访问磁盘时需要的寻道数和寻道时间最小。
  文件的连续分配可以用第一块的磁盘地址和连续块的数量来定义。 若文件长n块并从位置b开始,则该文件将占有块b,b+1,b+2,…,b+n-1。一个文件的目录条目包括开始块的地址和该文件所分配区域的长度。
  连续分配方式支持顺序访问和直接访问。 其优点是实现简单、存取速度快。缺点是文件长度不宜动态增加, 因为一个文件末尾后的盘块可能已分配给其他文件,一旦需要增加,就需要大量移动盘块。此外,反复增删文件后会产生外部碎片 (与内存管理分配方式中的碎片相似),且很难确定一个文件所需要的空间大小,因而只适用于长度固定的文件。

  (2)链接分配
  链接分配采取离散分配的方式,消除了外部碎片, 因此显著提高了磁盘空间的利用率;又因为根据文件的当前需求为其分配必须的盘块,当文件动态增长时,可以动态地再为它分配盘块, 因此无需事先知道文件的大小。此外,对文件的增、删、改也非常方便。链接分配又可分为隐式链接和显式链接两种形式。
  隐式链接如图所示:
在这里插入图片描述
  每个文件对应一个磁盘块的链表; 磁盘块分布在磁盘的任何地方,除最后一个盘块外,每个盘块都有指向下一个盘块的指针,这些指针对用户是透明的。 目录包括文件第一块的指针和最后一块的指针。
  创建新文件时,目录中增加一个新条目。每个目录项都有一个指向文件首块的指针。该指针初始化为NULL以表示空文件,大小字段为0。写文件会通过空闲空间管理系统找到空闲块,将该块链接到文件的尾部,以便写入。读文件则通过块到块的指针顺序读块。 隐式链接分配的缺点是无法直接访问盘块,只能通过指针顺序访问文件,且盘块指针会消耗一定的存储空间。隐式链接分配的稳定性也是一个问题,系统在运行过程中由于软件或硬件错误导致链表中的指针丢失或损坏,将导致文件数据的丢失。

  显示链接是指把用于链接文件各物理块的指针,从每个物理块的块末尾中提取出来,显式地存放在内存中的一张链接表中。 该表在整个磁盘中仅设置一张,称为文件分配表(File Allocation Table,FAT)每个表项中存放对应块的下一块链接指针,即下一个盘块号。 文件的第一个盘块号记录在目录中,后续的盘块可通过查FAT找到。 例如,某磁盘共有100个磁盘块,存放了两个文件:文件aaa占三个盘块,依次是2,8,5;文件bbb占两个盘块,依次是7,1。其余盘块都是空闲盘块,则该磁盘的FAT表如图所示:
在这里插入图片描述
  FAT的表项与全部磁盘块一 一对应,并且可以用一个特殊的数字-1表示文件的最后一块,用-2表示这个磁盘块是空闲的(当然也可指定为-3,-4)。 因此,文件分配表(FAT)不仅记录了文件各块之间的先后链接关系,同时还标记了空闲的磁盘块, OS也可以通过FAT对文件存储空间进行管理。当某进程请求OS分配一个磁盘块时,OS只需从FAT中找到-2的表项,并将对应的磁盘块分配给进程即可。
  FAT表在系统启动时就会被读入内存,因此查找FAT的过程是在内存中进行的, 因此不仅显著地提高了检索速度,而且明显减少了访问磁盘的次数。

  (3)索引分配
  链接分配解决了连续分配的外部碎片和文件大小管理的问题。但链接分配不能有效支持直接访问(FAT除外)。索引分配解决了这个问题,它把每个文件的所有的盘块号都集中放在一起构成索引块(表),如图所示:
在这里插入图片描述
  每个文件都有其索引块,这是一个磁盘块地址的数组。索引块的第i个条目指向文件的第i个块。 目录条目包括索引块的地址。要读第i块,通过索引块的第i个条目的指针来查找和读入所需的块。
  在此种方式下,访问文件需要两次访问外存——首先要读取索引块的内容,然后访问具体的磁盘块,因而降低了文件的存取速度。为了解决这一问题,通常将文件的索引块读入内存的缓冲区中,以加快文件的访问速度
  创建文件时,索引块的所有指针都设为空。首次写入第i块时,先从空闲空间中取得一个块,再将其地址写到索引块的第i个条目。索引分配支持直接访问,且没有外部碎片问题。 其缺点是由于索引块的分配,增加了系统存储空间的开销。索引块的大小是一个重要的问题,每个文件必须有一个索引块,因此索引块应尽可能小,但索引块太小就无法支持大文件。可以采用以下机制来解决此问题:
  a.链接方案
  一个索引块通常为一个磁盘块,因此它本身能直接读写。为了处理大文件,可以将多个索引块链接起来。
  b.多层索引
  多层索引使第一层索引块指向第二层的索引块,第二层索引块再指向文件块。这种方法根据最大文件大小的要求,可以继续到第三层或第四层。例如,4096B(2 ^ 12B)的块,能在索引块中存入1024个4B的指针。两层索引允许2^20个数据块,即允许最大文件为4GB
  c.混合索引
  将多种索引分配方式相结合的分配方式。例如,系统既采用直接地址,又采用单级索引分配方式或两级索引分配方式
  混合索引分配已在UNIX系统中采用。在UNIX System V的索引结点中,共设置了13个地址项,即iaddr(0)~iaddr(12)。在BSD UNIX的索引结点中,共设置了13个地址项,它们都把所有的地址项分成两类,即直接地址和间接地址。
在这里插入图片描述
  ①直接地址
  为了提高对文件的检索速度,在索引结点中可设置10个直接地址项,即用iaddr(0)~iaddr(9)来存放直接地址。这里每项中所存放的是该文件数据所在盘块的盘块号。 假如每个盘块的大小为4KB,当文件不大于40KB时,便可直接从索引结点中读出该文件的全部盘块号。
  ②一次间接地址
  对于大、中型文件,只采用直接地址并不现实。可再利用索引结点中的地址项iaddr(10)来提供一次间接地址。这种方式的实质就是一级索引分配方式。 图中的一次间址块也就是索引块,系统将分配给文件的多个盘块号记入其中。在一次间址块中可存放1024个盘块号,因而允许文件长达4MB。
  ③多次间接地址
  当文件长度大于4MB+40KB(一次间接地址与10个直接地址项)时,系统还须采用二次间接地址分配方式。这时,用地址项iaddr(11)提供二次间接地址,该方式的实质是两级索引分配方式。系统此时在二次间接地址块中记入所有一次间接地址块的盘号。在采用二次间接地址方式时,文件的最大长度可达4GB。同理,地址项iaddr(12)作为三次间接地址,其允许的文件最大长度可达4TB。

  三种分配方式的比较:
在这里插入图片描述

  2.文件存储空间管理

  (1)文件存储器空间的划分与初始化
  一般来说,一个文件存储在一个文件卷中。文件卷可以是物理盘的一部分,也可以是整个物理盘,支持超大型文件的文件卷也可由多个物理盘组成。
在这里插入图片描述

  在一个文件卷中,文件数据信息的空间(文件区)和存放文件控制信息FCB的空间(目录区)是分离的。 由于存在很多种类的文件表示和存放格式,所以现代OS中一般都有很多不同的文件管理模块,通过它们可以访问不同格式的逻辑卷中的文件。逻辑卷在提供文件服务前,必须由对应的文件程序进行初始化,划分好目录区和文件区,建立空闲空间管理表格及存放逻辑卷信息的超级块。

  (2)文件存储器空间管理
  文件存储设备分成许多大小相同的物理块,并以块为单位交换信息, 因此,文件存储设备的管理实质上是对空闲块的组织和管理, 它包括空闲块的组织、分配与回收等问题。

  a.空闲表法
  空闲表法属于连续分配方式, 它与内存的动态分配方式类似,为每个文件分配一块连续的存储空间。系统为外存上的所有空闲区建立一张空闲盘块表,每个空闲区对应于一个空闲表项,其中包括表项序号、该空闲区第一个盘块号、该区的空闲盘块数等信息。 再将所有空闲区按其起始盘块号递增的次序排列。
在这里插入图片描述
  空闲盘区的分配与内存的动态分配类似,同样采用首次适应算法、循环首次适应算法等。 例如,在系统为某新创建的文件分配空闲盘块时,先顺序地检索空闲盘块表的各表项,直至找到第一个其大小能满足要求的空闲区,再将该盘区分配给用户,同时修改空闲盘块表。
  系统在对用户所释放的存储空间进行回收时,也采取类似于内存回收的方法,即要考虑回收区是否与空闲表中插入点的前区和后区相邻接,对相邻接者应予以合并。

  (2)空闲链表法
  将所有空闲盘区拉成一条空闲链,根据构成链所用的基本元素不同,可把链表分成两种形式:空闲盘块链和空闲盘区链。
  空闲盘块链将磁盘上的所有空闲空间以盘块为单位拉成一条链。 当用户因创建文件而请求分配存储空间时,系统从链首开始,依次摘下适当数目的空闲盘块分配给用户。当用户因删除文件而释放存储空间时,系统将回收的盘块依次插入空闲盘块链的末尾。这种方法的优点是分配和回收一个盘块的过程非常简单,但在为一个文件分配盘块时可能要重复多次操作。
  空闲盘区链将磁盘上的所有空闲盘区(每个盘区可包含若干盘块)拉成一条链。在每个盘区上除含有用于指示下一个空闲盘区的指针外,还应有能指明本盘区大小(盘块数)的信息。 分配盘区的方法与内存的动态分区分配类似,通常采用首次适应算法。在回收盘区时,同样也要将回收区与相邻接的空闲盘区合并。

  (3)位示图法
  位示图利用二进制的一位来表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有一个二进制位与之对应。当其值为0时,表示对应的盘块空闲;当其值为1时,表示对应的盘块已分配。
在这里插入图片描述
  盘块的分配:
  a.顺序扫描位示图,从中找出一个或一组其值为0的二进制位
  b.将找到的一个或一组二进制位,转换成与之对应的盘块号。若找到的其值为0的二进制位位于位示图的第i行、第j列,则其相应的盘块号应按下式计算(n代表每行的位数,行和列从1开始标号):
  b=n(i-1)+j

  c.修改位示图,令map[i,j]=1。

  盘块的回收:
  a.将回收盘块的盘块号转换成位示图中的行号和列号。转换公式为:
  i=(b-1)DIV n +1
  j=(b-1)MOD n +1

  b.修改位示图,令map[i,j]=0。

  (4)成组链接法
  空闲表法和空闲链表法都不适用于大型文件系统,因为这会使空闲表或空闲链表太大。在UNIX系统中采用的是成组链接法,这种方法结合了空闲表和空闲链表两种方法,克服了表太大的缺点。其大致思想是:把顺序的n个空闲扇区地址保存在第一个空闲扇区内,其后一个空闲扇区内则保存另一顺序空闲扇区的地址,如此继续,直至所有空闲扇区均予以链接。系统只需要保存一个指向第一个空闲扇区的指针。 假设磁盘最初全为空闲扇区,其成组链接如图所示,通过这种方式可以迅速找到大批空闲块地址
在这里插入图片描述
  表示文件存储器空闲空间的位向量表或第一个成组链块,以及卷中的目录区、文件区划分信息都需要存放在辅存存储器中,一般放在卷头位置,在UNIX系统中称为超级块。 在对卷中的文件进行操作前,超级块需要预先读入系统空闲的主存,并且经常保持主存超级块与辅存卷中超级块的一致性。


  文件系统实现概述:
  为了创建一个文件,应用程序调用逻辑文件系统。逻辑文件系统知道目录结构形式,它将为文件分配一个新的FCB,把相应目录读入内存,用新的文件名更新该目录和FCB,并将结果写回磁盘。下图为一个典型的FCB
在这里插入图片描述
  一旦文件被创建,它就能用于I/O,不过首先要打开文件。调用open将文件名传给文件系统,文件系统根据给定文件名搜索目录结构。部分目录结构通常缓存在内存中以加快目录操作。找到文件后,其FCB复制到系统范围的打开文件表。该表不但存储FCB,而且存储打开该文件的进程数量的条目。
  然后,单个进程的打开文件表中会增加一个条目,并通过指针将系统范围的打开文件表的条目与其他域(文件当前位置的指针和文件打开模式等)相连。调用open返回的是一个指向单个进程的打开文件表中合适条目的指针,所有文件操作都是通过该指针进行的。
  文件名不必是打开文件表的一部分,因为一旦完成对FCB在磁盘上的定位,系统就不再使用文件名。对于访问打开文件表的索引,UNIX称之为文件描述符。因此,只要文件未被关闭,所有文件操作就通过打开文件表来进行
  当一个进程关闭文件时,就会删除单个进程打开文件表中的一个相应条目,即目录项,系统范围内打开文件表的打开数也会递减。当打开文件的所有用户都关闭了一个文件时,更新的文件信息会复制到磁盘的目录结构中,系统范围内的打开文件表的条目也将删除
  在实际中,系统调用open时会首先搜索系统范围的打开文件表,以确定某文件是否已被其他进程所使用。如果是,就在单个进程的打开文件表中创建一项,并指向现有系统范围的打开文件表的相应条目。该算法在文件已打开时,能节省大量开销。


  例题:一个文件系统中,其FCB占64B,一个盘块大小为1KB,采用一级目录。假定文件目录中有3200个目录项。则查找一个文件平均需要()次访问磁盘

  答案:100次;

  例题:设有一个记录文件,采用链接分配方式,逻辑记录的固定长度为100B,在磁盘上存储时采用记录成组分解技术。盘块长度为512B。若该文件的目录项已经读入内存,则对第22个逻辑记录完成修改后,共启动了磁盘()次

  答案:6次;第22个逻辑记录需读入第5个物理块,由于文件采用的物理结构是链接文件,因此需要从目录项所指的第一个物理块开始读取,依次读到第4块才得到第5块的物理地址,共启动磁盘5次。修改还需要写回操作,由于写回时已获得该块的物理地址,只需1次访问磁盘,因此共需要启动磁盘6次

  例题:物理文件的组织方式是由()确定的
  A.应用程序  B.主存容量  C.外存容量  D.操作系统

  答案:D;

  例题:下面关于索引文件的论述中,正确的是()
  A.索引文件中,索引表的每个表项中含有相应记录的关键字和存放该记录的物理地址
  B.顺序文件进行检索时,首先从FCB中读出文件的第一个盘块号;而对索引文件进行检索时,应先从FCB中读出文件索引块的开始地址
  C.对于一个具有三级索引的文件,存取一条记录通常要访问三次磁盘
  D.文件较大时,无论是进行顺序存取还是进行随机存取,通常索引文件方式都最快

  答案:B;索引表的表项中存放有该记录的逻辑地址;三级索引需要访问4次磁盘

  例题:文件系统用位示图法表示磁盘空间的分配情况,位图存于磁盘的32~127号块中,每个盘块占1024B,盘块和块内字节均从0开始编号。假设要释放的盘块号为409612,则位图中要修改的位所在的盘块号和块内字节序号分别是()

  答案:82,1;

  例题:下列选项中,可用于文件系统管理空闲磁盘块的数据结构是
  1.位图  2.索引结点  3.空闲磁盘块链  4.文件分配表FAT

  答案:1,3,4;

  例题:简述文件的外存分配中,连续分配、链接分配和索引分配各自的主要优缺点

  答案:连续分配方式的优点是可以随机访问(磁盘),访问速度快;缺点是要求有连续的存储空间,容易产生碎片,降低磁盘空间利用率,并且不利于文件的增长扩充
  链接分配方式的优点是不要求连续的存储空间,能更有效地利用磁盘空间,并且有利于扩充文件;缺点是只适合顺序访问,不适合随机访问;另外,链接指针占用一定的空间,降低了存储效率,可靠性也差
  索引分配方式的优点是既支持顺序访问又支持随机访问,查找效率高,便于文件删除;缺点是索引表会占用一定的存储空间。

  例题:在实现文件系统时,为加快文件目录的检索速度,可利用FCB分解法。假设目录文件存放在磁盘上,每个盘块512B,FCB占64B,其中文件名占8B。通常将FCB分解成两部分,第一部分占10B(包括文件名和文件内部号),第二部分占56B(包括文件内部号和文件的其他描述信息)

  (1)假设某一目录文件共有254个FCB,试分别给出采用分解法前和分解法后,查找该目录文件的某个FCB的平均访问磁盘次数
  (2)一般地,若目录文件分解前占用n个盘块,分解后改用m个盘块存放文件名和文件内部号,请给出访问磁盘次数减少的条件

  答案:FCB分解法加快目录检索速度的原理是:目录是存在磁盘上的,所以检索目录时需要访问磁盘,速度很慢;而FCB分解法将FCB的一部分数据分解出去,存放在另一个数据结构中,而在目录中仅留下文件的基本信息和指向该数据结构的指针,这样就有效缩减了目录的体积,减少了目录所占磁盘的块数,检索目录时读取磁盘的次数也减少,于是就加快了检索目录的速度
  因为原本整个FCB都是在目录中的,而FCB分解法将FCB的部分内容放在了目录外,所以检索完目录后还需要读取一次磁盘,以找齐FCB的所有内容
  (1)分解法前,目录的磁盘块数为64x254/512=31.75,即32块
  所找目录项在第1,2,3,…,32块所需的磁盘访问次数分别为1,2,3,…,32次。查找该目录文件的某个FCB的平均访问磁盘次数=(1+2+3+…+32)/32=16.5次
  分解法后,目录的磁盘块数为10x254/512=4.96,即5块
  所找目录项在第1,2,3,4,5块所需的磁盘访问次数分别为2,3,4,5,6次。所以查找该目录文件的某个FCB的平均访问磁盘次数=(2+3+4+5+6)/5=4次

  (2)分解法前:(1+2+3+…+n)/n=(n+1)/2次
  分解法后:(2+3+4+…+m+1)/m=(m+3)/2次
  m<n-2

  例题:某文件系统为一级目录结构,文件的数据一次性写入磁盘,已写入的文件不可修改,但可多次创建新文件。
  (1)在连续、链式、索引三种文件的数据块组织方式中,哪种更合适?说明理由。为定位文件数据块,需要在FCB中设计哪些相关描述字段
  (2)为快速找到文件,对于FCB,是集中存储好,还是与对应的文件数据块连续存储好?说明理由

  答案:(1)在磁盘中连续存放(采取连续结构),磁盘寻道时间更短,文件随机访问效率更高;在FCB中加入的字段为<起始块号,块数>或<起始块号,结束块号>
  (2)将所有的FCB集中存放,文件数据集中存放。这样在随机查找文件名时,只需访问FCB对应的块,可减少磁头移动和磁盘I/O访问次数

  例题:假定磁盘块的大小为1KB,对于540MB的硬盘,其文件分配表FAT最少需要占用多少存储空间

  答案:需存储下一个盘块号,总块数540K,小于2^20,文件分配表每个表目用20位,即2.5B,FAT占用2.5B x 540K=1350KB

  例题:在这里插入图片描述
  答案:(1)在这里插入图片描述
在这里插入图片描述
  (2)128KB,256MB  (3)100号表项,106号表项  (4)需要访问48号、106号簇;先在dir目录文件里找到dir1的簇号,得到dir1的目录文件,接着找到file1的第一个簇号,据此在FAT里查找file1的第5000个字节所在的簇号,最后访问磁盘中的该簇

  例题:在这里插入图片描述
  答案:(1)一个一级索引表可容纳256个磁盘地址,一个二级索引表可容纳256个一级索引表地址,一个三级索引表可容纳256个二级索引表地址。最多可有的文件页数为:10+256+256x256+256x256x256=16843018
  (2)最坏情况,访问页存放在三级索引下,最多启动磁盘7次
  (3)6次
  (4)可将W文件挂在根目录的最前面的目录项中,最多访问5次

  例题:某文件系统采用多级索引的方式组织文件的数据存放,假定在文件的i_node中国设有13个地址项,其中直接索引10项,一次间接索引项1项,二次间接索引项1项,三次间接索引项1项。数据块的大小为4KB,磁盘地址用4B表示
  (1)这个文件系统允许的最大文件长度是多少
  (2)一个2GB大小的文件,在这个文件系统中实际占用多少空间

  答案:(1)4TB+4GB+4MB+40KB,约为4TB;
  (2)占用空间分为文件实际大小和索引项大小, 需2^9个数据块,二次间接索引项使用1+ ⌈ ( 512 X 1024 − 10 − 1024 ) / 1024 \lceil(512 X1024-10-1024)/1024 512X1024101024/1024 ⌉ \rceil ≈ \approx 512个间接索引块。该文件总共占用52B+4KB+2MB+2GB

  例题:在这里插入图片描述
  答案:(1)盘块序号b=i x16+j;用C表示柱面号、H表示磁头号、S表示扇区号,则有:C=b/(20 x 8),H=( b%(20 x 8))/8,S=b%8
  (2)分配:顺序扫描位示图,找出1个其值为0的二进制位,利用上述公式将其转换成相应的序号b,并修改位示图,置(i,j)=1
  回收:将回收盘块的盘块号换算成位示图中的i和j,转换公式为:b=C x 20 x 8 +H x 8 +S,i=b/16,j=b%16;最后将计算出的(i,j)在位示图中置0

  例题:某文件系统空间的最大容量为4TB(1TB=2^40B),以磁盘块为基本分配单位。磁盘块大小为1KB。文件控制块(FCB)包含一个512B的索引表区。
  (1)假设索引表区仅采用直接索引结构,索引表区存放文件占用的磁盘块号,索引表项中块号最少占多少字节?可支持的单个文件的最大长度是多少字节
  (2)假设索引表区采用如下结构:第0~7字节采用<起始块号,块数>格式表示文件创建时预分配的连续存储空间。其中起始块号占6B,块数占2B,剩余504B采用直接索引结构,一个索引项占6B,则可支持的单个文件的最大长度是多少字节?为使单个文件的长度达到最大,请指出起始块号和块数分别所占字节数的合理值并说明理由

  答案:(1)4B;128KB;  (2)64MB+84KB;为了使单个文件的长度达到最大,应使连续区的块数字段表示的空间大小尽可能接近系统最大容量4TB。分别设起始块号和块数占4B,这样起始块号可寻址的范围是2^32个磁盘块,即整个系统空间。块数字段可以表示最多2 ^32个磁盘块。

  例题:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  答案:(1)根目录找到文件A需要5次读盘。一个物理块在链式存储结构下可放2条记录及下一个物理块地址,而文件A共有598条记录,因此读取A的所有记录所需的读盘次数为598/2=299,至少需读盘304次
  (2)当文件为连续文件时,找到文件A同样需要5次读盘,且知道文件A的地址后通过计算只需一次读盘即可读出第487条记录,所以至少6次读盘
  (3)为减少因查找目录而读盘的次数,可采用索引结点方法。若一个目录项占16B(在UNIX中,一个目录项占16B),则一个盘块可存放512/16=32个目录项,与本题一个盘块仅能存放4个目录相比,可使因访问目录而读盘的次数减少1/8。对查找文件的记录而言,可用一个或多个盘块来存放该文件的所有盘块号,即用链接索引(成组链接)方法;由(1)中链指针地址为2B,一个盘块可存放512/2-1=255个盘块号,留下一个地址用来指向下一个存储盘块号(索引块)的磁盘块号。这样,就本题来说,查找目录时需启动5次磁盘。文件A共有299个盘块,即查找文件A的某一记录时需两次取得所有盘块号,再需最多启动1次磁盘即可把A中的任意一条记录读入内存。最多需8次访盘,而原来的链接方法查找一条记录时,读盘次数为6~304

  例题:文件F由200条记录组成,记录从1开始编号。用户打开文件后,欲将内存中的一条记录插入文件F中,作为其第30条记录。
  (1)若文件系统采用连续分配方式,每个磁盘块存放一条记录,文件F存储区域前后均有足够的空闲磁盘空间,则完成上述插入操作最少需要访问多少次磁盘块?F的文件控制块内容会发生哪些改变
  (2)若文件系统采用链接分配方式,每个磁盘块存放一条记录和一个链接指针,则完成上述插入操作需要访问多少次磁盘块?若每个存储块大小为1KB,其中4B存放链接指针,则该文件系统支持的文件最大长度是多少?

  答案:(1)59;起始块号,文件长度
  (2)需要找到文件系统的第29块,一共需要访盘29次,然后把第29块的下块地址部分赋给新块,把新块存回磁盘会访盘1次,然后修改内存中第29块的下块地址字段,再存回磁盘,一共访盘31次。
  4B共32位,可寻址2^32块存储块,每块大小1KB,其中数据部分1020B,最大长度2 ^32 x 1020B =4080GB

  例题:某文件系统采用索引结点存放文件的属性和地址信息,簇大小为4KB。每个文件索引结点占64B,有11个地址项,其中直接地址项8个,一级、二级和三级间接地址项各1个,每个地址项长度为4B。
  (1)该文件系统能支持的最大文件长度是多少?(给出计算表达式)
  (2)文件系统用1M个簇存放文件索引结点,用512M个簇存放文件数据。若一个图像文件的大小为5600B,则该文件系统最多能存放多少个这样的图像文件
  (3)若文件F1的大小为6KB,文件F2的大小为40KB,则该文件系统获取F1和F2最后一个簇的簇号需要的时间是否相同?为什么

  答案:(1)32KB+4MB+4GB+4TB;
  (2)文件索引结点总个数为1Mx4KB/64B=64M,512M个簇可存放的文件总个数为256M,每个文件都需1个索引结点,可表示的文件总个数受限于文件索引结点总个数,能存储64M个大小为5600B的图像文件
  (3)获取F1的最后一个簇的簇号只需要访问索引结点的直接地址项。获取F2的最后一个簇的簇号还需要读一级索引表。所需的时间不同

4.3 磁盘组织与管理

 4.3.1 磁盘的结构

  磁盘(Disk)是由表面涂有磁性物质的金属或塑料构成的圆形盘片,通过一个称为磁头的导体线圈从磁盘读取数据。在读/写操作期间,磁头固定,磁盘在下面高速旋转。
在这里插入图片描述
  磁盘盘面上的数据存储在一组同心圆中,称为磁道。每个磁道与磁头一样宽,一个盘面上有上千个磁道。磁道又划分为几百个扇区,每个扇区固定存储大小(通常为512B),一个扇区称为一个盘块。相邻磁道及相邻扇区间通过一定的间隙分隔开,以避免精度错误。由于扇区按固定圆心角度划分,所以密度从最外道向里道增加磁盘的存储能力受限于最内道的最大记录密度。
  磁盘安装在一个磁盘驱动器中,它由磁头臂、用于旋转磁盘的主轴和用于数据输入/输出的电子设备组成。
在这里插入图片描述

  多个盘片垂直堆叠,组成磁盘组,每个盘片对应一个磁头,所有磁头固定在一起,与磁盘中心的距离相同且一起移动。 所有盘片上相对位置相同的磁道组成柱面。按照这种物理结构组织,扇区就是磁盘可寻址的最小存储单位,磁盘地址用柱面号·盘面号·扇区号(或块号)表示


  存储一个文件时,当一个磁道存储不下时,剩下部分是存在同一个盘面的不同磁道好,还是存在同一个柱面上的不同盘面号?

  存在同一个柱面上的不同盘面好。寻道时间对于一次磁盘访问的影响是最大的,若存在同一个盘面的不同磁道,则磁臂势必要移动,这样会大大增加文件的访问时间,而存在同一个柱面上的不同盘面就不需要移动磁道。


  磁盘按不同的方式可分为若干类型:磁头相对于盘片的径向方向固定的,称为固定头磁盘,每个磁道一个磁头;磁头可移动的,称为活动头磁盘,磁头臂可来回伸缩定位磁道;磁盘永久固定在磁盘驱动器内的,称为固定盘磁盘;可移动和替换的,称为可换盘磁盘。
  用户访问文件,需要OS的服务,文件实际上存储在磁盘中,OS接收用户的命令后,经过一系列的检验访问权限和寻址过程后,最终都会到达磁盘,控制磁盘把相应的数据信息读出或修改。当有多个请求同时到达时,OS就要决定先为哪个请求服务,这就是磁盘调度算法要解决的问题。

 4.3.2 磁盘调度算法

  一次磁盘读写操作的时间由寻道(寻找)时间、延迟时间和传输时间决定。
  (1)寻道时间Ts
  活动头磁盘在读写信息前,将磁头移动到指定磁道所需要的时间。这个时间除跨越n条磁道的时间外,还包括启动磁臂的时间s
  Ts=m x n+s
  m是与磁盘驱动器速度有关的常数,约为0.2ms,磁臂的启动时间约为2ms。一般来说,寻道时间因为要移动磁臂,所以占用时间最长。

  (2)延迟时间Tr
  磁头定位到某一磁道的扇区(块号)所需要的时间,设磁盘的旋转速度为r,则Tr=1/2r
  (3)传输时间Tt
  从磁盘读出或向磁盘写入数据所经历的时间,这个时间取决于每次所读/写的字节数b和磁盘的旋转速度
  Tt=b/rN
  r为磁盘每秒的转速,N为一个磁道上的字节数

  在磁盘存取时间的计算中,寻道时间与磁盘调度算法相关。 而延迟时间和传输时间都与磁盘旋转速度相关,且为线性相关。

  总平均存取时间Ta可以表示为:
  Ta=Ts+1/2r+b/rN

  在实际的磁盘I/O操作中,存取时间与磁盘调度算法密切相关。调度算法直接决定寻道时间,从而决定总的存取时间。

  目前常用的磁盘调度算法有以下几种:
  (1)先来先服务(FCFS)算法
  FCFS算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法。该算法的优点是具有公平性。若只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则有望达到较好的性能;若有大量进程竞争使用磁盘,则这种算法在性能上往往接近于随机调度。
  例如,磁盘请求队列中的请求顺序分别为55,58,39,18,90,160,150,38,184,磁头的初始位置是磁道100,采用FCFS算法时磁头的运动过程如图所示,磁头共移动了45+3+19+21+72+70+10+112+146=498个磁道,平均寻找长度=498/9=55.3
在这里插入图片描述
  (2)最短寻找时间优先(Shortest Seek Time First,SSTF)算法
  SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以便使每次的寻找时间最短。 这种算法会产生饥饿现象。 如图所示,若某时刻磁头正在18号磁道,而在18号磁道附近频繁地增加新的请求,则SSTF算法使得磁头长时间在18号磁道附近工作,将使184号磁道的访问被无限期地延迟,即被饿死
在这里插入图片描述
  如上图所示,磁盘请求队列中的请求顺序分别为55,58,39,18,90,160,150,38,184,磁头初始位置是磁道100,采用SSTF算法时磁头的运动过程如图。磁头共移动了248个磁道,平均寻找长度27.5

  (3)扫描(SCAN)算法(又称电梯调度算法)
  SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,实际上就是在最短寻道时间优先算法的基础上规定了磁头运动的方向。 由于磁头移动规律与电梯运行相似,因此又称电梯调度算法。SCAN算法对最近扫描过的区域不公平,因此它在访问局部性方面不如FCFS算法和SSTF算法好。
在这里插入图片描述
  例如,磁盘请求队列中的请求顺序分别为55,58,39,18,90,160,150,38,184,磁头初始位置是磁道100。采用SCAN算法时,不但要知道磁头的当前位置,而且要知道磁头的移动方向, 假设磁头沿磁道号增大的顺序移动,则磁头的运动过程如上图所示。移动磁道的顺序为100,150,160,184,200,90,58,55,39,38,18。磁头共移动了282个磁道,平均寻道长度31.33

  (4)循环扫描(Circular SCAN,C-SCAN)算法
  在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。 由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的C-SCAN算法来避免这个问题
  例如,磁盘请求队列中的请求顺序分别为55,58,39,18,90,160,150,38,184,磁头初始位置是磁道100。采用C-SCAN算法时,假设磁头沿磁道号增大的顺序移动,则磁头的运动过程如图所示。移动磁道的顺序为100,150,160,184,200,0,18,38,39,55,58,90。磁头共移动390个磁道,平均寻道长度43.33
在这里插入图片描述
  采用SCAN算法和C-SCAN算法时,磁头总是严格地遵循从盘面的一端到另一端,在使用时可以进行改进,即磁头移动只需要达到最远端的一个请求即可返回,不需要到达磁盘端点。这种形式的SCAN算法和C-SCAN算法称为LOOK调度和C-LOOK调度因为它们在朝一个给定方向移动前会查看是否有请求。
在这里插入图片描述
在这里插入图片描述
  若无特别说明,可默认SCAN算法和C-SCAN算法为LOOK和C-LOOK调度。

  对比以上几种磁盘调度算法,FCFS算法太过简单,性能较差,仅在请求队列长度接近于1时才较为理想;SSTF算法较为通用和自然;SCAN算法和C-SCAN算法在磁盘负载较大时比较占优势。
在这里插入图片描述
  除减少寻道时间外,减少延迟时间也是提高磁盘传输效率的重要因素。可以对盘面扇区进行交替编号,对磁盘片组中的不同盘面错位命名。 假设每个盘面有8个扇区,磁盘片组共8个盘面,则可以采用如图所示的编号:
在这里插入图片描述
  磁盘是连续自转设备,磁头读/写一个物理块后,需要经过短暂的处理时间才能开始读/写下一块。假设逻辑记录数据连续存放在磁盘空间中,若在盘面上按扇区交替编号连续存放,则连续读/写多条记录时能减少磁头的延迟时间;同柱面不同盘面的扇区若能错位编号,连续读/写相邻两个盘面的逻辑记录时也能减少磁头延迟时间。
  以上图为例,在随机扇区访问情况下,定位磁道中的一个扇区平均需要转过4个扇区,这时,延迟时间是传输时间的4倍,这是一种非常低效的存取方式。理想化的情况是不需要定位而直接连续读取扇区,没有延迟时间,这样磁盘数据存取效率可以成倍提高。但由于读取扇区的顺序是不可预测的,所以延迟时间不可避免。图中的编号方式是读取连续编号扇区时的一种方法

  磁盘寻块时间分为三个部分,即寻道时间、延迟时间和传输时间,寻道时间和延迟时间属于“找”的时间,凡是“找”的时间都可以通过一定的方法削减,但传输时间是磁盘本身性质所决定的,不能通过一定的措施减少。

 4.3.3 磁盘的管理
  1.磁盘初始化

  一个新的磁盘只是一个含有磁性记录材料的空白盘。在磁盘能存储数据之前,它必须分成扇区以便磁盘控制器能进行读和写操作,这个过程称为低级格式化(物理分区)。 低级格式化为磁盘的每个扇区采用特别的数据结构。每个扇区的数据结构通常由头、数据区域(通常为512B大小)和尾部组成。头部和尾部包含了一些磁盘控制器所使用的信息。
  为了使用磁盘存储文件,OS还需要将自己的数据结构记录在磁盘上:第一步将磁盘分为由一个或多个柱面组成的分区(即C盘、D盘等形式的分区);第二步对物理分区进行逻辑格式化(创建文件系统),OS将初始的文件系统数据结构存储到磁盘上,这些数据结构包括空闲和已分配的空间及一个初始为空的目录。

  2.引导块

  计算机启动时需要运行一个初始化程序(自举程序),它初始化CPU、寄存器、设备控制器和内存等,接着启动OS。为此,该自举程序应找到磁盘上的OS内核,装入内存,并转到起始地址,从而开始OS的运行。
  自举程序通常保存在ROM中,为了避免改变自举代码而需要改变ROM硬件的问题,因此只在ROM中保留很小的自举装入程序,将完整功能的自举程序保存在磁盘的启动块上,启动块位于磁盘的固定位。拥有启动分区的磁盘称为启动磁盘或系统磁盘。


  引导控制块(Boot Control Block):
  包括系统从该分区引导OS所需要的信息。若磁盘没有OS,则这块的内容为空。它通常为分区的第一块。在UFS中称为引导块(Boot Block);在NTFS中称为分区引导扇区

  分区控制块(Partition Control Block):
  包括分区详细信息,如分区的块数、块的大小、空闲块的数量和指针、空闲FCB的数量和指针等。在UFS中称为超级块,而NTFS称为主控文件表


  3.坏块

  由于磁盘有移动部件且容错能力弱,因此容易导致一个或多个扇区损坏。根据所使用的磁盘和控制器,对这些块有多种处理方式。
  对于简单磁盘,如电子集成驱动器(IDE),坏扇区可手工处理,如MS-DOS的Format命令执行逻辑格式化时便会扫描磁盘以检查坏扇区。坏扇区在FAT表上会标明,因此程序不会使用。
  对于复杂的磁盘,如小型计算机系统接口(SCSI),其控制器维护一个磁盘坏块链表。该链表在出厂前进行低级格式化时就已格式化,并在磁盘的整个使用过程中不断更新。低级格式化将一些块保留作为备用,对OS透明。控制器可用备用块来逻辑地替代坏块,这种方案称为扇区备用。
  对坏块的处理实质上就是用某种机制,使系统不去使用坏块。坏块属于硬件故障,OS是不能修复坏块的。


  例题:磁盘是可共享设备,但在每个时刻()作业启动它
  A.可以由任意多个  B.能限定多个
  C.至少能由一个  D.至多能由一个

  答案:D;磁盘是分时共享的设备

  例题:在下列有关旋转延迟的叙述中,不正确的是()
  A.旋转延迟的大小与磁盘调度算法无关
  B.旋转延迟的大小取决于磁盘空闲空间的分配程序
  C.旋转延迟的大小与文件的物理结构有关
  D.扇区数据的处理时间对旋转延迟的影响较大

  答案:D;扇区数据的处理时间主要影响传输时间。文件的物理结构与磁盘空间的分配方式相对应,包括连续分配、链接分配和索引分配。连续分配的磁盘中,文件的物理地址连续;而链接分配方式的磁盘中,文件的物理地址不连续,因此与旋转延迟都有关。

  例题:系统总是访问磁盘的某个磁道而不响应对其他磁道的访问请求,这种现象称为磁臂黏着。下列磁盘调度算法中,不会导致磁臂黏着的是()
  A.FCFS算法  B.SSTF算法
  C.SCAN算法  D.CSCAN算法

  答案:A;当系统总是持续出现某个磁道的访问请求时,均持续满足SSTF、SCAN和C-SCAN的访问条件,会一直服务该访问请求。而FCFS按照请求次序进行调度,比较公平

  例题:在这里插入图片描述
  答案:(1)用位图表示磁盘的空闲状态。每位表示一个磁盘块的空闲状态。
  (2)20+90+20+40=170,总的移动磁道时间170ms;平均旋转延迟5ms,总旋转延迟20ms;总时间190.4ms
  (3)采用FCFS调度策略更高效。因为Flash半导体存储器的物理结构不需要考虑寻道时间和旋转延迟,可直接按I/O请求的先后顺序服务

  例题:假设磁盘的每个磁道分成9个块,现在一个文件有A,B,…,I共9条记录,每条记录的大小与块的大小相等,设磁盘转速为27ms/转,每读出一块后需要2ms的处理时间。若忽略其他辅助时间
  (1)若顺序存放这些记录顺序读取,处理该文件要多少时间
  (2)若要顺序读取该文件,记录如何存放处理时间最短

  答案:(1)读出并处理记录A需要5ms,此时读写头已转到记录B的中间,为了读出记录B,需再转接近1圈。读写头离开A需3ms,再需27ms使B第二次到达读写头。总时间:8x(27+3)+5=245ms
  (2)按下表顺序存放:
在这里插入图片描述
  总时间6x8+5=53ms。

  例题:在一个磁盘上,有1000个柱面,编号为0~999,用下面的算法计算为满足磁盘队列中的所有请求,磁盘臂必须移过的磁道的数目。假设最后服务的请求是在磁道345上,并且读写头正在朝磁道0移动。在按FIFO顺序排列的队列中包含了如下磁道上的请求:123,874,692,475,105,376
  (1)FIFO  (2)SSTF  (3)SCAN  (4)LOOK  (5)C-SCAN  (6)C-LOOK

  答案:(1)2013;(2)1298;(3)1219;(4)1009;(5)1967;(6)1507;

  例题:在这里插入图片描述
  答案:读一个扇区并将数据送入内存需要7.5ms,读所有扇区需要的时间:10+7.5x8=70ms;数据传输速率为4KB/0.07=58.5kB/s

  例题:某计算机系统中的磁盘有300个柱面,每个柱面有10个磁道,每个磁道有200个扇区,扇区大小为512B。文件系统的每个簇包含2个扇区。
  (1)磁盘的容量是多少
  (2)假设磁头在85号柱面上,此时有4个磁盘访问请求,簇号分别为100260,60005,101660和110560。采用SSTF调度算法,系统访问簇的先后次序是什么
  (3)第100530簇在磁盘上的物理地址是什么?将簇号转换成磁盘物理地址的过程是由I/O系统的什么程序完成的

  答案:(1)3x10^5KB;(2)100260,101660,110560,60005;
  (3)柱面号= ⌊ 簇 号 / 每 个 柱 面 的 簇 数 \lfloor簇号/每个柱面的簇数 / ⌋ \rfloor =100;
  磁头号= ⌊ 530 / 100 \lfloor530/100 530/100 ⌋ \rfloor =5
  扇区号=扇区地址%每个磁道的扇区数=(530x2)%200=60;
  将簇号转换成磁盘物理地址的过程由磁盘驱动程序完成


  设备驱动程序的处理过程:
  (1)将抽象要求转换为具体要求
  例如,将抽象要求中的盘块号转换为磁盘的盘面、磁道号及扇区
  (2)对服务请求进行校验
  (3)检查设备的状态
  (4)传送必要的参数
  (5)启动I/O设备


  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

happy19991001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值