# 文件管理

知识结构

  • 文件系统基础
    • 文件的概念;
    • 文件的逻辑结构:顺序文件,索引文件,索引顺序文件
    • 目录结构:文件控制块和索引节点,单级目录结构和两级目录结构
    • 树形目录结构,图形目录结构
    • 文件共享;
    • 文件保护:访问类型;访问控制
  • 文件系统实现
    • 文件系统层次结构;目录实现;文件实现
  • 磁盘组织和管理
    • 磁盘的结构;磁盘调度算法;磁盘的管理

# 4.1 文件系统基础

# 4.1.1 文件的概念

  1. 文件的定义

文件是操作系统中的一个重要概念。文件是以计算机硬盘为载体的存储在计算机上的信息集合,文件可以是文本文件、图片、程序等。

TIP

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

当用户将文件用于应用程序的输入,输出时,还希望可以访问文件、修改文件和保存文件等,实现对文件的维护管理,这就需要系统提供一个文件管理系统。操作系统中的文件系统就是用于实现用户的这些管理要求的。

了解文件由哪些东西组成。

  • 首先,文件中肯定包括一块存储空间,更准确地说,是存储空间中的数据;
  • 其次,由于操作系统要管理成千上万的数据,因此必定需要对这些数据进行划分,然后贴上标签,所以文件必定包含分类和索引的信息
  • 最后,不同的用户拥有对数据的不同访问权限,因此文件中一定包含一些关于范文权限的信息
  1. 文件的属性

文件具有一定的属性,系统不同,属性也会有所不同,但通常都包括如下属性。

  • 名称。文件名称唯一,以容易读取的形式保存。
  • 标识符。标识文件系统内文件的唯一标签
  • 类型。被支持不同类型的文件系统所使用
  • 位置。指向设备和设备上文的指针
  • 大小。文件当前大小
  • 保护。对文件进行保护的访问控制信息。
  • 时间、日期和用户标识。文件创建、上次修改和上次访问的相关信息

句柄和指针

在程序设计中,句柄(handle)是 Windows 操作系统用来标识被应用程序所创建或使用的对象的整数。其本质相当于带有引用计数的智能指针。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,可以使用句柄。

句柄

句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识

  1. 文件的基本操作

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

  • 创建文件。创建文件由两个必要步骤;一是在文件系统中找到空间;二是在目录中为新文件创建条目。
  • 写文件。为了写文件,执行一个系统调用,指明文件名称和要写入文件的内容。
  • 读文件。为了读文件,执行一个系统调用,指明文件名称和要读入文件块的内存位置。
  • 文件重定位(文件寻址)。按某条件搜索目录,将当前文件设为给定值
  • 删除文件。先从目录中找到要删除文件的目录项,使之称为空项,然后回收该文件所占的存储空间。
  • 截断文件。允许文件所有属性不变,并删除文件内容,即将其长度设为 0 并释放其空间
  1. 文件的打开与关闭

大部分操作系统要求在文件使用之前就被显式地打开。操作 open 会根据文件名搜索目录,并将目录条目复制到打开文件表。若调用 open 的请求得到允许,则进程就可打开文件,而 open 通常返回一个指向文件表中的一个条目的指针。

# 4.1.2 文件的逻辑结构

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

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

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

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

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

  • 顺序文件。文件中的记录一个接一个地顺序排列,记录通常是定长的,可以顺序存储或以链表形式存储
  • 索引文件。定长记录文件可以直接通过偏移地址找到,变长记录文件只能顺序查找,系统开销较大。为此,可以建立一张索引表以加快检索速度,索引表本身是定长记录的顺序文件。
  • 索引顺序文件。索引顺序文件是顺序和索引两种组织形式的结合。索引顺序文件将顺序文件中的所有记录分为若干组,为顺序文件记录一张索引表,在索引表中为每组的第一条记录建立一个索引项,其中含有该记录的关键字值和指向该记录的的指针。
  • 直接文件或散列文件。给定记录的键值或通过散列函数转换的键值直接决定记录的的物理地址。

# 4.1.3 目录结构

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

  1. 文件控制块和索引节点
  2. 目录结构

# 4.1.4 文件共享

文件共享使多个用户进程共享同一个文件,系统中只需保留该文件的一个副本。若系统不能提供共享功能,则每个需要该文件的用户都要有各自的副本,会造成对存储空间的极大浪费。

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

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

在树形结构的目录中,当有两个或多个用户要共享一个子目录或文件时,必须将共享文件或子目录链接到两个或多个用户的目录中,才能方便地找到该文件。
在这种共享方式中,诸如文件的物理地址及其他的文件属性等信息,不再放在目录项中,而放在索引节点中。文件的删除采取引用计数的策略。

  1. 基于符号链实现文件共享(软链接)

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

硬链接可认为是一个文件拥有两个文件名;而软链接则是系统新建一个链接文件,此文件指向其所要指的文件

# 4.1.5 文件保护

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

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

  • 其中,口令保护和加密保护是为了防止用户文件被他人存储或窃取
  • 而访问控制则用于控制用户对文件的访问方式。

# 4.2 文件系统实现

# 4.2.1 文件系统层次结构

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

  1. 用户调用接口。为用户提供与文件及目录有关的调用
  2. 文件目录系统。管理文件目录
  3. 存取控制验证。实现访问控制权限
  4. 逻辑文件系统与文件信息缓冲区
  5. 物理文件系统
  6. 辅助分配模块
  7. 设备管理程序模块

# 4.2.2 目录实现

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

# 4.2.3 文件实现

文件实际上是一种抽象数据类型,我们要研究它的逻辑机构,物理结构,以及关于它的一系列操作。文件的实现就是研究文件的物理结构,即文件数据在物理存储设备上是如何分布和组织的。

# 4.3 磁盘组织管理

# 4.3.1 磁盘的结构

磁盘是由表面涂有磁性物质的金属或塑料构成的圆形盘片,通过一个称为磁头的导体线圈从磁盘存取数据。

在读写操作器件,磁头固定,磁盘在下面高速旋转。磁盘盘面上的数据存储在一组同心圆中,称为磁道。每个磁道和磁头一样宽,一个盘面上有上千和磁道。

磁道又划分为几百个扇区,每个扇区固定存储大小,一个扇区称为一个盘块。相邻磁道及相邻扇区间通过一定的间隙分隔开,以避免精度错误。

# 4.3.2 磁盘调度算法

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

  • 寻道时间。启动磁臂的时间加上跨越 n 条磁道的时间
  • 延迟时间。磁头定位道某以扇区所需要的时间
  • 传输时间。从磁盘读取或写入数据所经历的时间。

目前常用的磁盘调度算法由以下几种。

  • 先来先服务 FCFS 太过简单,性能较差
  • 最短寻找时间优先 SSTF 较为通用和自然
  • 扫描算法(又称电梯调度算法)SCAN 磁盘负载较大时占优
  • 循环扫描算法 C-SCAN 磁盘负载较大时占优

# 4.3.3 磁盘的管理

  1. 磁盘初始化
  2. 引导块
  3. 坏块

# 4.3.4 固态硬盘

作为硬盘,存储单元绝对是核心器件。在固态硬盘里面,闪存颗粒则替代了机械磁盘成为了存储单元。