一、文件系统结构
c盘的逻辑单元为块,显存和c盘之间的I/O传输以块为单位执行。
c盘的特征
1可以原地重画,可以从c盘上读一块儿,更改该块,并将它写回到原先的位置可以直接访问c盘上的任意一块。因而,可以便捷地按次序或随机访问文件
文件系统须要提供高效快捷c盘访问,便于轻松储存、定位、提取数据。即储存文件、访问文件
文件系统有两个不同的设计问题
访问问题:怎么定义文件系统对用户的插口储存问题:创建数据结构和算法,把逻辑文件系统映射到化学外存设备
文件系统本身一般由许多不同层组成。每层实际借助更低层功能,创建新的功能,以用于更高层的服务。
设备驱动程序可以作为翻译器,他的输入作为中级指令,输出由底层的、硬件特定指令组成。
基础文件系统只需向适当设备驱动程序发送。
逻辑文件系统通过文件控制块维护文件结构。
文件控制块(FCB)包含有关文件的信息,包括所有者、权限、文件内容的位置等。
大多数操作系统支持多种不同的文件系统,举例:
相关视频推荐
3个linux内核的秘密,让你彻底搞清文件系统
分析Linux内核虚拟文件系统(VFS)构架
Linux内核源码剖析之Ext2/3文件系统
须要C/C++Linux服务器构架师学习资料加qun812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,解释器,DPDK,ffmpeg等),免费分享
二、文件系统实现1.概述
在c盘上,文件系统包括的信息有
怎样启动储存在哪里操作系统总的块数空闲块的数量和位置目录结构各个具体文件等
上述许多结构会在以后详尽述说。这儿阐述如下:
显存中的信息用于管理文件系统并通过缓存来提升性能,这种数据在安装文件装系统时被加载,在文件系统操作期间被更新,在卸载是被卸载。这种结构类型包括:
每位进程的打开文件表:包括一个指向系统的打开文件表中合适条目的表针和其他信息整个系统的打开文件表:包括每位打开文件的FCB副本和其他信息
创建一个新文件
应用程序调用逻辑文件系统。逻辑文件系统指导目录结构的格式,它会分配一个新的FCB系统将相应的目录信息读入显存更新目录结构和FCB将结果写回c盘
一旦文件被创建,才能用于I/O,不过,首先他要被打开。系统调用open()将文件名传到逻辑文件系统,系统调用open():
首先搜索整个系统的打开文件表,查看是否早已被打开,假如是,则在该进程的打开文件表创建一个条目,并指向现有整个系统的打开文件表。否则,按照文件名搜索目录结构找到后,它的FCB会复制到显存的整个系统的开放文件表中(该表还储存着打开该文件的进程数目),接出来,在该进程的打开文件表创建一个条目,并指向现有整个系统的打开文件表。
Open()返回值:文件描述符是一个非负整数。它是一进程打开文件表的索引值,指向系统范围内打开文件表相应条目
2.虚拟文件系统
操作系统怎样能够将多个类型的文件系统集成到目录结构中?用户怎样在访问文件系统空间时,可以无缝地在文件系统类型间迁移?大多数操作系统采用面向对象的技术来简化、组织、模块化实现。
数据结构和程序用于隔离基本的操作系统调用的功能与实现细节。因而,文件系统的实现有三个主要层构成。
第一层为文件系统插口。
第二层为虚拟文件系统(VFS),把文件系统的通用操作和具体实现分开linux系统文件格式,虚拟文件系统提供了在惟一标示一个文件的机制。VFS基于vnode的文件表示结构,它包含了一个数值标示符来惟一表示网路上的一个文件。
VFS能分辨不同本地文件系统VFS能分辨本地文件系统和远程文件系统
三、目录实现1.线性列表
采用文件名称和数据块表针的线性列表
2.哈希表
哈希表依据文件名得到一个值,并返回一个指向线性列表中元素的表针
四、磁盘空间的分配方式1.连续分配
每位文件在c盘上占有一组连续的块。文件的连续分配可以用文件第一块的c盘地址和连续块的数目(即厚度)来定义
连续分配支持次序访问和直接访问
问题:当文件须要扩充,文件大小变大时会难以扩充
解决:找更大的连续空间,复制过去
基于扩充的连续分配方案用以下参数来定义文件
开始地址块儿数指向下一个扩充块儿的表针(扩充块儿可以是多个)
定义格式:
文件【开始地址linux系统文件格式,块儿数,指向下一个扩充块的表针】
2.链接分配
每位文件是c盘块儿的数组,c盘块分布在c盘的任何地方,文件有起始块和结束块来定义
定义格式:【起始块,结束块】
同时,每位c盘块都有指向下一个c盘块的地址。
优点:没有c盘空间浪费
缺点:
不支持文件的直接访问须要更多的c盘空间(来记录表针)
链接分配的一个重要变种是文件分配表
每位卷的开始部份用于储存文件分配表(FileAllocationTable),表中每位c盘块都有一个FAT条目linux视频,并可通过块号索引。(未使用的块为0,使用的块包含下一个块儿号)
目录条目富含文件首块号码,通过这个块号索引的FAT条目包含文件下一块的号码,这个链会继续下去,直至最后一块,最后一块的表条目值为文件结束值。
3.索引分配
通过将所有表针置于一起,即索引块
文件用索引块来定义,每位文件有其索引块。
这儿有一个问题,索引块应为多大?
每位文件必须有一个索引块,因而索引块应尽可能小,但是不能太小,否则放不下足够多的表针,为处理这个问题,有如下一些机制:
链接方案:为了处理大文件,可以将多个索引块链接上去多层次索引:用第一层索引块指向一组第二层的索引块,第二层索引块再指向文件块组合方案:用于基于UNIX的文件系统,将索引块的前15个表针储存在文件的i-node中。其中,前12个表针指向直接块,剩下3个表针指向间接块
五、磁盘空闲空间的管理1.位向量
空闲空间表实现为位图,或位向量,每块用一位(bit)表示。1表示块空闲;0表示块已分配
2.数组
所有空闲块用数组链接上去,并将指向第一个空闲块儿的表针保存在特殊位置,同时缓存在显存。
每位块儿富含下一个块儿的表针
3.组
将n个空闲块的地址保存在第一个空闲块中。
这种空闲块中的前n-1个为空,而最后一块包含另外n个空闲块的地址。
比数组好的是空闲块的地址可以很快找到,并且可以明晰一段连续空闲块空间
例:n=3
4.计数
基于以下事实:
一般有多个连续块须要同时分配或释放,尤其是在使用连续分配时。因而记录
例:
六、文件系统的性能和效率
c盘空间的有效使用(效率),取决于
改善性能的方式:缓存
缓冲区缓存:一块独立显存,坐落其中的块是马上须要使用的页面缓存:将文件数据作为页而不是块来缓存。页面缓存使用虚拟显存技术,将文件数据作为页来缓存linux vi ,比采用数学c盘块来缓存更高效板载高速缓存
假如没有统一缓存,则会由右图情况发生:
系统调用read()和write()会通过缓冲区缓存,但是,显存映射调用须要使用两个缓存,即页面缓存和缓冲区缓存。显存映射先从文件系统中读入c盘块,并装入缓冲区缓存,因为虚拟显存系统没有缓冲区缓存插口,缓冲缓存内的文件必须复制到页面缓存中。
采用统一缓冲缓存
统一缓冲缓存:统一使用缓冲器缓存来缓存进程页和文件数据。
无论是缓存块还是页面都有置换问题,
文件的读入或写出通常是按次序进行。所以,不适宜采用LRU算法,由于近来使用的页面最后才能用甚至根本不会再用。
次序访问可以通过马上释放和预先读取来加以优化
马上释放(free-behind):恳求下一页时,马上释放上一页预先读取(read-ahead):恳求页然后的下一个页也一起读入七、文件系统的恢复
目录信息通常事先保存在显存中以推动访问,有时会造成目录结构中的数据和c盘块中的数据不一致。
解决:
一致性检测:比较目录结构中的数据和c盘块中的数据,尝试着去修正不一致备份&恢复:I.备份(backup):借助系统程序来备份数据到其他的储存设备。软驱,磁带II.恢复(recovery):通过从备份来恢复遗失的文件或c盘
基于日志结构的文件系统
本文原创地址://lrxjmw.cn/srjxwjxtjgys.html编辑:刘遄,审核员:暂无