第11章 文件系统实现

11.1文件系统(有组织的)结构

文件结构
逻辑存储单元
收集相关信息
“文件系统”组织成层
文件系统驻留在辅助存储器(磁盘)上
通过便于存储,检索,提供高效和方便的磁盘访问
文件系统是操作系统中以文件方式管理计算机软件资源的软件和被管理的文件和数据结构(如目录和索引表等)的集合。
File control block(文件控制块)-由有关文件的信息(属性)组成的存储结构
Device driver(设备驱动)控制着物理设备

分层设计的文件系统

应用程序程序:发出文件请求的代码
 逻辑文件系统
 管理元数据:文件系统的所有结构数据,而不包括实际
数据(或文件内容)
 根据给定符号文件名来管理目录结构
 逻辑文件系统通过文件控制块(FCB)来维护文件结构
 文件组织模块
 知道文件及其逻辑块和物理块。
 空闲空间管理器
 基本文件系统
 向合适的设备驱动程序发送一般命令就可对磁盘上的物理块进行读写
 I/O控制
 由设备驱动程序和中断处理程序组成,实现内存与磁盘之间的信息转移
image.png

文件系统类型

 FAT(MS-DOS文件系统)
 FAT32(VFAT)(win98文件系统)
 NTFS(NT文件系统)
 S51K/S52K(AT&T UNIX sysv)
 ext (minix文件系统)
 ext2、ext3、ext4(linux文件系统、Android)
 proc、sysfs(linux虚拟文件系统)
 yaffs (Yet Another Flash File System)
 ReiserFS (Linux一种日志文件系统)
 HFS+ (Mac OS ,iOS文件系统)
 HPFS(OS/2高性能文件系统 )
 UFS(BSD UNIX的一种文件系统)
 iso9660 (通用的光盘文件系统)
 NFS (网络文件系统)
 VFS (Linux虚拟文件系统)
VFS是物理文件系统与服务之间的一个接口,它屏蔽各类文件系统的差异,给
用户和程序提供一个统一的接口
 ZFS (Open Solaris文件系统)
 LTFS(Liner Tape File System,线性磁带文件系统) 为磁带提供了一种通用、
开放的文件系统。
 APFS(Apple File System)苹果新一代的文件系统,MAC os、iOS

11.2文件系统实施

1.磁盘上的文件系统结构:
 在磁盘上,文件系统可能包括如下信息:
 如何启动所存储的操作系统
 总的块数
 空闲块的数目和位置
 目录结构以及各个具体文件等
 磁盘结构包括
引导控制块包含系统从该卷启动操作系统所需的信息
Volume(卷)控制块包含卷的详细信息
目录结构组织了这些文件
每个文件的文件控制块(FCB,文件控制块)包含了关于该文件的许多详细信息
实例:Linux ext2

一个典型的文件控制块

image.png

内存文件系统结构

2.内存中的文件系统结构:
 An in-memory partition table(分区表)
 An in-memory directory structure(目录结构)
 The system-wide open-file table (系统打开文件表)
 The per-process open-file table (进程打开文件表)
图12-3(a)是指打开一个文件
图12-3(b)指的是读取一个文件
实例:Linux vfs
image.png

虚拟文件系统

虚拟文件系统(VFS)提供了一种面向对象的实现文件系统的方法。
VFS允许对不同类型的文件系统使用相同的系统调用接口(API)。
该API是针对VFS接口的,而不是针对任何特定类型的文件系统

虚拟文件系统的示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sb6fqLgS-1682177424342)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1668655001984-bceea241-2426-4e31-96b4-7ddeb6844c7d.png#averageHue=%23a4a2a1&clientId=u8b5b6fc8-71d6-4&from=paste&height=513&id=u045643bf&name=image.png&originHeight=769&originWidth=1022&originalType=binary&ratio=1&rotation=0&showTitle=false&size=163385&status=done&style=none&taskId=ubb053bdd-abd6-47e3-bcfe-fd50465ec38&title=&width=681.3333333333334)]

11.3 目录实现

带有指向数据块的指针的文件名的Linear list(线性检索法)
简单的程序
耗时执行
image.png
Hash Table(哈希表)-具有哈希数据结构的线性列表。
减少目录搜索时间
冲突-两个文件名哈希到相同位置的情况
固定大小
索引

11.4 Allocation Methods,文件物理结构

Allocation Methods,文件物理结构

