7.1 文件和文件系统
L41
学习目标
文件是逻辑上相关的数据项集合,文件系统管理文件的存储、检索和共享。
- 数据项、记录和文件:数据项是基本单位,记录是相关数据项的集合,文件是相关记录的集合。
- 文件名和类型:按用途分系统文件/库文件/用户文件,按性质分普通文件/目录文件/特殊文件。
- 文件系统模型:对象(文件/目录/磁盘存储空间)及其属性、对对象操纵管理的软件集合、用户接口。
原理 · 深入理解
7.1 文件和文件系统
本节概览:先建立「文件和文件系统」的框架,再依次展开下列小节。
- 数据项、记录和文件
- 文件名和类型
- 文件系统的层次结构
- 文件操作
7.1.1 数据项、记录和文件
在文件系统中,数据项是最低级的数据组织形式,可分成以下两种类型。
记录是一组相关数据项的集合,用于描述一个对象在某方面的属性。一个记录应包含哪些数据项取决于需要描述对象的哪个方面。
在诸多记录中,为能唯一标识一个记录,必须在一个记录的各个数据项中确定出一个或几个数据项,把它们的集合称为关键字(Key)。
- 组合数据项:由若干个基本数据项组成,简称组项
- 基本数据项:用于描述一个对象某种属性的字符集,是数据组织中可命名的最小逻辑数据单位,又称字段;除数据名外还应有数据类型
文件是指由创建者所定义的、具有文件名的一组相关元素的集合,可分为有结构文件和无结构文件两种。
文件的属性包括文件类型、文件长度、文件的物理位置、文件的建立时间。
7.1.2 文件名和类型
按存取控制属性分类,根据系统管理员或用户所规定的存取控制属性分类。
- 只执行文件:只允许被核准的用户调用执行,不允许读和写
- 只读文件:只允许文件主及被核准的用户读,不允许写
- 读写文件:允许文件主和被核准的用户读或写
按文件中数据的形式分类,也可把文件分为三类。
- 源文件:由源程序和数据构成的文件,通常由终端或输入设备输入的源程序和数据形成,由ASCII码或汉字组成
- 目标文件:源程序经编译程序编译过、但尚未经链接程序链接的目标代码构成的文件,后缀名是.obj
- 可执行文件:编译后产生的目标代码经链接程序链接后形成的文件,后缀名是.exe
按组织形式和处理方式分类,根据文件的组织形式和系统对其处理方式的不同,可将文件分为三类。
- 普通文件:由ASCII码或二进制码组成的字符文件
- 目录文件
- 特殊文件
按用途分类,根据文件的性质和用途不同,可将文件分为三类。
- 系统文件:由系统软件构成的文件。大多数系统文件只允许用户调用,不允许读,更不允许修改;有的系统文件不直接对用户开放
- 用户文件:由用户的源代码、目标文件、可执行文件或数据等构成的文件,由用户委托系统保管
- 库文件:由标准子例程及常用的例程等构成的文件,允许用户调用但不允许修改
7.1.3 文件系统的层次结构
该层是文件管理系统的核心部分。文件系统的功能大多在这一层实现。
- 对文件存储空间的管理
- 对文件目录的管理
- 用于将文件的逻辑地址转换为物理地址的机制
- 对文件读和写的管理
- 对文件的共享与保护等功能
为方便用户使用,文件系统以接口形式提供一组对文件和记录操作的方法和手段,通常是下面两种类型的接口。
- 命令接口:作为用户与文件系统直接交互的接口,用户可通过键盘终端键入命令取得文件系统服务
- 程序接口:作为用户程序与文件系统的接口,用户程序可通过系统调用取得文件系统服务,如创建文件的系统调用Creat、打开文件的系统调用Open等
文件系统的模型可分为三个层次:最底层是对象及其属性,中间层是对对象进行操纵和管理的软件集合,最高层是文件系统提供给用户的接口。
文件管理系统管理的对象如下:
- 磁盘(磁带)存储空间
7.1.4 文件操作
- 创建文件
- 删除文件
- 读文件
- 写文件
- 设置文件的读/写位置
OS为用户提供了一系列文件操作的系统调用,其中最常用的一类是有关文件属性的操作,即允许用户直接设置和获得文件属性,如改变已存文件的文件名、改变文件拥有者、改变对文件的访问权,以及查询文件状态(包括文件类型、大小、拥有者及访问权等)。
另一类是有关目录的操作,如创建目录、删除目录、改变当前目录和工作目录等。此外还有用于实现文件共享的系统调用,以及用于对文件系统进行操作的系统调用等。
OS 为用户提供一系列文件操作的系统调用。最常用的是有关文件属性的操作:设置和获得文件属性,如改变文件名、改变拥有者、改变访问权、查询文件状态等。
另一类是目录操作:创建目录、删除目录、改变当前目录等。此外还有实现文件共享和对文件系统进行操作的系统调用。
做 · 交互动画
- 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
- 写出 RAMFS 的最小 API 列表与数据结构草图。
文件和文件系统
disk-elevator
用控件单步操作;日志区记下每一步发生了什么。
总结与提升
- 能解释路径名解析步骤。
- 能用自己的话复述学习目标,并指出概念与板上实验的对应。
- 能说出一种提高 Flash 寿命的软件策略。
- 能说明位图一项代表什么。
- 能指出 Flash 与磁盘的一个关键差异。
- 能说出文件相对「裸扇区」的好处。
- 设计稿含 create/read/write/list。
延伸思考
- 扁平「对象键值存储」算目录吗?
- 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?
- 断电瞬间写元数据为何危险?
- 掉电时位图一致性怎么办(导读 8.5)?