文件系统

一.文件系统:

1.文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能

——组织,检索,读写访问数据
——大多数计算机系统都有文件系统
2.文件是具有符号名,由字节序列构成的数据项集合
——文件系统的基本数据单位
——文件名是文件的标识符号
3.文件系统的功能
a.分配文件磁盘空间
——管理文件块(位置和顺序)
——管理空闲算法(位置)
——分配算法(策略)
b.管理文件集合
——定位:文件及其内容
——命名:通过名字找到文件
——文件系统结构:文件组织方式
c.数据可靠和安全
——安全:多层次保护数据安全
——可靠:持久保存文件;避免系统崩溃,媒体错误,攻击等
4.文件属性
名称,类型,位置,大小,保护,创建者,创建时间,最近修改时间…
文件头:文件系统元数据中的文件信息
——文件属性
——文件存储位置和顺序
5.文件描述符
a.文件访问模式
——进程访问文件数据前必须先“打开”文件
f = open(name,flag);

read(f,…);

close(f);
b.内核跟踪进程打开的所有文件
——操作系统为每个进程维护一个打开文件表,文件表里的每一项对应一个文件描述符
——文件描述符是打开文件的标识
c.文件描述符是操作系统在打开文件表中维护的打开文件状态和信息
——文件指针:最近一次读写的位置;每个进程分别维护自己的打开文件指针
——文件打开计数:当前打开文件的次数;最后一个进程关闭文件时,将其从打开文件表中移除
——文件的磁盘位置:缓存数据访问信息(当前磁盘位置的内容若已经加载到了内存中,就在内存中找)
——访问权限:每个进程的文件访问模式信息(只读,可读可写)
6.文件的用户视图和系统视图
a.文件的用户视图
——持久的数据结构
b.系统访问接口
——字节序列的集合(UNIX)
——系统不关心存储在磁盘上的数据结构/格式
c.操作系统的文件视图
——数据块的集合
——数据块是逻辑存储单元 ,而扇区是为物理存储单元
——块大小可以不等于扇区大小
7.用户视图到系统视图的转换
a.进程读文件
——获取字节所在的数据块(就算想读写一个字节,也需把整块读出来)
——返回数据块内需要的部分
b.进程写文件
——获取数据块
——修改数据块中对应部分
——写回数据块
c.文件系统中的基本操作单位是数据块
——getc()和putc()即使每次只访问一个字节的数据,也需要缓存目标数据4096字节
8.访问模式
操作系统需要了解进程如何访问文件
a.顺序访问:按字节依次读取
——大多数的文件访问都是顺序访问
b.随机访问:从中间读写
——不常用,仍重要(例如,虚拟内存中把内存页存储在文件)
c.索引访问:依据数据特征索引
——通常操作系统不完整提供索引访问
——数据库是建立在索引内容的磁盘访问上(建索引文件)
9.文件内部结构
(操作系统通常不关心你是什么结构什么格式)
a.无结构
——单词,字节序列
b.简单记录结构
——分列
——固定长度
——可变长度
c.复杂结构
——格式化的文档(如:MS Word, PDF)
——可执行文件
(通常由应用程序识别)
10.文件共享和访问控制
a.多用户系统中的文件共享是很必要的
b.访问控制
——访问模式:读,写,执行,删除,看列表
c.文件访问控制列表(ACL)
——<文件实体,权限>
d.UNIX模式
——<用户|组|拥有者,读|写|可执行>
——用户标识ID(识别用户,表明每个用户所允许的权限及保护模式)
——组标识ID(允许用户组成组,并指定了组访问权限)
11.语义一致性
a.规定多进程如何同时访问共享文件(协调)
——与同步算法相似
——因磁盘I/O和网络延迟而设计简单
b.UNIX文件系统(UFS)语义
——对打开文件的写入内容立即对其它发开同一文件的其他用户可见
——共享文件指针允许多用户同时读取和写入文件
c.会话语义
——写入内容只有当文件关闭时可见
e.读写锁
——一些操作系统和文件系统提供该功能
12.分层文件系统
a.文件以目录的方式组织起来
b.目录是一类特殊的文件
——目录的内容是问价索引表<文件名,指向文件的指针>
c.目录和文件的树形结构
——早期的文件系统是扁平的(只有一层目录)
d.目录操作
——搜索文件
——创建文件
——删除文件
——列目录
——重命名文件
——遍历路径
e.操作系统应该只允许内核修改目录
——确保映射的完整性
——应用程序通过系统调用访问目录(用户通过系统电泳修改目录)
13.目录实现
a.文件名的线性列表,包含了执行数据块的指针
——编程简单
——执行耗时
b.哈希表-哈希数据结构的线性表
——减少目录搜索时间
——冲突-两个文件名的哈希值相同(哈希表里解决)
——固定大小
14.文件别名
两个或多个文件名关联同一个文件
a.硬链接:多个文件项指向一个文件
b.软连接:以“快捷方式”指向其他文件
——通过存储真实文件的逻辑名称来实现(链接文件里存储真实文件的完整的路径)
c.硬链接删除文件时,删除最后一个指向它的文件名时,才删除文件实体;软连接删除“别名”时,文件实体不受影响,删除实体文件后,“别名”指向的文件就不存在了
15.文件目录中的循环
a.如何保证没有循环?
——只允许到文件的链接,不允许存在目录的链接
——增加链接时,用循环检测算法确定是否合理
b.限制路径可遍历文件目录的数量
16.名字解析(路径遍历)
a.名字解析:把逻辑名字转换成物理资源(如文件)
——依据路径名,在文件系统中找到实际文件位置
——遍历文件目录直到找到目标文件
b.举个栗子:解析“/bin/ls”
——读取根目录的文件头(在磁盘固定位置)
——读取根目录的数据块,搜索“bin”项
——读取bin的文件头
——读取bin的数据块;搜索“ls”项
——读取ls的文件头
c.当前工作目录(PWD)
——每个进程都会指向一个文件目录用于解析文件名(若某进程经常工作在固定的目录,不需要每次都从根目录开始找)
——允许用户指定相对路径来代替决定路径
17.文件系统挂载
a.文件系统需要先挂载才能被访问
b.未挂载的文件系统被挂载在挂载点上
18.文件系统种类
a.磁盘文件系统
——文件存储在数据存储设备上,如磁盘
——不同的文件系统,由于存的数据不同,使用场景不同,它会做不同的优化;安全要求不同;读写频率不同
——所以有了多种不同的文件系统;
——(FAT,NTFS,ext2/3,ISO9660…)
b.数据库文件系统
——文件特征是可被寻址(辨识)的
——(WinFS)
c.日志文件系统
——记录文件系统的修改/事件,以原子的形式来进行
d.网络/分布式文件系统
——文件存到远端机器上
——(NFS,SMB,AFS,GFS)
e.特殊/虚拟文件系统
——(pipe)
{f.网络/分布式文件系统
——文件可以通过网络被共享:文件位于远端服务器;客户端远程挂载服务器文件系统;标准系统文件访问被转换成远程访问;标准文件共享协议(NFS for Unix,CIFS for Windows)
——分布式文件系统的挑战:客户端和客户端上的用户辨识起来很复杂;NFS是不安全的;一致性问题;错误处理}

