文件系统

文件系统

1、是一种用于持久性存储的系统抽象,也就是断电后数据不会丢失

2、让用户组织、控制、导航、访问和检索数据

3、大多数的计算机系统包含文件系统

 

文件

1、具有符号名,由字节序列构成的数据项集合

2、是文件系统的基本数据单位

3、文件名是文件的表示符号

 

文件系统的功能

1、分配文件磁盘空间

(1)管理文件块(位置和顺序)

(2)管理空闲空间(位置)

(3)分配算法(策略)

2、管理文件集合

(1)查找:文件及其内容

(2)命名:通过标识符,定位文件接口

(3)常见:分层文件结构

(4)文件系统结构:组织文件的不同方式

3、数据可靠和安全

(1)可靠性 / 持久性:持久保存文件,避免错误和崩溃

(2)安全:多层次保护数据安全,减少攻击危害

 

文件和块

1、文件属性:名称、类型、位置、大小、保护、创建者、创建时间、最近修改时间等

2、文件头

(1)在存储元数据中保存了每个文件的信息

(2)保存文件的属性

(3)跟踪存储块对应逻辑上文件结构的偏移,即文件存储位置和顺序

 

文件描述符

1、文件访问模式

(1)f = open(name, flag):通过字符串的名字打开文件,返回一个整形的文件描述符 f

(2)read(f)

(3)close(f)

2、内核跟踪进程打开的所有文件

(1)OS 为每个进程维护一个打开文件表

(2)文件描述符是打开文件的标识

3、定义:OS 在打开文件表中维护的打开文件状态和信息

4、元数据

(1)文件指针:指向最近一次读写位置,每个进程分别维护自己的打开文件指针

(2)文件打开计数:记录文件打开的次数,最后一个进程关闭文件时,将其从打开文件表中移除

(3)文件的磁盘位置:缓存数据访问信息

(4)访问权限:每个进程的文件访问模式信息

 

视图

1、用户视图:持久的数据结构

2、系统视图

(1)字节序列的集合

(2)系统不关心存储在磁盘上的数据结构

3、OS 的文件视图

(1)建立映射:磁盘块 <-> 文件数据

(2)以字节单位读写数据,以扇区为单位读写磁盘

(3)数据块:逻辑存储单元,

(4)扇区:物理存储单元

4、用户视图 -> 系统视图

(1)进程读文件:获取字节所在的数据块,返回数据块内对应部分

(2)进程写文件:获取数据块,修改数据块中对应部分,写回数据块

5、文件系统中的基本操作单位是数据块

(1)如,getc()、putc() 即使每次只访问 1 字节的数据,也需要缓存目标数据 4096 字节

 

访问模式

1、顺序访问

(1)按字节依次读取

(2)大多数的文件访问都是顺序访问

2、随机访问

(1)从中间读写

(2)更加快速:不希望获取文件中间的内容的时,也必须先获取块内所有字节

(3)不常用,但仍然重要,例如,虚拟内存中把内存页存储在文件

3、索引访问

(1)依据数据特征索引

(2)通常 OS 不提供索引访问

(2)数据库是建立在索引内容的磁盘访问上

 

文件内部结构

1、无结构:单词、字节序列

2、简单记录结构

(1)分列

(2)固定长度

(3)可变长度

3、复杂结构:如,格式化文档,可执行文件

 

文件共享和访问控制

1、存在多用户系统

2、访问控制

(1)用户获取文件的访问权限不同

(2)访问模式:读、写、执行、删除、列举等

3、文件访问控制列表(ACL):<文件实体,权限>

4、Unix 模式

(1)三种不同用户的不同权限:<用户 | 组 | 所有人,读 | 写 | 可执行>

(2)用户标识 ID:识别用户,表明每个用户所允许的权限及保护模式

(3)组标识 ID:允许用户组成组,并指定了组访问权限

 

语义一致性

1、规定多进程 / 多用户如何同时访问共享文件

(1)与同步算法相似

(2)存在磁盘 I/O 和网络延迟,所以设计简单

