王道操作系统 第四章 文件管理

第四章:文件管理

知识框架

image-20210123193619328

4.1 文件系统基础

4.1.1 文件的概念

文件的定义

文件是以计算机硬盘为载体存储在计算机上的信息集合,可以是数字、字母或二进制代码,基本访问单元可以是字节、行或记录。文件可以长期存储于硬盘或其他二级存储器中,允许可控制的进程间共享访问,能够被组织成复杂的结构。

在系统运行时,计算机以进程为基本单位进行资源的调度和分配;而在用户进行的输入、输出中,则以文件为基本单位

文件系统(File System):操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需数据结构。

文件的结构

  1. 数据项
    • 数据项是文件系统中最低级的数据组织形式,可分为以下两种类型:
      • 基本数据项:用于描述一个对象的某种属性的一个值,如姓名 、日期或证件号等,是数据中可命名的最小逻辑数据单位,即原子数据。
      • 组合数据项:由多个基本数据项组成。
  2. 记录
    • 记录是一组相关的数据项的集合,用于描述 一个对象在某方面的属性,如一个考生报名记录包括考生姓名、出生日期、报考学校代号、身份证号等一系列域。
  3. 文件
    • 文件是指由创建者所定义的一组相关信息的集合,逻辑上可分为有结构文件和无结构文件两种:
      • 有结构文件:由 一组相似记录组成,又称记录式文件,如报考某学校的所有考生的报考信息记录。
      • 无结构文件:被看成是一个宇符流,又称流式文件,如一个二进制文件或字符文件。

文件的属性

文件有一定的属性,这根据系统的不同而有所不同,但是通常都包括如下属性:

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

所有文件的信息都保存在目录结构中,而目录结构也保存在外存上。文件信息当需要时再调入内存。

文件的基本操作

文件属于抽象数据类型。为了恰当地定义文件,就需要考虑有关文件的操作。 操作系统提供系统调用,它对文件进行创建、写、读、定位和截断。

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

文件的打开与关闭

一个进程打开一个文件,系统打开文件表就会为打开的文件增加相应的条目。当另一个进程执行open时, 只不过是在其进程打开表中增加一个条目, 并指向整个系统表的相应条目。 通常,系统打开文件表的每个文件时,还用一个文件打开计数器(Open Count),以记录多少进程打开了该文件。

每个关闭操作close 则使count递减,当打开计数器为0时,表示该文件不再被使用。 系统将回收分配给该文件的内存空间等资源,若文件被修改过,则将文件写回外存,并将系统打开文件表中相应条目删除, 最后释放文件的文件控制块(File Control Block, FCB)。

打开文件关联信息

  • 文件指针
    • 系统跟踪上次读写位置作为当前文件位置指针,这种指针对打开文件的某个进程来说是唯一的, 因此必须与磁盘文件属性分开保存。
  • 文件打开计数
    • 因为多个进程可能打开同一个文件,所以系统在删除打开文件条目之前,必须等待最后一个进程关闭文件。该计数器跟踪打开和关闭的数量, 当该计数为0时, 系统关闭文件,删除该条目。
  • 文件磁盘位置
    • 绝大多数文件操作都要求系统修改文件数据。该信息保存在内存中, 以免为每个操作都从磁盘中读取。
  • 访问权限
    • 每个进程打开文件都需要有一个访问模式(创建、只读、读写、添加等) 。 该信息保存在进程的打开文件表中,以便操作系统能允许或拒绝之后的I/O请求。

4.1.2 文件的逻辑结构

概述

文件的逻辑结构:是用户可见的结构,即用户使用文件的结构,与存储介质特性无关。

文件的物理结构:是文件在存储器上的组织结构,它表示了一个文件在辅存上安置、链接、编目的方法。它和文件的存取方法以及辅存设备的特性等都有着密切的联系。

单个文件的逻辑结构和物理结构之间虽无明显的制约或者关联的关系,但是如果物理结构选择不慎,也很难发挥出逻辑结构的特点。

按逻辑结构,文件有两种类型:无结构文件和有结构文件

无结构文件 (流式文件)

概述

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

优点:字符流的无结构文件管理简单,用户可以方便地对其进行操作。

缺点:没有结构,因而对记录的访问只能通过穷举搜索的方式,该形式对大多数应用不适用。

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

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

有结构文件按记录的组织形式可以分为:

