marp: true theme: default paginate: true _paginate: false header: '' footer: '' backgroundColor: white
第九讲 文件系统
第一节 文件和文件系统
向勇 陈渝 李国良 任炬
2025年秋季
问题
- 作为存储介质,内存与硬盘有什么区别?
 - 你了解的文件是什么样的?
 - 持续保存数据如何组织?
 
提纲
什么是文件系统?
- 文件系统是存储设备上组织文件的方法和数据结构。
 

什么是文件系统?
- 文件系统是操作系统中负责文件命名、存储和检索的子系统。
 

什么是文件?
- 
文件是具有符号名,由字节序列构成的数据项集合
- 文件是文件系统的基本数据单位
 
 - 
文件名是文件的标识符号
 - 
文件头:文件系统元数据中的文件信息
- 文件属性:名称、类型、位置、创建时间、…
 - 文件存储位置和顺序
 
 
一切都是文件
- UNIX类操作系统的设计哲学:一切皆文件
- 普通文件,目录文件
 - 字符设备文件(如键盘,鼠标...)
 - 块设备文件(如硬盘,光驱...)
 - 网络文件(socket ...)等等
 
 - 所有一切均抽象成文件,提供了统一的接口,方便应用程序调用
 
文件视图
- 用户的文件视图
- 持久存储的数据结构
 - 系统调用接口:字节序列的集合(UNIX)
 
 - 操作系统的文件视图
- 数据块的集合
 - 数据块是逻辑存储单元,而扇区是物理存储单元
 
 
文件中数据的内部结构
- 与应用相关
- 无结构:文本文件
 - 简单结构:CSV、JSON等格式化文件
 - 复杂结构:Word文件、ELF可执行文件
 
 
提纲
- 文件
 - 文件系统和文件组织
 
文件的基本操作
- 进程读文件
- 获取文件所在的数据块
 - 返回数据块内对应部分
 
 - 进程写文件
- 获取数据块
 - 修改数据块中对应部分
 - 写回数据块
 
 

文件的基本操作单位
- 文件系统中的基本操作单位是数据块
- 例如, getc()和putc()即使每次只访问1字节的数据,也需要缓存目标数据4096字节
 
 
文件的访问模式
- 顺序访问: 按字节依次读取
- 把一维数据映射到文件中
 
 - 随机访问: 从任意位置读写
- 把一个复杂结构(矩阵)映射到文件中
 
 - 索引访问: 依据数据特征索引
- 数据库访问是一种基于索引的访问
 
 
文件访问控制
- 多用户操作系统中的文件共享是很必要的
 - 访问控制
- 用户对文件的访问权限
 - 读、写、执行、删除
 
 - 文件访问控制列表(ACL-Access Control List)
- <文件实体, 权限>
 
 
文件访问控制
- UNIX模式
- <用户|组|所有人, 读|写|可执行>
 - 用户标识ID
 - 组标识ID
 
 
多进程如何访问共享文件?
- 文件是一类共享资源
- 需要互斥访问
 - 采用类似的同步互斥技术
- 读写锁
 
 
 
提纲
- 文件
 - 文件系统和文件组织
 
1.1 文件的概念 1.2 文件操作
1.3 文件描述符
应用程序如何访问文件?
- 应用访问文件数据前必须先“打开”文件,获得文件描述符
 - 再进一步通过文件描述符(File Descriptor,fd)读写文件
 
fd = open(name, flag);
read(fd, …);
close(fd);
文件描述符
当应用程序请求内核打开/新建一个文件时,内核返回一个文件描述符用于对应这个打开/新建的文件。
- 形式上,文件描述符是一个非负整数
 - 实际上,文件描述符是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表
 
 
打开文件表
- 内核跟踪进程打开的所有文件
- 操作系统为每个进程维护一个打开的文件描述符表
 - 一个系统级的打开文件表
 - i-node表指中向具体的文件内容
  
 
