nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial

文件系统和文件

一种持久性存储的系统抽象。

文件头

储存文件信息,保存文件属性,跟踪那一块储存块属于逻辑上文件结构的哪一个偏移。

需要哪些元数据来管理打开的文件

文件指针,文件打开计数,文件储存位置,访问权限

访问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 , 如果这里断电以后会导致那一部分磁盘空间无法使用

多磁盘管理

用多个便宜的磁盘,通过并行来增加吞吐量和可靠性可用性,即冗余磁盘阵列,可以让硬件实现,也可以让软件实现。

奇偶校验磁盘

我们使用纠错码,将纠错码存到另一个磁盘里面,用于纠错,但是这就导致了奇偶校验磁盘的压力太大了,大家都要来访问他,我们其实可以让奇偶校验的块均匀分布到所有的阵列当中,就提高了效率

磁盘调度

先进先出,最少移动优先(导致饥饿),磁壁仅向一个方向移动(到达最边缘的之后立刻反转),磁盘分区(区内部使用单向移动,区之间使用先进先出)