二.虚拟文件系统

虚拟文件系统的提出是为了面对多种文件系统,而操作系统又希望对上提供统一的接口的问题。
在这里插入图片描述
1.分层结构
a.虚拟(逻辑)文件系统(VFS,Virtual File System)
b.特定文件系统模型
c.如上图
2.目的
对所有不同文件系统的抽象
3.功能
a.对上提供相同的文件和文件系统接口
b.在内部管理所有文件和文件系统关联的数据结构
c.高效查询例程,遍历文件系统
d.对下提供与特定文件系统模块的交互
4.文件系统基本数据结构
a.文件卷控制块(UNIX:“superblock”,超级块)
——每个文件系统一个
——文件系统详细信息
——块,块大小,空余块,计数/指针等
b.文件控制块(UNIX:“vnode"OR"inode”,索引节点)
——每个文件一个
——文件详细信息
——访问权限,拥有着,大小,数据块位置等
c.目录项(Linux:“dentry”)(目录由目录项组成)
——每个目录项对应一个子目录或者文件)
——将目录项数据结构及树形布局编码成树形数据结构
——指向文件控制块,父目录,子目录
5.文件系统的存储结构
a.文件系统数据结构
——卷控制块(每个文件系统一个)
——文件控制块(每个文件一个)
——目录节点(每个目录项一个)
b.持久存储在外存中
——存储设备的数据块中
c.当需要时加载进内存
——卷控制模块:当文件系统挂载时加载进内存
——文件控制块:当文件被访问时加载进内存
——目录节点:在遍历一个文件路径时,遇到的目录节点都加载进内存

三.文件缓存和打开文件

