7.1 文件和文件系统

L41

学习目标

文件是逻辑上相关的数据项集合,文件系统管理文件的存储、检索和共享。

  • 数据项、记录和文件:数据项是基本单位,记录是相关数据项的集合,文件是相关记录的集合。
  • 文件名和类型:按用途分系统文件/库文件/用户文件,按性质分普通文件/目录文件/特殊文件。
  • 文件系统模型:对象(文件/目录/磁盘存储空间)及其属性、对对象操纵管理的软件集合、用户接口。

原理 · 深入理解

文件系统层次 用户接口:open / read / write 目录 · 权限 · 共享 逻辑文件:流 / 记录 物理块分配 设备 / Flash 本课规划 RAMFS,完整磁盘 FS 以动画为主

7.1 文件和文件系统

本节概览:先建立「文件和文件系统」的框架,再依次展开下列小节。

  1. 数据项、记录和文件
  2. 文件名和类型
  3. 文件系统的层次结构
  4. 文件操作

7.1.1 数据项、记录和文件

在文件系统中,数据项是最低级的数据组织形式,可分成以下两种类型。

记录是一组相关数据项的集合,用于描述一个对象在某方面的属性。一个记录应包含哪些数据项取决于需要描述对象的哪个方面。

在诸多记录中,为能唯一标识一个记录,必须在一个记录的各个数据项中确定出一个或几个数据项,把它们的集合称为关键字(Key)。

  1. 组合数据项:由若干个基本数据项组成,简称组项
  2. 基本数据项:用于描述一个对象某种属性的字符集,是数据组织中可命名的最小逻辑数据单位,又称字段;除数据名外还应有数据类型

文件是指由创建者所定义的、具有文件名的一组相关元素的集合,可分为有结构文件和无结构文件两种。

文件的属性包括文件类型、文件长度、文件的物理位置、文件的建立时间。

图7-1 文件、记录和数据项之间的层次关系 文件 记录 数据项
图7-1 文件、记录和数据项之间的层次关系

7.1.2 文件名和类型

按存取控制属性分类,根据系统管理员或用户所规定的存取控制属性分类。

  1. 只执行文件:只允许被核准的用户调用执行,不允许读和写
  2. 只读文件:只允许文件主及被核准的用户读,不允许写
  3. 读写文件:允许文件主和被核准的用户读或写

按文件中数据的形式分类,也可把文件分为三类。

  1. 源文件:由源程序和数据构成的文件,通常由终端或输入设备输入的源程序和数据形成,由ASCII码或汉字组成
  2. 目标文件:源程序经编译程序编译过、但尚未经链接程序链接的目标代码构成的文件,后缀名是.obj
  3. 可执行文件:编译后产生的目标代码经链接程序链接后形成的文件,后缀名是.exe

按组织形式和处理方式分类,根据文件的组织形式和系统对其处理方式的不同,可将文件分为三类。

  1. 普通文件:由ASCII码或二进制码组成的字符文件
  2. 目录文件
  3. 特殊文件

按用途分类,根据文件的性质和用途不同,可将文件分为三类。

  1. 系统文件:由系统软件构成的文件。大多数系统文件只允许用户调用,不允许读,更不允许修改;有的系统文件不直接对用户开放
  2. 用户文件:由用户的源代码、目标文件、可执行文件或数据等构成的文件,由用户委托系统保管
  3. 库文件:由标准子例程及常用的例程等构成的文件,允许用户调用但不允许修改

7.1.3 文件系统的层次结构

该层是文件管理系统的核心部分。文件系统的功能大多在这一层实现。

  1. 对文件存储空间的管理
  2. 对文件目录的管理
  3. 用于将文件的逻辑地址转换为物理地址的机制
  4. 对文件读和写的管理
  5. 对文件的共享与保护等功能
图7-2 文件系统模型 对象及属性 管理软件 用户接口
图7-2 文件系统模型

为方便用户使用,文件系统以接口形式提供一组对文件和记录操作的方法和手段,通常是下面两种类型的接口。

  1. 命令接口:作为用户与文件系统直接交互的接口,用户可通过键盘终端键入命令取得文件系统服务
  2. 程序接口:作为用户程序与文件系统的接口,用户程序可通过系统调用取得文件系统服务,如创建文件的系统调用Creat、打开文件的系统调用Open等
树形目录 / etc home dev alice bob 路径名:绝对 /home/alice · 相对 ../bob

文件系统的模型可分为三个层次:最底层是对象及其属性,中间层是对对象进行操纵和管理的软件集合,最高层是文件系统提供给用户的接口。

文件管理系统管理的对象如下:

  1. 磁盘(磁带)存储空间

7.1.4 文件操作

  1. 创建文件
  2. 删除文件
  3. 读文件
  4. 写文件
  5. 设置文件的读/写位置

OS为用户提供了一系列文件操作的系统调用,其中最常用的一类是有关文件属性的操作,即允许用户直接设置和获得文件属性,如改变已存文件的文件名、改变文件拥有者、改变对文件的访问权,以及查询文件状态(包括文件类型、大小、拥有者及访问权等)。

另一类是有关目录的操作,如创建目录、删除目录、改变当前目录和工作目录等。此外还有用于实现文件共享的系统调用,以及用于对文件系统进行操作的系统调用等。

OS 为用户提供一系列文件操作的系统调用。最常用的是有关文件属性的操作:设置和获得文件属性,如改变文件名、改变拥有者、改变访问权、查询文件状态等。

另一类是目录操作:创建目录、删除目录、改变当前目录等。此外还有实现文件共享和对文件系统进行操作的系统调用。

做 · 交互动画

  • 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
  • 写出 RAMFS 的最小 API 列表与数据结构草图。

文件和文件系统

disk-elevator

用控件单步操作;日志区记下每一步发生了什么。

总结与提升

  • 能解释路径名解析步骤。
  • 能用自己的话复述学习目标,并指出概念与板上实验的对应。
  • 能说出一种提高 Flash 寿命的软件策略。
  • 能说明位图一项代表什么。
  • 能指出 Flash 与磁盘的一个关键差异。
  • 能说出文件相对「裸扇区」的好处。
  • 设计稿含 create/read/write/list。

延伸思考

  • 扁平「对象键值存储」算目录吗?
  • 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?
  • 断电瞬间写元数据为何危险?
  • 掉电时位图一致性怎么办(导读 8.5)?

← 本阶段封面 · 课程列表