顺序文件

文件中的记录一个接一个地顺序排列,记录通常是定长的,可以顺序存储或以链表形式存储,在访问时需要顺序搜索文件。

顺序文件两种结构

  • 串结构:记录之间的顺序与关键字无关。 通常由时间决定,即按存入时间的先后排列,最先存入的记录作为第1个记录,其次存入的为第 2 个记录,依此类推。
  • 顺序结构:指文件中的所有记录按关键宇顺序排列。
    • 优点:在对记录进行批量操作时,即每次要读或写一大批记录,对顺序文件的效率是所有逻辑文件中最高的;只有顺序文件才能存储在磁带上,并能有效地工作。
    • 缺点:顺序文件对查找、修 改、增加或删除单个记录的操作比较困难。

索引文件

变长记录文件只能顺序查找, 系统开销较大。为此,可以建立一张索引表以加快检索速度,索引表本身是定长记录的顺序文件

在记录很多或是访问要求高的文件中,需要引入索引以提供有效的访问。实际中,通过索引可以成百上千倍地提高访问速度。

image-20210124180848038

索引顺序文件

是顺序和索引两种组织形式的结合。索引顺序文件将顺序文件中的所有记录分为若干组,为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个索引项, 其中含有该记录的关键宇值和指向该记录的指针。

image-20210124181131181

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

直接文件或散列文件 (Hash File)

给定记录的键值或通过Hash函数转换的键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件,没有顺序的特性

散列文件有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同。

4.1.3 目录结构

概述

与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的信息,包括属性、位置和所有权等,这些信息主要由操作系统进行管理。

文件控制块和索引结点

与进程管理一样,为实现目录管理 ,操作系统中引入了文件控制块的数据结构。

文件控制块

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

FCB的有序集合称为文件目录,一个 FCB就是一个文件目录项。为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,成为目录项。

FCB 包含信息

  • 基本信息:如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等。

  • 存取控制信息:如文件存取权限等。

  • 使用信息:如文件建立时间、修改时间等。

索引结点

索引结点:文件描述信息单独形成的数据结构,简称为i结点。在文件目录中的每个目录项仅由文件名和指向该文件所对应的i结点的指针构成。

image-20210124185333540

存放在磁盘上的索引结点称为磁盘索引结点, UNIX 中的每个文件都有一个唯一的磁盘索引结点,主要包括以下几个方面:

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

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

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

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

  • 文件长度:以字节为单位。

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

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

文件被打开时 ,磁盘索引结点复制到内存的索引结点中,以便于使用。在内存索引结点中又增加了以下内容 :

  • 索引结点编号:用于标识内存索引结点。

  • 状态:指示i结点是否上锁或被修改。

  • 访问计数:每当有一进程要访问此i结点时,计数加1。

  • 逻辑设备号:文件所属文件系统的逻辑设备号。

  • 链接指针:设置分别指向空闲链表和散列队列的指针。

目录结构

操作时,考虑以下几种目录结构:

单级目录结构

在整个文件系统中只建立一张目录表,每个文件占一个目录项。

image-20210125090350453

优点:单级目录结构实现了“按名存取”。

缺点:存在查找速度慢、文件不允许重名、不便于文件共享等缺点,而且对于多用户的操作系统显然是不适用的。

两级目录结构

单级目录很容易造成文件名称的混淆,可以考虑采用两级方案,将文件目录分成主文件目录 (Master File Directory, MFD)用户文件目录(User File Directory, UFD) 两级:

  • 主文件目录:记录用户名及相应用户文件目录所在的存储位置。

  • 用户文件目录:记录该用户文件的FCB信息 。

image-20210125091138126

优点:两级目录结构可以解决多用户之间的文件重名问题,文件系统可以在目录上实现访问限制。

缺点:两级目录结构缺乏灵活性,不能对文件分类。

多级目录结构

将两级目录结构的层次关系加以推广,就形成了多级目录结构,又称树形目录结构。用户要访问某个文件时用文件的路径名标识文件,文件路径名是个字符串。

绝对路径:由从根目录出发到所找文件的路径,由路径上所有目录名、数据文件名通过分隔符 “/” 链接起来而成。

相对路径:从当前目录 (避免当层次较多时,每次从根目录查询浪费时间) 出发到所找文件的路径,由路径上所有目录名、数据文件名通过分隔符 “/” 链接而成。进程对各文件的访问都是相对于当前目录进行的

