这里写目录标题
一.文件系统的基本组成
文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。
- 文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。
- Linux中,一切皆是文件,普通目录,文件,块设备,管道,socket,等都是文件系统管理
- LInux会给每个文件分配两个数据结构:索引节点和目录项目
索引节点
- 也就是 inode,用来记录文件的元信息,比如 inode 编号、文件大小、访问权限、创建时间、修改时间、数据在磁盘的位置等等。
- 索引节点是文件的唯一标识,它们之间一一对应,也同样都会被存储在硬盘中,所以索引节点同样占用磁盘空间。
- 一个文件可以有多个别字。比如,硬链接的实现就是多个目录项中的索引节点指向同一个文件。
- 通常为了加快读取速度,当文件被访问时,会把索引节点加载到内存中去,
目录项
- 也就是 dentry,用来记录文件的名字、索引节点指针以及与其他目录项的层级关联关系。
- 多个目录项关联起来,就会形成目录结构,但它与索引节点不同的是,目录项是由内核维护的一个数据结构,不存放于磁盘,而是缓存在内存。
- 目录也是文件,也是用索引节点唯一标识,和普通文件不同的是,普通文件在磁盘里面保存的是文件数据,而目录文件在磁盘里面保存子目录或文件。
- 录是个文件,持久化存储在磁盘,而目录项是内核一个数据结构,缓存在内存。
- 存在目的:如果查询目录频繁从磁盘读,效率会很低,所以内核会把已经读过的目录用目录项这个数据结构缓存在内存,下次再次读到相同的目录时,只需从内存读就可以,大大提高了文件系统的效率。
文件数据的存储
扇区
磁盘读写的最小单位是扇区,扇区大小是512字节,为了增加读取速度,文件系统把8个扇区组合成一个逻辑块,4kb,提高了读写速率.
三个存储区域
- 超级块,用来存储文件系统的详细信息,比如块个数、块大小、空闲块等等,当文件系统被挂载时加载进内存。
- 索引节点区,用来存储索引节点。
- 数据块区,用来存储文件或目录数据
二.虚拟文件系统
文件系统种类众多,为了统一接口。在用户层和文件系统引入了中间层,这个中间层称为虚拟文件系统
VFS 定义了一组所有文件系统都支持的数据结构和标准接口,这样程序员不需要了解文件系统的工作原理,只需要了解