分配方法是指如何为文件分配磁盘块:
 Contiguous allocation(连续分配)
 Linked allocation (链接分配)
 Indexed allocation(索引分配)
 Unix、Linux直接间接混合分配方法

连续分配

每个文件在磁盘上占据一组连续的块
简单-只需要起始位置(块#)和长度(块数)
Random access (随机存取)
空间浪费(动态存储分配问题)
文件无法增长

磁盘连续分配

image.png

连续分配

从逻辑到物理的映射
image.png
要访问的块= Q +起始地址
位移入块=R

磁盘空间的连续分配

image.png

Extent-Based Systems (基于长度系统)

许多更新的文件系统(即Veritas文件系统)使用修改后的连续分配方案
基于区段的文件系统在区段中分配磁盘块
扩展区是一个连续的磁盘块
为文件分配分配了范围
一个文件由一个或多个区段组成

基于范围的系统

image.png

链接分配

每个文件都是一个磁盘块的链接列表:块可能分散在磁盘上的任何地方。
image.png
简单-只需要开始添加
自由空间管理系统-不浪费空间
无随机访问
映射
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2RPgRmNf-1682177424346)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1668655658862-d2a29831-4220-4e61-a540-5cf1a5683c5d.png#averageHue=%23cbdcc0&clientId=u8b5b6fc8-71d6-4&from=paste&height=55&id=u918dd116&name=image.png&originHeight=82&originWidth=130&originalType=binary&ratio=1&rotation=0&showTitle=false&size=3038&status=done&style=none&taskId=u9deea230-f350-441f-b419-ecd6bd74fef&title=&width=86.66666666666667)]
要访问的块是表示该文件的链接块链中的第Q个块。位移到块= R + 1
image.png

FAT文件系统

文件分配表(FAT)-MS-DOS和OS/2所使用的磁盘空间分配
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Azd08jym-1682177424348)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1668655713711-5108c437-6e5b-4608-8578-e02feaf369bb.png#averageHue=%23c9dabe&clientId=u8b5b6fc8-71d6-4&from=paste&height=123&id=u8b6af360&name=image.png&originHeight=184&originWidth=789&originalType=binary&ratio=1&rotation=0&showTitle=false&size=20354&status=done&style=none&taskId=u9b5e6a88-bcfc-46b3-b3a3-afb0ece92dd&title=&width=526)]
FAT32引导区记录被扩展为包括重要数据结构的备份,根目录为一个普通的簇
链,其目录项可以放在文件区任何地方

文件分配表

指针会占用每个块中的空间。可靠性不高,因为任何指针的丢失都会丢失文件的其余部分。
文件分配表(FAT)是它的一个变体。
它使用一个单独的磁盘区域来保存链接。
此方法不在数据块中使用空间。许多指针可能会保留在内存中
MS-DOS使用了一个FAT文件系统。
image.png

FAT32磁盘的结构

 主引导记录MBR是主引导区的第一个扇区,它由二部分组成:
 第一部分主引导代码,占据扇区的前446个字节,磁盘标识符(FD 4E F2 14)位于这段代码的未尾。
 第二部分是分区表,分区表中每个条目有16字节长,分区表最多有4个条目,第一个分区条目从扇区的偏移量位置是0x01BE。
 扩展引导记录与主引导记录类同,如该扩展分区未装操作系统则第一部分主引
导代码为0,标签字也标记一个扩展分区引导区和分区引导区的结束。
 计算机系统启动时,首先执行的是BIOS引导程序,完成自检,并加载主引导记录和分区表,然后执行主引导记录,由它引导激活分区引导记录,再执行分区引导记录,加载操作系统,最后执行操作系统,配置系统。

FAT32目录项结构

 FAT的每个目录项为32个字节
 FAT32长文件名的目录项由几个32B表项组成。
 用一个表项存放短文件名和其他属性(包括簇号、文件大小,最后修改时间和最后修改日期、创建时间、创建日期和最后存取日期),短文件名的属性是0x20。
 用连续若干个表项存放长文件名,每个表项存放13个字符(使用Unicode编码,每个字符占用2个字节。)
 长文件名的表项首字节的二进制数低5位值,分别为00001 、00010 、
00011 、……,表示它们的次序,左起第2位为1(也就是在低5位基础上加40H)表示该表项是最后一项。最后项存放13个字符位置多余时,先用2个字
节0表示结束,再用FFH填充。长文件名的属性是0x0F。长文件名项的第13、
27、28字节为0x00,第14字节为短文件名校验和。