image-20210125093836529

优点:可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。

缺点:在树形目录中查找一个文件,需要按路径名逐级访问中间结点,这就增加了磁盘访问次数,影响查询速度。

环图目录结构

树形目录结构可便于实现文件分类,但不便于实现文件共享,为此在树形目录结构的基础上增加了一些指向同一结点的有向边,使整个目录成为一个有向无环图,实现文件共享。

image-20210125094848073

优点:共享文件(或目录 )不同于文件拷贝(副本),对于共享文件,只存在一个真正文件,任何改变都会为其他用户所见。

缺点:无环图目录结构方便实现了文件的共享,但使得系统的管理变得更加复杂。

4.1.4 文件共享

现代常用的两种文件共享方法:

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

  • 在树形结构的目录中,文件的物理地址及其他的文件属性等信息,不再是放在目录项中,而是放在索引结点中。

  • 在文件目录中只设置文件名及指向相应索引结点的指针。同时索引结点中还有一个链接计数count,用于表示链接到本索引结点(亦即文件)上的用户目录项的数目。

  • 当有两个或多个用户要共享一个子目录或文件时,通过将共享文件或子目录索引结点链接到两个或多个用户的目录中实现。

image-20210125100657468

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

为使用户 B 能共享用户A的一个文件 F,可以由系统创建一个 LINK 类型的新文件,也取名为 F,并将文件 F 写入用户 B 的目录中,以实现用户 B 的目录与文件 F 的链接 。在新文件中只包含被链接文件 F 的路径名。这样的链接方法被称为符号链接

image-20210125100951165

新文件中的路径名则只被看做是符号链,当用户B要访问被链接的文件F且正要读LINK类新文件时,操作系统根据新文件中的路径名去读该文件,从而实现了用户B对文件F的共享。

优点:网络共享只需提供该文件所在机器的网络地址以及该机器中的文件路径即可。

缺点:每次访问时,都可能要多次地读盘(由于每个共享文件都有几个文件名,当去遍历整个文件系统时,将会多次遍历到该共享文件),使得访问文件的开销变大并增加了启动磁盘的频率;符号链的索引结点也要耗费一定的磁盘空间。

硬链接 & 软链接 比较

共同:硬链接和软链接都是文件系统中的静态共享方法

区别:硬链接就是多个指针指向一个索引结点,保证只要还有一个指针指向索引结点,索引结点就不能删除;软链接就是把到达共享文件的路径记录起来,当要访问文件的时候,根据路径寻找文件。所以硬链接的查找速度会比软链接快

4.1.5 文件保护

背景

为了防止文件共享可能会导致文件被破坏或未经核准的用户修改文件,文件系统必须控制用户对文件的存取,即解决对文件的读、写、执行的许可问题。为此,必须在文件系统中建立相应的文件保护机制。

文件保护通过 口令保护 、 加密保护和访问控制 等方式实现。

口令保护和加密保护:为了防止用户文件被他人存取或窃取。

访问控制:用于控制用户对文件的访问方式。

访问类型

对文件的保护可以从限制对文件的访问类型中出发。可加以控制的访问类型主要有以下几种:

  • 读:从文件中读。
  • 写:向文件中写。
  • 执行:将文件装入内存并执行。
  • 添加:将新信息添加到文件结尾部分。
  • 删除:删除文件,释放空间。
  • 列表清单:列出文件名和文件属性。

此外还可以对文件的重命名复制编辑等加以控制。这些高层的功能可以通过系统程序调用低层系统调用来实现。保护可以只在低层提供。

访问控制

解决访问控制最常用的方法是根据用户身份进行控制。 而实现基于身份访问的最为普通的方法是为每个文件和目录增加一个访问控制列表(Access-Control List, ACL),以规定每个用户名及其所允许的访问类型。

优点:可以使用复杂的访问方法。

缺点:长度无法预计并且可能导致复杂的空间管理。

解决:使用精简的访问列表。

1、精简的访问列表

精简的访问列表采用拥有者、组和其他三种用户类型,这样只需用三个域列出访问表中这三类用户的访问权限即可。

  • 拥有者:创建文件的用户。

  • 组:一组需要共享文件且具有类似访问的用户。

  • 其他:系统内的所有其他用户。

2、口令

