文件系统和文件
一种持久性存储的系统抽象。
文件头
储存文件信息,保存文件属性,跟踪那一块储存块属于逻辑上文件结构的哪一个偏移。
需要哪些元数据来管理打开的文件
文件指针,文件打开计数,文件储存位置,访问权限
访问2-12字节的空间
读一个或者多个扇区,然后返回
访问方式
基于顺序一次读取,随机访问,基于内容查找的访问
文件类型
操作系统不关心
文件的锁
锁粒度?操作系统提供了不同的锁
目录
目录是特殊的文件,每个目录都有一张表
目录如何存
数组、链表、hash、其他数据结构都可以
名字解析
一层一层解析,为了提高效率,可以使用当前工作目录(缓冲)
文件系统挂载
mount和unmount
文件别名
硬链接: 多个文件项指向一个文件
软链接: 存路径,
删除文件
引用计数 stat指令
间接层,目录项数据结构存指针,根据指针来定位
如何避免目录死循环
通过检测来避免死循环
文件系统的类别
磁盘文件系统 FAT,NTFS,ext2/3/4,ISO9660等
数据库文件系统 WinFs
日志文件系统 journaling file system
网络文件系统 NFS,SMB(局域网方便),
分布式文件系统 GFS(google的集群,高吞吐,容错,高可靠,大量数据,server,网络中心,数据中心,计算中心),AFS
虚拟文件系统 proc(内核信息通过文件的方式来展现)
分布式文件系统
读写一致性,可靠性,安全性,访问延迟都要考虑,是当前研究的热点
虚拟文件系统
通过虚拟文件系统层屏蔽了底层不同的物理文件系统,
卷 - 目录节点 - 文件节点
数据块缓存
将磁盘缓存到内存,可以按需读取,推迟写入,
打开文件的数据结构
找到文件,放入文件表,通过index找到文件头,通过offset找到扇区,
文件大小
大部分文件小,少部分文件大,
文件的连续分配
文件头指定起始块和长度,高效的顺序和随机访问,当文件增长的时候不好分配,可能需要预分配,
分配策略有最先、最佳、最大分配方法
文件链式分配
用链表组织,创建增大缩小很容易,没有碎片,不可能实现高效的随机访问,不可靠,链断了以后很严重
文件索引分配
将索引放入文件头,创建增大缩小容易,没有碎片,可以直接访问,但是小文件的话索引开销太大。
多级索引块
对索引分层,但是会引入更多的时间开销
空闲空间
位图,如何解决一致性问题,先将bit设为1,然后分配,最后在内存中将bit设为1 , 如果这里断电以后会导致那一部分磁盘空间无法使用
多磁盘管理
用多个便宜的磁盘,通过并行来增加吞吐量和可靠性可用性,即冗余磁盘阵列,可以让硬件实现,也可以让软件实现。
奇偶校验磁盘
我们使用纠错码,将纠错码存到另一个磁盘里面,用于纠错,但是这就导致了奇偶校验磁盘的压力太大了,大家都要来访问他,我们其实可以让奇偶校验的块均匀分布到所有的阵列当中,就提高了效率
磁盘调度
先进先出,最少移动优先(导致饥饿),磁壁仅向一个方向移动(到达最边缘的之后立刻反转),磁盘分区(区内部使用单向移动,区之间使用先进先出)