Linux 文件系统为每个文件分配两个数据结构 :
- 索引节点 (index node) : 文件唯一标识 , 记录文件的元信息,如 : inode 编号、文件大小、访问权限、创建时间、修改时间、数据在磁盘的位置
- 目录项 (directory entry) : 记录文件的名字、索引节点指针、与其他目录项的层级关联关系
存储位置 :
- 索引节点 : 存储在硬盘
- 目录项 : 缓存在内存
目录项/索引节点的关系 :
- 一个文件 (索引) 有多个别名 (目录项)
文件系统 : 把多个扇区 组成一个逻辑块 (数据块)
- Linux : 扇区 : 512 B , 逻辑块 : 4KB
磁盘分三个存储区域 :
- 超级块 : 存储文件系统的详细信息,如 : 块个数、块大小、空闲块
- 索引节点区 : 存储索引节点
- 数据块区 : 存储文件或目录数据
加载内存的时机 :
- 超级块 : 当文件系统挂载时 , 进入内存
- 索引节点区 : 当文件被访问时 , 进入内存
虚拟文件系统
虚拟文件系统 (Virtual File System,VFS) : 统一用户层访问文件系统的接口
根据存储位置不同 , 文件系统分三类 :
- 磁盘的文件系统 : 数据存储在磁盘中,如 : Ext 2/3/4、XFS
- 内存的文件系统 : 数据用内存空间,如 : /proc , /sys
- 网络的文件系统 : 访问其他主机的文件系统,如 : NFS、SMB
文件表
操作系统会记录每个进程的打开文件表
- 表中的每项是 : 文件描述符
文件表维护打开文件信息 :
- 文件指针 : 上次读写文件位置
- 文件打开计数器 : 当计数 = 0 ,系统关闭文件,删除该条目
- 文件磁盘位置 : 保存在内存中,提高效率
- 访问权限:创建、只读、读写、添加状态 , 判断 I/O 请求权限