指用户在建立一个文件时提供一个口令,系统为其建立 FCB 时附上相应口令,同时告诉允许共享该文件的其他用户。用户请求访问时必须提供相应口令。

这种方法时间和空间的开销不多,缺点是口令直接存在系统内部,不够安全。

3、密码

指用户对文件进行加密,文件被访问时需要使用密钥。 这种方法保密性强,节省了存储空间,不过编码和译码要花费一定时间。

口令和密码都是防止用户文件被他人存取或窃取,并没有控制用户对文件的访问类型。

注意

1、现代操作系统常用的文件保护方法,是将访问控制列表与用户、组和其他成员访问控制方案一起组合使用。

2、对于多级目录结构而言,不仅需要保护单个文件,而且还需要保护子目录内的文件,即需要提供目录保护机制。目录操作与文件操作并不相同 ,因此需要不同的保护机制。

4.1.6 小结

文件系统要完成功能

对于用户而言

  • 最主要的功能就是实现对文件的基本操作,让用户可以按名存储和查找文件 ,组织成合适的结构。
  • 具有基本的文件共享和文件保护的功能。

对于操作系统而言

  • 管理与磁盘的信息交换,完成文件逻辑结构和物理结构上的变换。

  • 组织文件在磁盘上的存放,采取好的文件排放顺序和磁盘调度方法以提升整个系统的性能。

知识架构图

image-20210125110042587

4.2 文件系统实现

4.2.1 文件系统层次结构

现代操作系统有多种文件系统类型(如 FAT32、 NTFS、 ext2、 ext3、 ext4 等),因此文件系统的层次结构也不尽相同。

image-20210125110519413
  1. 用户调用接口
    • 文件系统为用户提供与文件及目录有关的调用。此层由若干程序模块组成,每一模块对应一条系统调用,用户发出系统调用时,控制即转入相应的模块。
  2. 文件目录系统
    • 文件目录系统的主要功能是管理文件目录,其任务有管理活跃文件目录表、管理读写状态信息表、管理用户进程的打开文件表、管理与组织在存储设备上的文件目录结构、调用下一级存取控制模块。
  3. 存取控制验证
    • 实现文件保护主要由该级软件完成,它把用户的访问要求与FCB中指示的访问控制权限进行比较,以确认访问的合法性。
  4. 逻辑文件系统与文件信息缓冲区
    • 逻辑文件系统与文件信息缓冲区的主要功能,是根据文件的逻辑结构将用户要读写的逻辑记录转换成文件逻辑结构内的相应块号。
  5. 物理文件系统
    • 物理文件系统的主要功能是把逻辑记录所在的相对块号转换成实际的物理地址。
  6. 分配模块
    • 分配模块的主要功能是管理辅存空间,即负责分配辅存空闲空间和回收辅存空间。
  7. 设备管理程序模块
    • 设备管理程序模块的主要功能是分配设备、分配设备读写用缓冲区、磁盘调度、启动设备、处理设备中断、释放设备读写缓冲区、释放设备等。

4.2.2 目录实现

概述

在读文件前,必须先打开文件。打开文件时,操作系统利用路径名找到相应目录项,目录项中提供了查找文件磁盘块所需要的信息。

目录实现的基本方法有线性列表和哈希表两种, 要注意目录的实现就是为了查找 , 因此线性列表实现对应线性查找,哈希表的实现对应散列查找。

线性列表

最简单的目录实现方法是使用存储文件名和数据块指针的线性表。

优点:实现简单。

缺点:由于线性表的特殊性,比较费时。

哈希表

哈希表根据文件名得到一个值,并返回一个指向线性列表中元素的指针。

优点:查找非常迅速,插入和删除也较简单,不过需要一些预备措施来避免冲突。

缺点: 目录查询是通过在磁盘上反复搜索完成,需要不断地进行 I/O 操作, 开销较大。

4.2.3 文件实现

概述

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

文件分配方式

文件分配对应于文件的物理结构,指如何为文件分配磁盘块。常用的磁盘空间分配方法有三种 : 连续分配、链接分配和索引分配。 有的系统(如 RDOS 操作系统)对三种方法都支持, 但是更普遍的是一个系统只提供一种方法的支持。

连续分配

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

image-20210125141720808

文件的连续分配可以用第一块的磁盘地址和连续块的数量来定义。一个文件的目录条目包括开始块的地址和该文件所分配区域的长度。