打开文件表
- 内核在打开文件表中维护打开文件状态和信息
- 文件指针
- 最近一次读写位置
 - 每个进程分别维护自己的打开文件指针
 
 
 - 文件指针
 
 
打开文件表
- 内核在打开文件表中维护的打开文件状态和信息
- 文件打开计数
- 当前打开文件的次数
 - 最后一个进程关闭文件时,将其从打开文件表中移除
 
 
 - 文件打开计数
 
 
打开文件表
- 操作系统在打开文件表中维护的打开文件状态和信息
- 文件的磁盘位置
- 缓存数据访问信息
 
 - 访问权限
- 每个进程的文件访问模式信息
  
 - 每个进程的文件访问模式信息
 
 - 文件的磁盘位置
 
提纲
- 文件
 
2. 文件系统和文件组织
2.1 文件系统的功能
2.2 目录
文件系统类型
- 磁盘文件系统:FAT, NTFS, ext2/3, ISO9660,等
 - 网络/分布式文件系统:NFS, SMB, AFS, GFS
 - 特殊文件系统:procfs, sysfs
 
虚拟文件系统(VFS)
 
文件系统功能
- 文件系统是操作系统中管理持久性数据的子系统,提供数据文件命名、存储和检索功能。
- 组织、检索、读写访问数据
 - 大多数计算机系统都有文件系统
 
 
文件系统功能
- 分配文件磁盘空间
- 管理文件块(位置和顺序)
 - 管理空闲空间(位置)
 - 分配算法 (策略)
 
 
文件系统功能
- 管理文件集合
- 组织:组织文件的控制结构和数据结构
 - 命名:给文件取名字
 - 定位:通过名字找到文件文件及其内容
 
 
文件系统功能
- 数据可靠和安全
- 安全:多层次保护数据安全
 - 可靠
- 持久保存文件
 - 避免系统崩溃、数据丢失等
 
 
 
文件系统组织形式
分层文件系统
- 文件以目录的方式组织起来
 - 目录是一类特殊的文件
 - 目录的内容是文件索引表<文件名, 指向文件的指针>
 
 
提纲
- 文件
 - 文件系统和文件组织
 
2.1 文件系统的功能
2.2 目录
目录操作
应用程序通过系统调用对目录进行操作
- 搜索文件
 - 创建文件
 - 删除文件
 - 列目录
 - 重命名文件
 
 
目录实现
- 文件名的线性列表,包涵了指向数据块的指针
- 编程简单、执行耗时
 
 - 哈希表 – 哈希数据结构的线性表
- 减少目录搜索时间
 - 可能有冲突 - 两个文件名的哈希值相同
 
 
遍历目录路径
举例: 解析./fs/inode.rs
- 读取当前目录文件
.的数据内 - 找到
fs项,读取目录文件fs的数据内容 - 找到
inode.rs项,读取一般文件inode.rs的数据内容 
 
文件别名
多个文件名关联同一个文件
- 硬链接(hard link)
- 多个文件项指向一个文件
 
 - 软链接(soft link, symbolic link)
- 新建文件,以存储文件名称的方式来指向其他文件
 
 - inode:管理文件数据的结构
 
 
文件别名
- 
硬链接是对一个文件的引用,而软链接则是一个指向文件路径的指针。
 - 
硬链接不能跨文件系统,也不能链接到目录。
- 避免目录循环,所以不能链接到目录。
 
 - 
软链接可以跨文件系统,也可以链接到目录。
 
如何避免目录中没有形成循环?
- 只允许对文件的链接,不允许对子目录的链接
 - 增加链接时,用循环检测算法确定是否合理
 - 限制遍历文件目录的路径数量
 
 
文件系统挂载
- 文件系统需要先挂载才能被访问

 
小结
- 文件
 
- 文件的概念
 - 文件操作
 - 文件描述符
 
- 文件系统和文件组织
 
- 文件系统的功能
 - 目录