文件与文件系统
FCB(文件控制块)
文件是什么?
-
文件是对 磁盘的抽象
-
所谓文件 是指 一组带标识(标识即为文件名)的、在逻辑上有完整意义的信息项的序列。
-
信息项:构成文件内容的基本单位(单个字节,或多个字节),各信息项之间具有顺序关系
-
文件内容的意义:有文件建立者和使用者解释
文件系统:
-
操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,并且方便用户使用
文件的分类:
按文件性质和用途分类(UNIX)
普通文件;目录文件;特殊文件(设备文件);管道文件;套接字
普通文件(regular)
-
包含了用户的信息,一般为ASCII或二进制文件
目录文件(directory)
-
管理文件系统的系统文件
特殊文件(special file)
-
字符设备文件:和输入输出有关,用于模仿串行I/O设备,例如终端,打印机,网卡等,
-
块设备文件:磁盘
文件属性:
-
文件控制块
-
为管理文件而设置的数据结构,保存管理文件所需的所有有关信息
-
(文件属性或元数据)
-
常用属性
-
文件名,文件号,文件大小,文件地址,创建时间,最后修改时间,最后访问时间,保护,口令创建者,当前拥有者,文件类型,共享计数,各种标志(只读、隐藏、系统、归档、ASCII/二进制、顺序/随机访问、临时文件、锁)
-
文件目录:
统一管理每个文件的元数据,以支持文件名到文件物理地址的转换。
将所有文件的管理信息组织在一起,即构成文件目录
目录文件
-
将文件目录以文件的形式存放在磁盘上
目录项:
-
构成文件目录的基本单元
-
目录项可以是FCB,目录是文件控制块的有序集合。
与目录相关的概念:
-
路径名(文件名)
-
绝对路径: 从根目录开始
-
相对路径: 从当前目录开始
-
-
当前目录/工作目录
-
目录操作
-
创建目录、删除目录
-
读目录、写目录、改名、复制
连续结构的优缺点
优点:
-
简单
-
支持顺序存取和随机存取
-
所需的磁盘寻道次数和寻到时间最少
-
可以同时读入多个块,检索一个块也很容易
缺点:
-
文件不能动态增长
-
预留空间:浪费或 重新分配和移动
-
链接结构
-
一个文件的信息存放在若干不连续的物理块中,各块之间通过指针连接,前一个物理块指向下一个物理块
优点:
-
提高了磁盘空间利用率,不存在外部碎片问题
-
有利于文件插入和删除
-
有利于文件动态扩充
缺点:
-
存取速度慢,不适于随机存取
-
可靠性问题,如指针出错
-
更多的寻道次数和寻道时间
-
链接指针占用一定的空间
索引结构:
-
一个文件的信息存放在若干不连续物理块中
-
系统为每一个文件建立一个专用数据结构——索引表,并将这些物理块的块号存放在该索引表中
-
索引表就是磁盘块地址数组,其中第i个条目指向文件的第i块
优点:
保持了链接结构的优点,有解决了其缺点
-
既能顺序存取,又能随机存取
-
满足了文件动态增长、插入删除的要求
-
能充分利用磁盘空间
缺点:
-
较多的寻道次数和寻道时间
-
索引表本身带来了系统开销
-
如:内存、磁盘空间,存取时间
-
索引表的组织方式:
问题:索引表很大,需要多个物理块存放时怎么办?
-
链接方式
-
一个盘块存一个索引表,多个索引表连接起来
-
-
多级索引方式
-
将文件的索引表地址放在另一个索引表中
-
-
综合模式
-
直接索引方式 与 间接索引方式 结合
-
内存中所需的数据结构——以UNIX为例
-
系统打开文件表
-
整个系统一张
-
放在内存:用于保存已打开文件的FCB
-
FBC(i节点)信息
|
引用计数
|
修改标记
|
-
用户打开文件表
-
每个进程一个
-
进程的PCB中记录了用户打开文件表的位置上
文件描述符
|
打开方式
|
读写指针
|
系统打开文件表索引
|
目录文件实现时的改进
提问:如何加快目录检索?
一种解决方案:
目录项分解法:即把FCB分成两部分
-
符号目录项
-
文件名,文件号
-
-
基本目录项
-
除文件名外的所有字段
-
例子:UNIX的I节点(索引节点或inode)
UNIXwen文件系统
-
FCB=目录项+i节点
-
目录项:文件名+i节点号
-
目录文件由目录项构成
-
i节点:描述文件的相关信息
-
每个文件由一个目录项、一个i节点和若干磁盘块构成
Windows——FAT16文件系统
-
簇大小:1、2、4、8、16、32或64扇区
-
文件系统的数据记录在“引导扇区”中
-
文件分配表FAT的作用
-
描述簇的分配状态、标注下一簇的簇号等
-
-
FAT表项:2字节
-
目录项:32字节
-
根目录大小固定
文件分配表FAT
-
可以把文件分配表看成是一个整数数组,每个整数代表磁盘分区的一个簇号
-
状态
-
未使用、坏簇、系统保留、被文件占用(下一簇簇号)、最后一簇(0xFFFF)
-
簇号从0开始编号,簇0和簇1是保留的
文件操作的实现
创建文件:
建立系统与文件的联系,实质是建立文件的FCB(文件控制块)
-
在目录中为新文件建立一个目录项,根据提供的参数及需要填写相关内容
-
分配必要的储存空间
打开文件:
-
根据文件名在文件目录中检索,并将改文件的目录项读入内存,建立相应的数据结构,为后续的文件操作做好准备
-
文件描述符/文件句柄
-
文件系统的管理
文件系统
可靠性:
抵御和预防各种物理性破坏和人为性破坏的能力
-
坏块问题
-
备份
-
通过转储操作,形成文件或文件系统的多个副本。
-
文件系统备份:
全量转储:
-
定期将所有文件拷贝到后援存储器
增量转储:
-
只转储修改过的文件,即两次备份之间的修改,减少系统开销
物理转储:
-
从磁盘第0块开始,将所有磁盘块按序输出到磁带
逻辑转储:
-
从一个或几个指定目录开始,递归地转储自给定日期后,所有更改的文件和目录。
文件系统一致性:
问题的产生:
-
磁盘——>内存——>写会磁盘块
-
若在写回之前,系统崩溃,则文件系统出现不一致
解决方案:
-
设计一个使用程序,当系统再次启动时,运行该程序,检查磁盘块和目录系统
文件系统的写入策略:
通写
-
内存中的修改立即写到磁盘
缺点:速度性能差
例:FAT文件系统
延迟写
-
利用回写缓存的方法得到高速
-
可恢复性差
可恢复写
-
采用事务日志来实现文件系统的写入
-
既考虑安全性,有考虑速度性能。
-
例:NTFS
-
文件的安全性
文件保护机制
-
用于提供安全性、特定的操作系统机制
-
对拥有权限的拥护,应该让其进行相应操作,否则,应禁止
-
防止其他用户冒充对文件操作
UNIX的文件访问控制
-
采用文件的二级存取控制
-
审查用户的身份、审查操作的合法性
文件系统的性能问题
磁盘服务
—》速度成为系统性能的主要瓶颈之一
设计文件系统应尽可能减少访问次数
提高文件系统性能的方法:
-
目录项(FCB)分解、当前目录、磁盘碎片整理、块高速缓存、磁盘调度、提前读取、合理分配磁盘空间、信息的优化分布、RAID技术.......
详细如下:
块高速缓存
又称为文件缓存、磁盘高速缓存、缓冲区高速缓存
是指:在内存中为磁盘块设置的一个缓存区,保存了磁盘中某些块的副本
-
检查所有的读者请求,看所需块是否在高速缓存
-
如果在,则可直接进行读写操作;否则,先将数据读入块高速缓存,再拷贝到所需的地方
关于实现:
-
块高速缓存的组织
-
块高速缓存的置换(修改LRU)
-
块高速缓存写入策略
提前读取:
-
思路:每次访问磁盘,多读入一些磁盘块
-
依据:程序执行的空间局部性原理
-
开销:较小(只有数据传输时间)
-
具有针对性
Windows的文件访问方式
不使用文件缓存
-
普通方式
-
通过Windows提供的FlushFileBuffer函数实现
使用文件缓存
-
预读取。每次读取的块大小、缓冲区大小、置换方式
异步模式
-
不再等待磁盘操作的完成
-
使处理器和I/O并发工作
用户对磁盘的访问通过访问文件缓存
来实现
-
由Windows的Cache Manager实现对缓存的控制
-
读取数据的时候预取
-
在Cache满时,根据LRU原则清除缓存的内容
-
在定期更新磁盘内容使其与Cache一致(1秒)
-
Write-back机制
-
在用户要对磁盘写数据时,只更改Cache中的内容,由Cache Manager决定何时将更新反映到磁盘
合理分配磁盘空间:
-
分配磁盘块时,把有可能顺序存取的块放在一起
-
——>尽量分配在同一柱面上,从而减少磁盘臂的移动次数和距离
-
磁盘调度
-
当有多个访盘请求等待时,采用一定的策略,对这些请求的服务顺序调整安排
-
——》降低平均磁盘服务时间,达到公平、高效
-
-
公平:一个I/O请求在有限时间内满足
-
高效:减少设备机械运动带来的时间开销
RAID技术的思想
数据是如何组织的?
-
通过把多个磁盘组织在一起,作为一个逻辑卷提供磁盘跨越功能
-
通过把数据分成多个数据块,并行写入/读出多个磁盘,以提高数据传输率(数据分条stripe)
-
通过镜像或校验操作,提供容错能力
RAID 0——条带华
主体思想——
无冗余(即无差错控制)性能最佳
-
数据分布在阵列的所有磁盘上
-
有数据请求时,同时多个磁盘并行操作
-
充分利用总线带宽,数据吞吐率提高,驱动器负载均衡
RAID 1——镜像
主体思想——数据安全性最好
-
最大限度保证数据安全及可恢复性
-
所有数据同时存在于两块磁盘的相同位置
-
磁盘利用率%50
RAID 4 交错块奇偶校验
-
带奇偶校验
-
以数据块为单位