连续分配支持顺序访问和直接访问

优点:实现简单、 存取速度快。

缺点:文件长度不宜动态增加;反复增删文件后会产生外部碎片。

应用:只适用于长度固定的文件。

链接分配

链接分配是采取离散分配的方式,消除了外部碎片,故而显著地提高了磁盘空间的利用率;又因为是根据文件的当前需求,为它分配必需的盘块,当文件动态增长时,可以动态地再为它分配盘块,故而无需事先知道文件的大小。此外,对文件的增、删、改也非常方便。

链接分配又可以分为隐式链接和显式链接两种形式

  • 隐式链接

    • 每个文件对应一个磁盘块的链表;磁盘块分布在磁盘的任何地方, 除最后一个盘块外,每一个盘块都有指向下一个盘块的指针,这些指针对用户是透明的。目录包括文件第一块的指针和最后一块的指针。
    • 缺点:无法直接访问盘块,只能通过指针顺序访问文件;盘块指针消耗了一定的存储空间;稳定性不高。
image-20210125142333996
  • 显式链接

    • 是指把用于链接文件各物理块的指针,从每个物理块的块末尾中提取出来,显式地存放在内存的一张链接表中。由于分配给文件的所有盘块号都放在该表中,故称该表为文件分配表 (File Allocation Table, FAT)
    • 优点:由于查找记录的过程是在内存中进行的,因而不仅显著地提高了检索速度,而且大大减少了访问磁盘的次数。

索引分配

链接分配解决了连续分配的外部碎片和文件大小管理的问题。但是,链接分配不能有效支持直接访问(FAT除外)。 索引分配解决了这个问题,它把每个文件的所有的盘块号都集中放在一起构成索引块(表)。每个文件都有其索引块,这是一个磁盘块地址的数组。

image-20210125170721824

优点:索引分配支持直接访问,且没有外部碎片问题。

缺点:由于索引块的分配,增加了系统存储空间的开销。

优化:

  • 链接方案
    • 一个索引块通常为一个磁盘块,因此它本身能直接读写。为了处理大文件, 可以将多个索引块链接起来。
  • 多层索引
    • 多层索引使第一层索引块指向第二层的索引块,第二层索引块再指向文件块。这种方法根据最大文件大小的要求,可以继续到第二层或第四层。
  • 混合索引
    • 将多种索引分配方式相结合的分配方式。
image-20210125172917210

访问文件需要两次访问外存一首先要读取索引块的内容,然后再访问具体的磁盘块,因而降低了文件的存取速度。为了解决这一问题,通常将文件的索引块读入内存的缓冲区中,以加快文件的访问速度。

文件存储空间管理

文件存储器空间的划分与初始化

一般来说, 一个文件存储在一个文件卷中。文件卷可以是物理盘的一部分,也可以是整个物理盘,支持超大型文件的文件卷也可以由多个物理盘组成。

在一个文件卷中,文件数据信息的空间 (文件区) 和存放文件控制信息FCB的空间 (目录区) 是分离的。

image-20210126000550283

文件存储器空间管理

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

  1. 空闲表法
    • 空闲表法属于连续分配方式,它与内存的动态分配方式类似,为每个文件分配一块连续的存储空间。系统为外存上的所有空闲区建立一张空闲盘块表,每个空闲区对应于一个空闲表项,其中包括表项序号、该空闲区第一个盘块号、该区的空闲盘块数等信息。再将所有空闲区按其 起始盘块号递增的次序排列。
    • 空闲盘区的分配与内存的动态分配类似,同样是采用首次适应算法、循环首次适应算法等。
    • 系统在对用户所释放的存储空间进行回收时,也采取类似于内存回收的方法,即要考虑、回收区是否与空闲表中插入点的前区和后区相邻接,对相邻接者应予以合并。
image-20210126001810258
  1. 空闲链表法

    • 将所有空闲盘区拉成一条空闲链,根据构成链所用的基本元素不同,可把链表分成两种形式:空闲盘块链和空闲盘区链
    • 空闲盘块链:将磁盘上的所有空闲空间,以盘块为单位拉成一条链。这种方法的优点是分配和回收一个盘块的过程非常简单,但在为一个文件分配盘块时,可能要重复多次操作。
    • 空闲盘区链:将磁盘上的所有空闲盘区 (每个盘区可包含若干个盘块) 拉成一条链。分配盘区的方法与内存的动态分区分配类似,通常采用首次适应算法。在回收盘区时,同样也要将回收区与相邻接的空闲盘区相合井。
  2. 位示图法

    • 利用二进制的一位来表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有一个二进制位与之对应。当其值为 “0”时,表示对应的盘块空闲;当其值为“1”时,表示对应的盘块己分配
