笔者:YY同学
文章目录
OS 与 FS
- OS 不等于 FS。
- OS 支持 FS,基本上每个 OS 至少有一个独立的文件系统,当然也可以同时支持多个 FS。
- 同一个 FS 可以用于多个 OS 上。
- 用户通过 OS 的 systemcall 去调用 FS 操作。
存储设备(SD)与 FS
- SD 不等于 FS。
- FS 必须安装于 SD 之上,但是一个 SD 可以同时有多个 FS,也可能一个 FS 都没有。
- SD 不需要知道 FS 的安装细节,只需要通过 OS 的指令将数据存入 FS。
File 存储 vs Memory 存储
- 相比之下,Memory 存取更快,但是进程结束后内存消失。
- File 存储提供长期的信息存储,即使进程结束了也不会消失;并且 File 具有共享对象,这保证了多个进程访问的并发性。
路径名 vs 文件名
- 路径名(Pathname)在整个 FS 中唯一确定。因为路径名是 key,帮助 OS 找到内存地址,获取文件属性和文件内容。
- 文件名(Filename)在整个 FS 中不唯一,但在当前路径下唯一。
文件属性(File Attribute)
文件由两个重要部分组成:文件属性和文件内容。文件属性是独立于 FS 而不是 OS,可以使用命令
ls -l
查看。
文件操作
1. 打开文件:(只涉及路径名和文件属性)
- 进程提供路径名给 OS。
- OS 查找文件属性,在磁盘中定位文件。
- 磁盘返回文件属性。
- OS 将文件属性于文件描述符(File Descriptor)关联。
- OS 将关联好的文件描述符返回至进程中。
2. 读取文件:
- 进程提供 FD 给 OS。
- OS 查找文件属性并且在磁盘中定位相关数据。
- 磁盘返回数据。
- OS 将数据存入缓冲区(buffer)。
3. 写文件:
一般会用到文件写的操作,因为写文件涉及磁盘空间分配与销毁,这一定程度上取决于 FS 的设计。
4. 创建文件:
文件创建的本质就是创建路径,只是创建进入路径的指针节点(entry),不分配空间。
5. 删除文件:
文件删除是作创建文件相反的操作,删除已经创建的路径节点。
路径遍历(Directory Traversal)
路径是一种特殊的文件,有文件内容,根据 FS 不同也有不同的文件属性。路径遍历一般会在一下三种情况下被调用:1.打开文件、2.执行程序、3.使用
dir
、ls
等命令列印当前路径内容。
遍历步骤:
- 获取路径名,以 /bin/ls 为例。
- OS 会分割转义符,先在 root 下遍历 bin 开头的文件,找到后返回该路径。
- OS 获取 /bin 文件下的文件属性,然后继续遍历 ls,以此类推,直至到达目标路径。
- 磁盘返回目标路径文件,结束遍历。