2、Unix 文件系统(UFS)语义

(1)对打开文件的写入内容,立即对其他打开同一文件的其他用户可见

(2)共享文件指针允许多用户同时读取和写入文件

3、会话语义:写入内容只有当文件关闭时可见

4、读写锁

 

目录

1、文件以目录的方式组织起来

2、目录是一类特殊的文件

(1)目录的内容是文件索引表:<文件名, 指向文件的指针>

3、目录和文件的树型结构

(1)早期的文件系统是扁平的(只有一层目录)

4、典型目录操作,结合 OS 完成

(1)搜索文件

(2)创建文件

(3)删除文件

(4)枚举目录

(5)重命名文件

(6)在文件系统遍历一个路径

5、OS 应该只允许内核修改目录

(1)确保映射的完整性

(2)应用程序能够读取目录

6、目录设计

(1)文件名的线性列表,包涵了指向数据块的指针:编程简单,执行耗时多

(2)哈希表:减少目录搜索时间,哈希碰撞(文件哈希值相同),固定大小

7、名字解析 / 路径遍历

(1)把逻辑名字转换成物理资源

(2)步骤:依据路径名,在文件系统中找到实际文件位置,遍历文件目录直到找到目标文件

(3)例,"/bin/ls":读取 root 的文件头(在磁盘固定位置),读取 root 的数据块,搜索“bin”项,读取 bin 文件头,读取 bin 数据块,搜索“Is”顶,读取Is的文件头

(4)当前工作目录:每个进程都会指向一个文件目录用于解析文件名,提高遍历速度,允许用户指定相对路径来代替绝对路径

8、文件系统挂载

(1)不同的文件系统要挂在不同的目录下,来形成一个分层次的跨文件系统的访问

(2)挂载点:不同文件系统根目录的位置

(3)文件系统需要先挂载才能被访问

 

文件别名

1、两个或多个文件名关联同一个文件

2、硬链接:多个文件项指向一个文件

(2)删除存在硬链接的文件,需要删除所有硬链接

3、软链接:以“快捷方式”指向其他文件,通过存储真实文件的逻辑名称来实现

(1)删除存在软链接的文件,“快捷方式”成为空指针

4、引用技术实现硬链接

(1)Backpointers方案:每个文件有一个包含多个 backpointers 的列表,使用菊花链管理

(2)添加一个间接层(目录项数据结构):链接:已存在文件的另外一个名字(指针),链接处理:跟随指针来定位文件

5、如果有别名机制,就有可能出现潜在的循环

6、消除循环

(1)只允许到文件的链接,不允许在子目录的链接

(2)增加链接时,用循环检测算法确定是否合理

(3)限制路径可遍历文件自录的数量

 

文件系统种类

1、磁盘文件系统:文件存储在数据存储设备上,如磁盘

2、数据库文件系统:文件特征是可被寻址(辨识)的

3、日志文件系统:记录文件系统的修改 / 事件

4、特殊 / 虚拟文件系统

5、网络 / 分布式文件系统

(1)文件可以通过网络被共享

(2)文件位于远程服务器

(3)客户端远程挂载服务器文件系统

(4)标准系统文件访问被转换成远程访问

(5)标准文件共享协议:NFS for Unix,CIFS for Windows

(6)缺点:客户端和客户端上的用户辨别起来很复杂(NFS 是不安全的);读写一致性问题,安全可靠性,错误处理模式

 

虚拟文件系统

1、分层结构

(1)虚拟(逻辑)文件系统(VFS:Virtual File System)

(2)特定文件系统模块

2、目的:对所有不同文件系统做抽象,给上层提供接口

3、功能

(1)提供相同的文件和文件系统接口

(2)管理所有文件和文件系统关联的数据结构

(3)高效查询例程,遍历文件系统

(4)与特定文件系统模块的交互

4、数据结构

(1)卷控制块

(2)文件控制块

(3)目录节点

5、卷控制块

(1)每个文件系统一个

(2)文件系统详细信息:块、块大小、空余块、计数 / 指针等