FAT32目录结构

长文件名The quick brown.fox(短文件名为THEQUI~1.FOX)
目录项格式如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zvdfJqOs-1682177424350)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1668655896907-276b2b44-b31c-420d-ba73-0aa44892273c.png#averageHue=%23c8d9bb&clientId=u8b5b6fc8-71d6-4&from=paste&height=199&id=ue4987249&name=image.png&originHeight=298&originWidth=706&originalType=binary&ratio=1&rotation=0&showTitle=false&size=45277&status=done&style=none&taskId=u4d0d17bb-6533-4c75-b16a-a7c9363fe74&title=&width=470.6666666666667)]

文件系统(NTFS)

NTFS卷布局:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ozAUWwsZ-1682177424351)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1668655927630-ae472a85-521b-40bd-bcc4-922c5f8ab9df.png#averageHue=%23c9dabe&clientId=u8b5b6fc8-71d6-4&from=paste&height=66&id=u616d5608&name=image.png&originHeight=99&originWidth=610&originalType=binary&ratio=1&rotation=0&showTitle=false&size=17553&status=done&style=none&taskId=ua25d4552-2fec-41b2-b824-1a8f81a835e&title=&width=406.6666666666667)]
每个分区都有一个主文件表(MFT):

image.png
MFT用数据库记录形式组织,每条记录(MFT表项)长度1K
 MFT由一个个MFT项(也称为文件记录)组成,每个MFT项占用1024字节的
空间。
 MFT前16个记录用来存放元数据文件的信息,它们占有固定的位置。
 每个MFT项的前部几十个字节有着固定的头结构,用来描述本MFT项的相关信息。后面的字节存放着文件属性等。
 每个文件或目录的信息都包含在MFT中,每个文件或目录至少有一个MFT项。
image.png

索引分配

将所有指针合并到索引块中
逻辑视图
每个文件都在磁盘上使用一个索引块来包含该文件所使用的其他磁盘块的地址。
当写入第i个块时,一个自由块的地址被放置在索引块中的第i个位置。
方法浪费了空间,因为对于小文件,大部分索引块都浪费了。索引块的最佳大小是多少?
如果索引块太小,我们可以:
将多个索引链接在一起
使用多级索引
image.png

索引分配示例

image.png

索引分配

需要索引表
随机访问
动态访问没有外部碎片化,但有索引块的开销
在最大256K个单词的文件大小和512个单词的块大小中从逻辑到物理的映射。索引表只需要1个块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LXsHzcV8-1682177424352)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1668656579821-5d4efb34-2965-47c4-81fc-fa360406b669.png#averageHue=%23ccdcc0&clientId=u8b5b6fc8-71d6-4&from=paste&height=71&id=uff096635&name=image.png&originHeight=106&originWidth=151&originalType=binary&ratio=1&rotation=0&showTitle=false&size=3429&status=done&style=none&taskId=u81fdbbc1-e2fb-4c7f-a0c0-a513516bce5&title=&width=100.66666666666667)]
Q=位移进入指数表
R=位移进入块

索引分配-映射

在无限长度(块大小为512字)的文件中从逻辑到物理的映射
链接方案(链接索引)-索引表的链接块(无大小限制)
image.png
二级索引(最大文件大小为512^3)二级索引
image.png
image.png

组合方案:UNIXUFS(每个块4K字节)

Linux ext2/ext3
image.png

实例

 一个文件系统中有一个20MB大文件和一个20KB小文件,当分别采用连续、链接、链接索引、二级索引和LINUX 分配方案时,每块大小为4096B,每块地址用
4B表示,问:
(1)各文件系统管理的最大的文件是多少?
(2)每种方案对大、小两文件各需要多少专用块来记录文件的物理地址(说明各块的用途) ?
(3)如需要读大文件前面第5.5KB的信息和后面第(16M+5.5KB)的信息,则每个方案各需要多少次盘I/O操作?

11.5自由空间管理

Bit vector(位图) (n blocks)
image.png
块数计算
(number of bits per word) *(number of 0-value words) +offset of first 1 bit
位映射需要额外的空间
示例:
image.png
易于获得连续的文件
Linked list (free list,空闲链表)
无法轻易获得连续的空间
没有浪费空间
Grouping (分组)—Unix 成组连接法(next page)
Counting(空闲表)
需要保护:
指向自由列表的指针
位图
必须保存在磁盘上
在内存和磁盘中的复制可能会有所不同
不能允许block[i]出现内存中的bit[i]=1和磁盘上的bit[i]=0的情况
解决:
 Set bit[i] = 1 in disk
 Allocate block[i]
 Set bit[i] = 1 in memory