image-20210126003102517
  • 盘块的分配

    1. 顺序扫描位示图,从中找出一个或一组其值为“0”的二进制位。
    2. 将所找到的一个或一组二进制位,转换成与之对应的盘块号。
    3. 修改位示图,令 m a p [ i , j ] = 1 map[i,j]=1 map[i,j]=1
  • 盘块的回收

    1. 将回收盘块的盘块号转换成位示图中的行号和列号。
    2. 修改位示图,令 m a p [ i , j ] = 0 map[i,j]=0 map[i,j]=0
  1. 成组链接法

    • 把顺序的n个空闲扇区地址保存在第一个空闲扇区内,其后一个空闲扇区内则保存另一顺序空闲扇区的地址,如此继续,直至所有空闲扇区均予以链接。 系统只需要保存一个指向第一个空闲扇区的指针。通过这种方式可以迅速找到大批空闲块地址。
image-20210126101409548

知识架构

image-20210126101950679

4.3 磁盘组织与管理

4.3.1 磁盘的结构

概述

磁盘( Disk):是由表面涂有磁性物质的金属或塑料构成的圆形盘片,通过一个称为磁头的导体线圈从磁盘中存取数据。读/写操作期间, 磁头固定, 磁盘在下面高速旋转。

磁道:指磁盘盘面上的数据存储所在的同心圆区域,每个磁道与磁头一样宽, 一个盘面有上千个磁道。

扇区:由磁道划分而成,每个扇区固定存储大小(通常为512B),一个扇区又称为一个盘块。扇区就是磁盘可寻址的最小存储单位,磁盘地址用 “柱面号 盘面号扇区号(或块号)” 表示。

扇区按固定圆心角度划分,所以密度从最外道向里道增加,磁盘的存储能力受限于最内道的最大记录密度

image-20210126104707131

磁盘安装在一个磁盘驱动器中,它由磁头臂、用于旋转磁盘的主轴和用于数据输入/输出的电子设备组成。

磁盘类型

  • 固定头磁盘:磁盘磁头相对于盘片的径向方向固定。
  • 活动头磁盘:磁盘磁头臂可以来回伸缩定位磁道。
  • 固定盘磁盘:磁盘永久固定在磁盘驱动器内。
  • 可换盘磁盘:磁盘可移动和替换。
image-20210126105639204

4.3.2 磁盘调度算法

磁盘读写操作时间计算

一次磁盘读写操作的时间由寻找(寻道)时间、延迟时间和传输时间决定

  1. **寻找时间Ts **
    • 说明:活动头磁盘在读写信息前,将磁头移动到指定磁道所需要的时间 (这个时间除跨越n条磁道的时间外,还包括启动磁臂的时间s) 。
    • 计算: T s = m ∗ n + s T_s=m*n+s Ts=mn+s(m是与磁盘驱动器速度有关的常数,约为 0.2ms,磁臂的启动时间约为2ms)
  2. 延迟时间Tr
    • 说明:磁头定位到某一磁道的扇区 (块号) 所需要的时间。
    • 计算: T r = 1 2 r T_r=\frac{1}{2r} Tr=2r1 (设磁盘的旋转速度为r)
      • 对于硬盘,典型的旋转速度为 5400r/m,相当于一周11.1ms,则 Tr 为5.55ms。
      • 对于软盘,其旋转速度在 300~600r/m之间,则 Tr 为 50~l00ms。
  3. 传输时间 Tt
    • 说明:从磁盘读出或向磁盘写入数据所经历的时间,这个时间取决于每次所读/写 的字节数b和磁盘的旋转速度。
    • 公式: T t = b 2 r N T_t=\frac{b}{2rN} Tt=2rNb (r为磁盘每秒钟的转数,N为磁道上的字节数)

延迟时间、传输时间与磁盘旋转速度为线性相关,所以在硬件上,转速是磁盘性能的一个非常重要的参数。

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

