前三个章节详尽地讨论了 OS 的两个主题:虚拟化 (virtualization) 与并发 (concurrency),剩下还有一个持久化 (persistency):数据的可靠保存。
持久化存储设备包含经典的硬盘 (hard disk drive, HDD) 与更现代的固态储存 (solid-state storage, SSD)。它们即使断电也不会丢失数据。
OS 使用文件系统 (file system) 管理持久化的数据。
什么是文件?
文件 (file) 本质上是一串允许读取和写入的比特阵列 (byte array)。
有独特的标识符 inode number。
什么是目录?
目录 (directory) 本质上也是文件,所以也有对应的 inode number。
特殊之处在于,它的内容是一个映射表:每一项是一个人类可读的名称到一个 inode 的映射。
目录嵌套使得用户能够创造目录树 (directory tree)。文件系统目录树的根节点被称为根目录。
API
文件系统将文件视为一种抽象数据类型,支持一系列操作。
- 打开:使线程获取目标文件的操作指针,称为文件标识符 (file descriptor)
- 关闭
- 创建:为新文件分配空间,并在相应的目录中添加一项
- 删除:释放文件占用的空间,并删除相应目录项
- 读取
- 写入
硬链接
链接 (link) 是一种在目录项中创建指向其他位置的已有文件或目录的机制。
- 促进了数据共享 (data sharing)。
硬链接 (hard link) ln:创建一个目录项指向与源文件相同的 inode。没有创建新的文件。
硬链接的存在使得每个 inode 需要维护一个引用计数 (reference count),记录指向该 inode 的目录项数目。文件系统只会在引用计数归 0 时真正删除文件,释放其占用的空间。
硬链接无法指向目录,也无法指向其他磁盘分区(即其他文件系统)的文件。
软链接
软链接 (soft link/symbolic link) ln -s:创建一个文件,其文件内容是源文件的路径名。
软链接被视为文件 f 与目录 d 之外的第三种文件类型 l。
删除源文件会导致指向它的软链接失效,成为悬垂引用 (dangling reference)。