(3)当文件系统挂载时进入内存

6、文件控制块

(1)每个文件一个

(2)文件详细信息:访问权限、拥有者、大小、数据块位置等

(3)当文件被访问时进入内存

7、目录节点

(1)每个目录项一个(目录和文件)

(2)将目录项数据结构及树型布局,编码成树型数据结构

(3)指向文件控制块、父目录、子目录等

(4)在遍历一个文件路径时进入内存

8、持续存储在二级存储中,分配在存储设备中的数据块中:硬盘头 -> 目录节点信息 -> 文件节点信息 -> 具体文件

 

数据缓存

1、把经常使用,或者经常访问到的数据,存储在内存的缓存中,提高下次访问的效率

2、多种磁盘缓存位置:磁盘 <-> 磁盘控制器:扇区缓存 <-> 内存:数据块缓存 <-> CPU

3、按需读入内存

(1)提供 read() 操作

(2)预读:预先读取后面的数据块

4、一旦使用数据,就缓存

(1)假设数据将会再次用到

(2)写操作可能被缓存和延迟写入

5、缓存方式

(1)数据块缓存

(2)页缓存:统一缓存数据块和内存页

 

分页缓存

1、结合分页机制和缓存机制

2、分页要求:当需要一个页时,才将其载入内存

3、虚拟页式存储:在虚拟地址空间中虚拟页面,可映射到本地外存文件(二级存储)中

4、文件数据块的页缓存

(1)在虚拟内存中文件数据块被映射成页

(2)文件的读 / 写操作被转换成对内存的访问

(3)可能导致缺页 / 脏页

5、页置换算法需要协调虚拟存储和页缓存间的页面数

 

打开文件的数据结构

1、打开文件描述符

(1)每个被打开的文件都有一个文件描述符

(2)文件状态信息:目录项、当前文件指针、文件操作设置等

2、打开文件表

(1)一个进程打开文件表

(2)一个系统的打开文件表

(3)有文件被打开时,文件卷就不能被卸载

3、文件锁:用于协调多进程的文件访问

(1)强制:根据锁保持情况和访问需求确定是否拒绝访问

(2)劝告:进程可以查找锁的状态来决定怎么做

 

文件分配

1、打开文件后执行写操作,对文件空间的增加 / 减少,文件位置进行分配

2、分配方式

(1)连续分配

(2)链式分配

(3)素引分配

3、指标

(1)存储效率

(2)读写性能

 

连续分配

1、以数组方式组织数据,文件头指定起始块和长度

2、分配策略:首次适配、最佳适配、最差适配

3、优点

(1)文件读取表现好

(2)高效的顺序和随机访问

4、缺点

(1)类似连续内存分配,产生内部碎片、外部碎片

(2)添加、删除、扩展,就会造成很大的开销

5、应用场景:只读光盘

 

连续分配

1、以链表方式组织数据,文件头包含了到第一块和最后一块的指针

2、优点

(1)容易添加、删除、拓展

(2)没有碎片

3、缺点

(1)串式访问的方式,无法实现真正的随机访问

(2)可靠性差,链被破坏数据容易丢失

 

索引分配

1、为每个文件创建一个索引数据块,指向文件数据块的指针列表,文件头包含了索引数据块指针

2、优点

(1)容易添加、删除、拓展

(2)没有碎片

(3)支持直接访问

3、缺点

(1)文件比较小时(甚至小于索引大小),存储索引信息的冗余会比较大

(2)文件比较大时,一个链式索引块不够,如果要扩增索引块,就退化到了数组的方式

4、UFS 多级索引分配

(1)文件头包含13个指针:前 10 个指针指向数据块,第 11 个指针指向索引块,第 12 个指针指向二级索引块,第 13 个指针指向三级索引块

(2)提高了文件大小限制阀值

(3)动态分配数据块,容易扩展文件

(4)小文件开销小

(5)只为大文件分配间接数据块,大文件在访问数据块时需要大量查询

 

空闲空间链表