常用的磁盘调度算法

  1. 先来先服务 (FirstCome First Served, FCFS) 算法
    • FCFS 算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法。
    • 该算法的优点是具有公平性,但在性能上往往接近于随机调度。所以实际磁盘调度中会考虑一些更为复杂的调度算法。
image-20210126140050650
  1. 最短寻找时间优先 (Shortest Seek Time First, SSTF) 算法

    • SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短。
    • 选择最小寻找时间并不能保证平均寻找时间最小,但是能提供比 FCFS 算法更好的性能。这种算法会产生“饥饿”现象
  2. 扫描 (SCAN) 算法 (又称电梯算法)

    • SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,实际上就是在最短寻找时间优先算法的基础上规定了磁头运动的方向,由于磁头移动规律与电梯运行相似,故又称为电梯调度算法。
    • SCAN算法对最近扫描过的区域不公平,因此,它在访问局部性方面不如FCFS算法和SSTF算法好。
image-20210126142242087
  1. 循环扫描 (Circular SCAN, C-SCAN) 算法

    • 在扫描算法的基础上规定磁头单向移动来提供服务, 回返时直接快速移动至起始端而不服务任何请求。由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的C-SCAN算法来避免这个问题。
image-20210126142924323
- 磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点。这种形式的 SCAN 算法和 C-SCAN 算法称为**LOOK 和 C-LOOK 调度**。 这是因为它们在朝一个给定方向移动前会查看是否有请求。
image-20210126142950993

对比以上几种磁盘调度算法,FCFS算法太过简单,性能较差,仅在请求队列长度接近于1时才较为理想;SSTF算法较为通用和自然;SCAN算法和 C-SCAN 算法在磁盘负载较大时比较占优势。

image-20210126145853481

除减少寻找时间外,减少延迟时间也是提高磁盘传输效率的重要因素。可以对盘面扇区进行交替编号,对磁盘片组中的不同盘面错位命名

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

4.3.3 磁盘的管理

磁盘初始化

一个新的磁盘只是一个含有磁性记录材料的空白盘。在磁盘能存储数据之前,它必须分成扇区以便磁盘控制器能进行读和写操作,这个过程称为低级格式化 (物理分区)

低级格式化为磁盘的每个扇区采用特别的数据结构。每个扇区的数据结构通常由头、数据区域 (通常为512B 大小) 和尾部组成。头部和尾部包含了一些磁盘控制器所使用的信息。

操作系统在磁盘上记录自身数据结构过程

  1. 将磁盘分为由一个或多个柱面组成的分区 (即我们熟悉的C盘、D盘等形式的分区) 。
  2. 对物理分区进行逻辑格式化 (创建文件系统),操作系统将初始的文件系统数据结构存储到磁盘上,这些数据结构包括空闲和己分配的空间以及一个初始为空的目录。

引导块

计算机启动时需要运行一个初始化程序 (自举程序),它初始化 CPU、寄存器、设备控制器和内存等,接着启动操作系统。

自举程序通常保存在 ROM 中,为了避免改变自举代码需要改变ROM硬件的问题,故只在ROM中保留很小的自举装入程序, 将完整功能的自举程序保存在磁盘的启动块上,启动块位于磁盘的固定位。拥有启动分区的磁盘称为启动磁盘或者系统磁盘

坏块

由于磁盘有移动部件且容错能力弱,所以容易导致一个或多个扇区损坏。部分磁盘甚至从出厂时就有坏扇区。根据所使用的磁盘和控制器,对这些块有多种处理方式:

  • 对于简单磁盘:如电子集成驱动器(IDE)。 坏扇区可手工处理,如 MS-DOS 的Format命令执行逻辑格式化时便会扫描磁盘以检查坏扇区。坏扇区在 FAT表上会标明,因此程序不会使用。
  • 对于复杂磁盘:如小型计算机系统接口( SCSI ),其控制器维护一个磁盘坏块链表。该链表在出厂前进行低级格式化时就初始化了,并在磁盘的整个使用过程中不断更新。
    • 低级格式化将一些块保留作为备用,对操作系统透明。控制器可以用备用块来逻辑地替代坏块,这种方案称为扇区备用

对坏块的处理实质上就是用某种机制,使系统不去使用坏块。坏块属于硬件故障,操作系统是不能修复坏块的

4.3.4 小结

知识架构

image-20210126153924683

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值