文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能
文件是具有符号名,由字节序列构成的数据项集合
文件属性:名称、类型、位置、大小、保护、创建者、创建时间、最近修改时间
文件头:文件系统元数据中的文件信息
进程访问文件数据前必须先“打开”文件
操作系统为每个进程维护一个打开文件表,文件描述符是打开文件的标识
操作系统在打开文件表中维护的打开文件状态和信息
最近一次读写位置,每个进程分别维护自己打开的文件指针
当前打开文件的次数,最后一个进程关闭文件时,将其从打开文件表中移除
缓存数据访问信息
每个进程的文件访问模式信息
持久的数据结构
字节序列的集合,系统不关心存储在磁盘上的数据结构
数据块的集合,数据块是逻辑存储单元,而扇区是物理存储单元
获取字节所在的数据块,返回数据块内对应内容
获取数据块,修改数据块的对应部分,写回数据块
访问模式:
单词和字节的序列
分列、固定长度和可变长度
格式化文档、可执行文件等
文件以目录的方式组织起来
目录是一类特殊的文件,目录的内容是文件索引表<文件名, 指向文件的指针>
文件名的线性列表,包涵了指向数据块的指针
哈希表 – 哈希数据结构的线性表
对所有不同文件系统的抽象,提供相同的文件系统接口,管理所有文件和文件系统关联的数据结构,与特定的文件模块进行交互
文件卷控制块 (Unix: “superblock”)
文件控制块(Unix: “vnode” or “inode”)
目录项 (Linux: “dentry”)
文件系统数据结构
持久存储在外存中
当需要时加载进内存
提供read()操作
预读: 预先读取后面的数据块
假设数据将会再次用到
写操作可能被缓存和延迟写入
数据块缓存
页缓存: 统一缓存数据块和内存页
在虚拟地址空间中虚拟页面可映射到本地外存文件中
在虚拟内存中文件数据块被映射成页,文件的读/写操作被转换成对内存的访问,可能导致缺页和/或设置为脏页
文件头指定起始块和长度
分配策略:最先匹配, 最佳匹配
文件读取表现好,高效的顺序和随机访问
文件以数据块链表方式存储
文件头包含了到第一块和最后一块的指针
创建、增大、缩小很容易,没有碎片
为每个文件创建一个索引数据块,指向文件数据块的指针列表,文件头包含了索引数据块指针
创建、增大、缩小很容易,没有碎片,支持直接访问
(续
原文:https://www.cnblogs.com/secoding/p/11913837.html