1、OS 需要跟踪在存储中的所有未分配的数据块

2、用位图代表空闲数据块列表

3、Di = 0,表示数据块 i 是空闲,Di = i,表示数据块 i 已分配

4、使用简单但是可能会是一个大的很大向量表

5、假定空闲空间在磁盘中均匀分布,则找到“0”之前要扫描 n / r 次

(1)n = 磁盘上数据块的总数

(2)r = 空闲块的数目

6、读写不一致

(1)指向空闲列表的指针

(2)位图:必须保存在磁盘上,在内存和磁盘接贝可能有所不后,不允许 block[i] 在内存中的状态为 bit[i] = 1而在磁盘中 bit[i] = 0

(3)解决:在磁盘上设置 bit[i] = 1,分配 block[i],在内存中设置 bit[i] = 1

7、其余空闲空间组织方式:链表、链式索引

 

多磁盘管理-RAID

1、磁盘分区:通常磁盘通过分区来最大限度减小寻道时间

(1)分区是一组柱面的集合

(2)每个分区都可视为逻辑上独立的磁盘

2、分区:硬件磁盘的一种适合操作系统指定格式的划分

3、卷:一个拥有一个完整文件系统实例,且可访问的外存空间,通常常驻在磁盘的单个分区上

4、优点

(1)把数据放在独立的磁盘上,通过并行的工作,实现并行的数据访问,可以增大吞吐量

(2)通过冗余,在执行写操作的时候,对两个硬盘执行同样的写操作,如果一个硬盘崩了,第二个硬盘可以替换第一个,提高容错率、可靠性,写入代价增高

5、冗余磁盘阵列

(1)RAID:RedundantArray of InexpensiveDisks

(2)多种磁盘管理技术

6、冗余磁盘阵列的实现

(1)软件:文件系统之下,磁盘序列之上,OS 内核:储存 / 卷管理

(2)硬件:RAID 硬件控制器(I/O)

7、RAID 分类

常用级别 特点 硬盘及容量 性能及安全 典型应用
RAID-0 用于平行存储,即条带。其原理是把连续的数据分成几份,然后分散存储到阵列中的各个硬盘上。任何一个磁盘故障,都将导致数据丢失。 硬盘数:一个或更多
容量:总的磁盘容量
性能:读写性能高,随机写性能高
安全:无冗余,无热备盘,无容错性,安全性低
无故障的迅速读写,要求安全性不高,如图形工作站等。
RAID-1 镜像存储。其原理是把相同的数据分别写入阵列中的每一块磁盘中,最大限度的保证用户数据的可用性和可修复性。缺点是存储成本高。 硬盘数:两个或2*N个
容量:总磁盘容量的50%
性能:读写性能低,随机写性能低
安全:利用复制进行冗余,有热备盘,可容错,安全性高
随机数据写入,要求安全性高,如服务器、数据库存储领域。
RAID-5 分布奇偶位条带。是一种存储性能、数据安全和存储成本兼顾的存储方案,也可理解为是RAID 0和RAID 1的折衷方案。其原理是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。相对于RAID 0,只是多了一个奇偶校验信息。多个数据可对应一个奇偶校验信息。 硬盘数:三个或更多
容量:(n-1)/n的总磁盘容量(n为磁盘数)
性能:随机和连续写性能低,读性能高
安全:利用奇偶校验进行冗余,可容错,安全性高
随机数据传输要求安全性高,如金融、数据库、存储等。
RAID-10 镜像阵列条带。兼顾存储性能和数据安全,提供了与RAID 1一样的数据安全保障,同时具备与RAID 0近似的存储性能。缺点是存储成本高。 硬盘数:四个或4*N个
容量:总磁盘容量的50%
性能:读写性能适中
安全:利用复制进行冗余,可容错,安全高
适于于要求存取数据量大,安全性高,如银行、金融等领域。
RAID 10 和 RAID 01 的区别:
RAID 10 和 RAID 01 是两种逻辑方式不同的组合。 RAID 10 是先镜像后条带,即先将硬盘纵向做镜像,然后再横向做条带。在这种情况下,只要不是同一个镜像组中的几块硬盘同时坏掉,RAID组都不会崩溃。即同一个镜像组的硬盘不能同时坏掉。
RAID 01 是先条带后镜像,即先将硬盘横向做条带,然后再纵向做镜像。 在这种情况下,只要不是两个条带上同时有硬盘坏掉,则整个RAID组都不会崩溃。不管发生介质损坏的两块硬盘是否是镜像 盘。即不同条带组的硬盘不能同时坏掉。
RAID 10 和 RAID 01 在性能上基本相同,但RAID 01 发生故障的概率要大于RAID 10 。所以一般情况下都选择RAID 10。

 