磁盘上的空闲空间列表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X0Ka7nqv-1682177424355)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1669196102462-fe021f2a-4fa6-42df-be04-a8b42b3917aa.png#averageHue=%23e4e6e2&clientId=u69874ef4-e0e3-4&from=paste&height=513&id=u757167c3&name=image.png&originHeight=770&originWidth=720&originalType=binary&ratio=1&rotation=0&showTitle=false&size=283517&status=done&style=none&taskId=u46c43de1-9569-41ee-a6f0-3d3b6fac3c6&title=&width=480)]

11.6效率和性能

效率取决于:
磁盘分配和目录算法
保存在文件的目录条目中的数据的类型
性能
磁盘缓存-针对常用块的主存的独立部分
事后空闲和预先读取-优化顺序访问的技术
通过将部分内存专用为虚拟磁盘或RAM磁盘来提高PC的性能

页面缓存

页面缓存会缓存页面,而不是使用虚拟内存技术的磁盘块
内存映射的I/O使用一个页面高速缓存
通过文件系统的例程I/O使用缓冲区(磁盘)缓存
这就导致了下图

没有统一缓冲区高速缓存的I/O

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i9uZtZXI-1682177424355)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1669196433670-9c5d10f4-71f3-49fd-ac58-32169a3a67d6.png#averageHue=%23f8f8f8&clientId=u69874ef4-e0e3-4&from=paste&height=515&id=ua048ed45&name=image.png&originHeight=772&originWidth=884&originalType=binary&ratio=1&rotation=0&showTitle=false&size=128540&status=done&style=none&taskId=ua9a6e1e0-420f-4f3c-950b-8e5fc8e7de4&title=&width=589.3333333333334)]

统一缓冲区缓存

统一的缓冲区缓存使用相同的页面缓存来缓存内存映射的页面和普通文件系统I/O

11.7恢复

一致性检查-将目录结构中的数据与磁盘上的数据块进行比较,并试图修复不一致性
使用系统程序将数据从磁盘备份到另一个存储设备(磁带、其他磁盘、光盘)
通过从备份中恢复数据来恢复丢失的文件或磁盘

11.8日志记录结构化的文件系统

日志结构化(或日志记录)文件系统将每次更新记录为文件系统
所有的事务都被写入到一个日志中
事务写入日志,即认为已提交
但是,文件系统可能还没有被更新
日志中的事务是异步写入文件系统的
修改文件系统后,该事务将从日志中删除
如果文件系统崩溃,则仍必须执行日志中的所有剩余事务

*11.9Sun网络文件系统(NFS)

一种用于跨局域网(或广域网)访问远程文件的软件系统的实现和规范
该实现是Solaris和SunOS操作系统的一部分,运行在Sun工作站上,使用不可靠的数据报协议(SDP/IP协议和以太网
互连工作站被视为一组具有独立文件系统的独立机器,它允许在这些文件系统之间以透明的方式共享
已将远程目录挂载在本地文件系统目录上
挂载的目录看起来像是本地文件系统的一个完整的子树,取代了从本地目录下降的子树
装载操作的远程目录规范不透明;必须提供远程目录的主机名
然后,就可以以透明的方式访问远程目录中的文件
根据访问权限认证,可能的任何文件系统(或文件系统中的目录)都可以远程挂载在任何本地目录之上
NFS被设计用于在不同机器、操作系统和网络架构的异构环境中操作;独立于这些介质的NFS规范
这种独立性是通过使用构建在两个实现独立的接口之间使用的外部数据表示(XDR)协议之上的RPC原语来实现的
NFS规范区分了由挂载机制提供的服务和实际的远程文件访问服务

三个独立的文件系统

image.png

在NFS中安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q36mFwXV-1682177424356)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1669196688529-8f2b4334-aa33-41dc-9715-f79fe6845a3f.png#averageHue=%23fdfdfd&clientId=u69874ef4-e0e3-4&from=paste&height=463&id=uebfa7cda&name=image.png&originHeight=695&originWidth=909&originalType=binary&ratio=1&rotation=0&showTitle=false&size=115169&status=done&style=none&taskId=u71dbb127-e8ec-4c28-9a34-751525bb80c&title=&width=606)]