1.多种磁盘缓存位置
文件从磁盘读取到CPU进行处理,需要经历多种缓存,如下图
在这里插入图片描述
2.数据块缓存
a.数据块按需读入内存
——提供read()操作
——预读:预先读取后面的数据块
b.数据块使用后被缓存
——假设数据将会再次用到
——写操作可能被缓存和延迟写入(先不写,可能要再改,拖一拖再往进写)
c.两种数据缓存方式
——数据块缓存(把磁盘的内容缓存,再找的话就先查这里)
——页缓存:统一缓存数据块和内存页
d.两种方式图解
——数据块缓存
在这里插入图片描述
——页缓存
虚拟页式存储:在虚拟地址空间中虚拟页面可映射到本地外存文件中(扩展进程可用的地址空间)
在这里插入图片描述
文件数据块的页缓存:
。在虚拟内存中文件数据块被映射成页
。文件的读/写操作被转换成对内存的访问
。可能导致缺页和/或设置为脏页
。问题:页置换算法需要协调虚拟存储和页缓存间的页面数
有了这样的机制,进程的内存访问和文件读写都会转换成页缓存,如果内存中有,就在内存中读,若没有,再到文件系统中去读写
3.文件系统中打开文件的数据结构
a.文件描述符
——每个被打开的文件都有一个文件描述符(文件描述表中)
——文件状态信息
——目录项,当前文件指针,文件操作设置等
b.打开文件表
——每个进程一个进程打开文件表
——整个系统有一个系统级的打开文件表
——有文件被打开时,文件卷就不能被卸载
c.打开文件锁
——一些文件系统提供文件锁,用于协调多进程的文件访问
——强制:根据锁保持情况和访问需求确定是否拒绝访问
——劝告:进程可以查找锁的状态决定怎么做

四.文件分配

是指把哪些块分配给一个文件来存储数据。
1.文件大小
a.大多数文件都很小
——需要对小文件提供很好的支持
——块空间不能太大
b.一些文件非常大
——必须支持大文件(64位文件偏移)
——大文件访问需要高效

2.文件分配
a.如何表示分配给一个文件数据块的位置和顺序
b.分配方法
——连续分配
文件头指定起始块和长度
优点:文件读取表现好;高效的顺序和随机访问
缺点:碎片;文件增长问题
——链式分配
文件以数据块链表方式存储
文件头包含了到第一块和最后一块的指针
优点:创建,增大,缩小容易;没有碎片
缺点:无法实现真正的随机访问;可靠性差,破坏一个链,后面的全丢了
——索引分配
为每个文件创建一个索引数据块(指向文件数据块的指针列表)
文件头包含了索引数据块指针
优点:创建,增加,缩小很容易;没有碎片;支持直接访问
缺点:当文件很小,存储索引的开销;大文件需要加索引块(链式索引块)
c.指标
——存储效率:外部碎片
——读写性能:访问速度

五.空闲空间管理

1.跟踪记录文件卷中未分配的数据块
a.用位图代表空闲数据块列表
——使用简单但是可能会是一个很大的向量表
b.链表/链式索引

六.冗余磁盘阵列RAID

提高文件系统可靠性和读写性能的一组技术
1.磁盘分区
a.通常磁盘通过分区来最大限度减少寻道时间
——分区是一组柱面集合
——每个分区都可视为逻辑上独立的磁盘
b.一个典型的磁盘文件系统组织
——文件卷:一个拥有完整文件系统实例的外存空间,通常常驻在磁盘的单个分区上
2.多磁盘管理
a.使用多磁盘提高性能
——吞吐量(通过并行)
——可靠性和可用性(通过冗余,存多份)
b.冗余磁盘阵列(RAID,Redundant Array of Inexpensive Disks)
——多种磁盘管理技术
——RAID分类
RAID-0:磁盘条带化
把数据块分成多个子块,存储在独立的磁盘中,通过独立磁盘上并行数据块访问提供更大的磁盘带宽
在这里插入图片描述
RAID-1:磁盘镜像
向两个磁盘写入,从任何一个读;可靠性成倍增加,读取性能线性增加
在这里插入图片描述
RAID-4:带校验的磁盘条带化
数据块级的磁盘条带化+专用奇偶校验磁盘;允许从任意一个故障磁盘中恢复
在这里插入图片描述
RAID-5:带分布式校验的磁盘条带化
(和RAID-4相比,就是将校验和的存放位置做了分布;不要将校验和放在一个磁盘上,减少了某一磁盘的压力)
在这里插入图片描述
c.冗余磁盘阵列的实现
——软件:操作系统内核的文件卷管理
——硬件:RAID硬件控制器(I/O)
3.条带化和奇偶校验按“字节”或“位”
——RAID-0/4/:基于数据块
——RAID-3:基于位
4.可纠正多个磁盘错误的冗余磁盘阵列
——RAID-5:每组条带块有一个奇偶校验块;允许一个磁盘错误
——RAID-6:每组条带块有两个冗余块;允许两个磁盘错误
5.RAID嵌套
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值