磁盘调度

1、读取或写入时,磁头必须被定位在期望的磁道,并从所期望的扇区的开始

2、寻道时间:定位到期望的磁道所花费的时间

3、旋转延迟:从扇区的开始处,到达目的处花费的时间

4、平均旋转延识时间:磁盘旋转一周时间的一半

5、磁盘 IO 传输时间

(1)Ta = Ts + 1 / 2 * r + b / r * N = Ts + Tr + Tt

(2)Ta = 访问时间

(3)Ts = 寻道时间

(4)Tr = 旋转延迟,磁盘旋转一周时间的一半

(5)Tt = 传输时间

(6)b = 传输的比特数

(7)N = 磁道上的比特数

(8)r = 磁盘转数,1 / r = 旋转一周的时间

 

减少寻道时间

1、先来先服务算法(FCFS)

(1)按顺序处理请求,公平对待所有进程

(2)缺点:在有很多进程的情况下,接近随机调度的性能,寻道时间大幅增加

2、最短寻道时间优先算法(SSTF)

(1)选择从磁臂当前位置需要移动最少的 I/O 请求,总是选择最短寻道时间

(2)缺点:不公平性、不均匀性:请求频繁出现,磁头只在附近打转,距离磁头远处的请求无法得到响应;可能磁臂黏着

3、扫描算法(SCAN)/ 电梯调度算法

(1)首先自内向外访问,磁臂在一个方向上移动,满足所有未完成的请求,直至无更外的磁道需要访问时

(2)将磁臂换向为自外向内移动,直至无更内的磁道需要访问时,转向为自内向外,即(1),以此类推

(3)优点:不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑了磁头当前的移动方向,避免了出现饥饿现象

(4)缺点:可能磁臂黏着

4、循环扫描算法(CSAN)

(1)首先自里向外访问,磁臂在一个方向上移动,满足所有未完成的请求,直至无更外的磁道需要访问时,磁臂转向,但不处理 IO 请求,重新在最内磁道处理 IO 请求

(2)扫面算法的改进,限制了仅在一个方向上扫描,方向规定:自内向外 / 自外向内

(3)缺点:可能磁臂黏着

5、磁臂粘着

(1)磁臂停留在某处不动的情况,例如,进程反复请求对某一磁道的 IO 操作

(2)SSTF、SCAN、CSCAN,都可能出现

6、N-Step-SCAN 算法

(1)将磁盘请求队列分成若干个长度为 N 的子队列,磁盘调度将按 FCFS 算法依次处理这些子队列,处理一个队列时,按 SCAN 算法,对一个队列处理完后,再处理其他队列,当正在处理某子队列时,如果又出现新的磁盘 IO 请求,便将新请求进程放入其他队列

(2)结合 FCFS、SCAN,避免出现磁臂粘着现象

7、FSCAN 算法

(1)实质上是 N-Step-SCAN 算法的简化

(2)只将磁盘请求队列分成两个子队列

(3)一个是由当前所有请求磁盘 IO 的进程形成的队列,由磁盘调度按 SCAN 算法进行处理,在处理某队列期间,将新出现的所有请求磁盘 IO 的进程放入另一个等待处理的请求队列,所有的新请求都将被推识到下一次扫描时处理

posted @   半条咸鱼  阅读(791)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示