NFS装载协议

在服务器和客户端之间建立初始的逻辑连接
挂载操作包括要挂载的远程目录的名称和存储它的服务器机器的名称
挂载请求被映射到相应的RPC,并被转发到在服务器计算机上运行的挂载服务器
导出列表—指定服务器导出的本地文件系统,以及允许挂载它们的机器的名称
在符合其导出列表的装入请求之后,服务器返回一个文件句柄——一个用于进一步访问的键
文件句柄-文件系统标识符和inode编号,用于标识导出的文件系统内装入的目录
挂载操作只更改用户的视图,而不影响服务器端

NFS协议

为远程文件操作提供一组远程过程调用。这些程序支持以下操作:
在目录中搜索文件
正在读取一组目录条目
操作链接和目录
访问文件属性
读写文件
NFS服务器是无状态的;每个请求都必须提供一套完整的参数(NFS V4刚刚开始可用——非常不同的,有状态的)
必须将数据修改到磁盘服务器(失去了缓存的优势)
NFS协议不提供并发性控制机制

NFS体系结构的三个主要层次

UNIX文件系统接口(基于打开、读取、写和关闭调用以及文件描述符)
虚拟文件系统(VFS)层-区分本地文件和远程文件,并根据其文件系统类型进一步区分本地文件
VFS激活特定于文件系统的操作,以根据其文件系统类型处理本地请求
为远程请求调用NFS协议过程
NFS服务层----------体系结构的最底层
实现NFS协议

NFS体系结构的示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GBRZOYr8-1682177424356)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1669196894120-de592f42-68cd-43f5-825c-e3acfffd3e01.png#averageHue=%23fdfcfa&clientId=u69874ef4-e0e3-4&from=paste&height=513&id=uf4b9f6cb&name=image.png&originHeight=770&originWidth=1025&originalType=binary&ratio=1&rotation=0&showTitle=false&size=192135&status=done&style=none&taskId=ued67ed03-61d1-4ca5-b83e-61d866c4b6c&title=&width=683.3333333333334)]

NFS路径名转换

通过将路径分解为组件名称,并对每一对组件名称和目录vnode执行单独的NFS查找调用来执行
为了加快查找速度,客户端一侧的目录名查找缓存保存了远程目录名的vnodes

NFS远程操作

常规的UNIX系统调用和NFS协议rpc之间几乎是一对一的对应关系(打开和关闭文件除外)
NFS遵循远程服务范式,但为了提高性能,它采用了缓冲和缓存技术
文件块缓存——当打开文件时,内核与远程服务器检查是否获取或重新验证缓存的属性
仅当相应的缓存属性为最新状态时,才会使用缓存文件块
文件属性缓存-每当新属性从服务器到达时,属性缓存将被更新
在服务器确认数据已被写入磁盘之前,客户端不会释放延迟写入块

*11.10 示例:WAFL文件系统

用于网络设备“文件管理器”——分布式文件系统设备
“任意位置写入文件布局”
提供NFS,CIFS,http,ftp
随机输入/O优化,写入优化
用于写缓存的NVRAM
类似于伯克利快速文件系统,有广泛的修改

WAFL文件布局

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lTGqHeRu-1682177424357)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1669197049073-342ee4f5-00ab-46af-b255-65319cc9f015.png#averageHue=%23efefec&clientId=u69874ef4-e0e3-4&from=paste&height=299&id=u80657c27&name=image.png&originHeight=449&originWidth=1029&originalType=binary&ratio=1&rotation=0&showTitle=false&size=120013&status=done&style=none&taskId=u79036e2a-d0a5-40c2-833a-67875e90c0d&title=&width=686)]

WAFL快照

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-03fFxoNR-1682177424357)(https://cdn.nlark.com/yuque/0/2022/png/26022030/1669197066600-04ae334c-273e-4b44-8998-bc6cd129d1f3.png#averageHue=%23f1f1f1&clientId=u69874ef4-e0e3-4&from=paste&height=513&id=u1fe23859&name=image.png&originHeight=769&originWidth=551&originalType=binary&ratio=1&rotation=0&showTitle=false&size=241189&status=done&style=none&taskId=u5325fbd6-9c7b-4aa3-a9e1-aad64163e64&title=&width=367.3333333333333)]

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值