文件系统
作者:@cherish.
课程学习内容为作者从学校的PPT处摘抄,仅供自己学习参考,若需转载请注明出处:https://www.cnblogs.com/cherish-/p/15760224.html
文件系统概述
文件
什么是文件
文件是在逻辑上具有完整意义的信息集合,它有一个名字以供标识,文件名是以字母开头的字母数字串。
构成文件的基本单位
信息项、记录
文件的其他描述
- 文件是具有符号名的信息(数据)项的集合
- 文件是具有符号名的记录的集合
文件分类
- 按文件的性质和用途分类:系统文件、程序库、用户文件
- 按文件保护级别分类:不保护文件、执行文件、只读文件、读写文件
- 分类按文件流向分类:输入文件、输出文件、输入输出文件
文件名与属性
- 文件名:每个文件有一个给定的名字,这个名字是由串描述且由文件内容来表示,包括文件符号名和内部标识符。
用户使用文件符号名进行文件操作
系统使用文件内部标识符管理文件 - 文件扩展:文件扩展表示文件的使用特征,如:.c .obj .lib 等。
- 文件属性:文件的属性字,表示文件类别、保护级等信息。
文件系统
什么是文件系统
文件系统是操作系统中负责管理和存取文件信息的软件机构。
文件系统的组成
- 管理文件所需的数据结构:如目录表、文件控制块、存储分配表
- 管理程序
- 一组操作
文件系统的功能
- 从用户角度看——文件系统实现了“按名存取”的功能。
- 从系统角度看——辅存空间管理、构造文件构造、提供文件共享功能、提供存取文件的方法、文件保护、提供一组文件系统操作命令。
文件系统的特点
- 使用简单——使用文件名、一组文件操作命令。
- 安全可靠——提供防护措施,在文件遭受破坏时,能及时复。全量备份、增量备份、动态备份、远程备份。
- 既能共享,又能保密——身份验证、存取权限验证。
文件存储空间的管理
所有磁盘片的相同磁道称为一个柱面,因此,磁盘上每个物理块的位置可用柱面号、磁头号和扇区号表示,这些地址和物理块号一一对应。
文件存储空间的管理:
- 文件存储设备是分成若干个大小相等的物理块,并以块为单位来交换信息的。
- 空闲块的组织,空闲块的分配与空闲块的回收。
常用空闲块管理策略
-
空闲文件目录
将所有空闲块记录在一个表中,即空闲块表表中有两项:起始块号,空闲块个数。
-
空闲块链
把所有空闲块链成一个链,每个空闲块中有指向下一个空闲块的指针,所有空闲块构成一个链表。不需要磁盘分配表,节省空间。每次申请空闲块只需取出链表开头的空闲块即可。当申请分配存储空间时,就按需要从链首依次取下几个物理块分配给文件。当回收存储空间时,将回收的空闲块依次链入空闲块链中。
-
位示图
用一串二进制位反映磁盘空间中分配使用情况,每个物理块对应一位,分配物理块为1,否则为0。申请物理块时,在位示图中查找为0的位,返回对应物理块号。归还时,将对应位转置0。描述能力强,适合各种物理结构。
文件的逻辑结构
逻辑结构概念
-
什么是逻辑文件
从用户角度看到的文件面貌。即用户对信息进行逻辑组织形成的文件结构。
-
研究文件逻辑结构的目的
- 为用户提供一种逻辑结构清晰、使用简便的逻辑文件形式。
- 用户按文件的逻辑结构形式去存储、检索和加工文件中的信息。
文件的逻辑结构分类
流式文件
- 什么是流式文件:流式文件是相关的有序字符的集合,是无结构的。
- 流式文件的存取:流式文件是按信息的个数或以特殊字符为界进行存取的。
记录式文件
- 什么是记录式文件:记录式文件是一种有结构的文件。这种文件在逻辑上总是被看成一组连续顺序的记录的集合。
- 定长记录与变长记录
两种文件的比较
- 流式文件就象给一张白纸给用户,用户可将他的信息任意地写到纸上,没有任何格式上的限制。
- 记录式文件就象给一张表格给用户,用户要按表规定的格式填信息。
- 流式文件管理简单,记录式文件需要管理记录结构信息。
文件存取方法
顺序存取
后一次存取总是在前一次存取的基础上进行的。顺序存取时不必给出具体的存取位置。
随机存取
用户以任意次序请求某个记录。随机存取时要指出起始存取位置(例如记录号)。
文件的物理结构
物理结构概念
什么是物理文件
文件的物理结构是信息在物理存储器上的存储方式,是数据的物理表示和组织。
研究文件物理结构的目的
- 选择工作性能良好、设备利用率高的物理文件形式。
- 系统按照文件的物理结构形式和外部设备打交道,控制信息的传输。
逻辑记录与物理记录(磁盘块)
- 逻辑记录:文件中按信息在逻辑上的独立含义来划分的信息单位,逻辑记录是对文件进行存取操作的基本单位。
- 物理记录:在存储介质上,由连续信息所组成的一个区域称为块,也叫物理记录。
- 逻辑记录与物理记录的区别与联系
- 一个是逻辑的概念,一个是物理的概念。
- 逻辑记录最终要存放到物理记录上。
从用户使用观点来看,关心数据的逻辑结构,即记录及其逻辑关系,数据独立于物理环境;
从系统实现观点来看,关心数据的物理结构,数据被文件系统按照某种规则排列和存放到物理存储介质上。
文件物理结构分类
连续文件
定义:连续文件结构是由一组分配在磁盘连续区域的物理块组成的。
举例:文件A有三个记录 (逻辑记录与物理块大小相等,都为512B),采用连续文件结构,r0存放在块号为100的磁盘块上。
连续文件的特点:连续存取时速度较快;文件长度一经固定便不易改变;文件的增生和扩充不易
串联文件
定义:串联文件结构是按顺序由串联的块组成的,即文件的信息存于若干块物理块中,每个物理块的最末一个字作为链接字,它指出后继块的物理地址。文件的最后一块的链接字为结束标记“”,它表示文件至本块结束。
串联文件结构示例:
串联文件的特点:能较好地利用辅存空间;易于对文件进行增生和扩充;连续存取时速度较快。
串联文件改进方案——文件映照
为了克服串联文件的存取效率太低的问题,人们提出文件映照的技术,即把链接文件中的链接字集中在一结构中,这样既保持了链接文件的优点,也克服了其缺点,DOS、WINDOWS系统就采用了这样结构。
在文件映照结构中,系统有一个文件映照图(以磁盘块号为序),图中每一个表现用来记录磁盘块号。每个文件的文件目录项中,用来描述文件物理结构的表项指向文件映照图中的某个位置,其内容与该文件的第一块,其后的各块在文件映照图中一次勾链,文件的最后一块用尾标记表示。文件映照结构如下图所示。其中文件A占据了磁盘的第12、15、13和17块。
索引文件
定义:系统为每个文件建立逻辑块号与物理块号的对照表。这张表称为该文件的索引表。文件由数据文件和索引表构成。这种文件称为索引文件。
索引文件结构示例:
索引文件的操作
- 索引文件在存储区中占两个区:索引区——存放索引表;数据区——存放数据文件
- 访问索引文件的操作:1.查文件索引,由逻辑块号查得物理块号;2.由此磁盘物理块号而获得所要求的信息。
索引文件的特点:
- 易于文件的增删
- 直接读写任意记录
索引表的组织——多级索引
-
直接索引
文件目录项中有一组表项用于索引。每一个表项登记的是逻辑记录所在的磁盘块号。
-
一级间接索引
文件目录项中有一组表项,其内容登记的是第一级索引表块的块号。第一级索引表块中的索引表项登记的是文件逻辑记录所在的磁盘块号。
-
二级间接索引
文件目录项中有一组表项,其内容登记的是第二级索引表块的块号。第二级索引表块中的索引表项登记的第一级索引表块的块号,第一级索引表项中登记的是文件逻辑记录所在的磁盘块号。
文件目录及其结构
文件目录有关概念
什么是文件目录(目录文件)
文件目录是记录文件的名字、存放地址及其他有关文件的说明信息和控制信息的数据结构。
文件目录项的内容
- 文件名
- 文件逻辑结构:说明该文件的记录是否定长、记录长度及记录个数等。
- 文件物理结构:记录文件的物理结构形式
- 连续文件——指出文件第一块的物理地址、文件所占块数
- 串联文件——指出该文件第一块的物理地址
- 索引文件——指出索引地址
- 存取控制信息:文件主具有的存取权限、核准的其他用户及其相应的存取权限
- 管理信息:文件建立日期、时间,上一次存取时间、要求文件保留的时间等
- 文件类型:文件的类型,例如可分为数据文件、目录文件、块存储设备文件、字符设备文件
一级文件目录
什么是一级文件目录
系统将已建立的所有文件的文件名、存放地址及有关的说明信息放在一张表中,这张表称为一级文件目录。
一级文件目录的特点
- 实现了按名存取的功能,比较简单;
- 要求文件名和文件之间有一一对应的关系,即不允许两个文件有相同的名字。
在多用户环境中,出现了重名问题或称为命名冲突。
重名问题
所谓“重名”,是指不同用户对不同文件起了相同的名字,即两个或多个文件只有一个相同的符号名。又称为命名冲突。为了解决命名冲突、获得更灵活的命名能力,文件系统必须采用多级目录结构
树型文件目录
什么是树型文件目录
在多级目录系统中 (除最末一级外),任何一级目录的目 录项可以描述一个目录文件,也可以描述一个非目录文件 (数据文件),而数据文件一定在树叶上。这样,就构成了一个树形层次结构。
树型文件目录结构示例
文件路径名
多级目录中,文件的路径名是由根目录到该文件的通路上所有目录文件符号名和该文件的符号名组成的字符串,相互之间用分隔符分隔。
如何解决重名问题
文件共享与安全
文件共享
文件共享是指某一个或某一部分文件可以让事先规定的某些用户共同使用。
文件安全
什么是文件安全
所谓文件安全,就是文件的保护问题。 文件的保护是指文件本身不得被未经文件主授权的任何用户存取,而对于授权用户也只能在允许的存取权限内使用文件。
如何进行文件的保护
需要对用户的权限进行验证。所谓存取权限的验证,是指用户存取文件之前,需要检查用户的存取权限是否符合规定,符合者允许使用,否则拒绝。
验证用户存取权限的方法
- 访问控制矩阵
- 存取控制表
- 用户权限表
- 口令
- 密码
- 按行:用户权限表
- 按列:存取控制表
用文件路径名加快文件的查找
当前目录
定义:当前目录又称值班目录。当前目录是当前用户正在使用的文件所在的目录。当指定当前目录后,用户对文件的所有访问都是相对于 “当前目录”进行的。这时,文件路径名是由“当前目录”到信息文件的通路上所有各级目录的符号名加上该信息文件的符号名组成。
示例
链接技术
所谓“链接”,就是在相应目录表目之间进行链接,即一个目录中的表目直接指向另一个目录表目所在的物理位置。注意,这种链接不是直接指向文件,而是指向相应的目录表目。这种办法也称为连访,被共享的文件称为连访文件。
示例
UNIX/Linux的链接文件
-
硬链接和软连接
UNIX/Linux下的链接文件有两种,硬连接 (Hard Link) 和软连接,软连接又称符号链接 (Symbolic link)。符号链接文件中并不包括实际的文件数据,而只是包括了它指向文件的路径。它可以链接到任意的文件和目录,包括处于不同文件系统的文件以及目录。当用户对
链接文件操作时,系统会自动的转到对源文件的操作,但是删除链接文件时,并不会删除源文件。 下图是文件的软链接示意图。
文件操作与文件备份
文件操作
打开文件操作
把该文件的有关目录表目复制到主存中约定的区域,建立文件控制块,建立用户和这个文件的联系。
- 检查参数,获得文件名(路径名);
- 按名查找文件目录,找到文件的目录项;
- 将目录项读入内存,存入内存活跃FCB;
- 进程PCB中的资源描述区建立指针指向FCB。
关闭文件操作
所谓关闭文件就是用户宣布这个文件当前不再使用,系统将其在主存中的文件控制块删去,因而也就切断了用户同这个文件的联系。如果活动FCB不再使用,则释放该FCB所占的空间。
文件的读写
- 核实参数,获得内存活跃文件FCB;
- 核实操作许可;
- 按FCB中文件物理结构信息将要读写的逻辑地址转化成物理地址。
- (如写,则将数据从用户区拷入系统区,)将物理地址,内存地址,长度等参数填好,调用磁盘驱动程序进行I/O操作 ,(如读,则将系统区数据拷入用户区)。
文件备份
什么是文件备份
为了能在软、硬件失效的意外情况下恢复文件,保证文件的完整性、数据的连续可利用性,文件系统提供适当的机构,以便复制备份。
文件备份的方法
-
周期性转存储
按固定的时间周期把存储器中所有文件的内容转存到某种介质上,通常是磁带或磁盘。在系统失效时,使用这些转存磁盘或磁带,将所有文件重新建立并恢复到最后一次转存时的状态。
-
增量性转存储
这种技术转储的只是从上次转储以后已经改变过的信息;增量转储的信息量较小,故转储可在更短的时间周期内进行。
文件备份的发展
- 动态备份
- 远程备份技术
UNIX文件系统的主要结构及实现技术
UNIX文件系统的特点
UNIX文件的特点
- 树型文件目录结构
- 可安装拆卸的文件系统
- 文件是无结构的字符流式文件
- 将外部设备与文件一样对待
UNIX文件的类型
- 普通文件:用户程序、数据文件
- 目录文件:用于组织和形成树型目录结构中的一个单位,由若干目录项组成。
- 特别文件:与硬设备有关的文件称为特别文件。包括块设备文件、字符设备文件。与计算机连接每一种输入输出设备都有一个特别文件。它是操作系统核心用于存取输入输出设备的通道,是用户与硬件设备联系的桥梁。
UNIX系统的索引文件结构
文件索引节点
-
什么是文件索引节点:UNIX系统把文件目录项中除了名字以外的信息全部存放到一个磁盘的数据块上,这种数据块就是文件索引节点(indexnode),简称i节点,又称为磁盘索引节点。在目录项中只有文件的名字和对应i节点的编号。
-
磁盘索引节点结构
-
磁盘索引节点示例
UNIX文件索引结构
UNIX系统采用文件索引结构,文件所在的磁盘物理块号可以不连续。
UNIX第七版本的文件索引结构
UNIX system ⅴ的文件索引结构
UNIX系统文件目录结构
目录项与目录文件
-
目录文件:每个目录表为一个目录文件。目录文件由目录项组成。
-
目录项:每个目录项包含16个字节 (UNIX系统老版本)。在目录项中,第1、2字节为相应文件的辅存i节点号;后14个字节为文件名。一个辅存磁盘块 (512B)包含32个目录项。
UNIX系统树型目录结构
- 每个文件系统都有一个根目录文件,它的辅存i节点是相应文件存储设备上辅存索引区中的第一个。
- 打开某个文件时,从根目录的i节点可以找到根目录文件的索引结构,得到根目录文件的每个数据块。
- 将待打开文件的路径信息与目录文件中的目录项逐一比较,可以得到下级目录的i节点号,并最终得到目标文件的i节点号。从i节点号中的索引表,得到数据文件的存储块号,实现对目标文件的随机存取。
文件目录结构中的勾链
UNIX文件目录结构中带有交叉勾链。用户可以用不同的文件路径名共享一个文件。文件勾链在用户看来是为一个已存在的文件另起一个路径名。文件勾链的结果表现为一个文件由多个目录项所指向。
基于索引结点的共享方式(硬链接)
注:任何用户对文件进行附加操作或修改,所引起的相应索引结点内容的改变,对其它共享用户均是可见,从而可提供其他用户共享。
基于索引结点的共享方式续
利用符号链接实现文件共享
UNIX系统的打开文件机构
为了提高系统效率,减少主存空间的占用,系统设置了打开文件和关闭文件操作。当打开一个文件时,建立用户与该文件的联系。文件系统中管理这一工作的机构称为打开文件机构。打开文件机构由活动i节点表、打开文件表和用户文件描述符表组成。
活动结点表
当执行打开文件操作时,将文件辅存i节点的有关信息拷贝到主存,形成活动i节点表,他由若干个活动i节点组成。
活动i结点(主存索引节点)的结构如下:
系统打开文件表
一个文件可以被同一进程或不同进程,用同一或不同路径名,相同的或互异的操作要求 (读、写)同时打开。为了记录打开文件所需的附加信息,文件系统设置了一个全程核心结构—系统打开文件表。
系统打开文件表结构
用户文件描述符表
用户进程扩充控制块user中的一个数组u_ofile[NOFILE]称为用户文件描述符表,其中的每一项 (指针)指向系统打开文件表的一个表项。一个打开文件在用户文件描述表中所占的位置就是它的文件描述符 (或称打开文件号)。进程可以打开不同的文件,也可以对同一文件以不同的操作方式打开。
实例
假定一个进程执行下列代码:
fd1=open (“/etc/passwd”,O_RDONLY);
fd2=open (“loca”,OWR_ONLY);
fd3=open (“/etc/passwd”,O_RDWR);
该进程打开文件后的数据结构:
父子进程文件共享
- 父子进程共享“文件表项”(file对象),父进程和子进程增加“文件打开计数”。
- dup系统调用,dup增加的引用来自同一文件描述符。
- 父子进程独立运行后再打开的文件就不在共享file对象,这个两个独立进程打开文件情况一样。
文件存储器空闲块的管理
文件卷和卷管理块
一个文件系统就是逻辑设备,每个逻辑设备占用一片连续的磁盘存储空间。 文件卷上存放UNIX文件系统。文件卷结构如下。
引导块 | 管理块 | 索引节点区 | 数据区 |
---|
- 引导块——大小为一个磁盘块,包含引导程序。
- 索引节点区——索引节点结构组成。
- 数据区——数据文件占用的区域。
- 管理块——记录文件系统各种数据,如:文件系统大小、空闲块数目等。
空闲磁盘块的管理
-
空闲磁盘块的组织方法:空闲磁盘块管理采用成组链接法,即将空闲表和空闲链两种方相结合。系统初启时,文件存储区是空闲。将空闲块从尾倒向前,每100块分为一组 (注:最后一组为99块),每一组的最后一块作为索引表,用来登记下一组100块的物理块号和块数。那么,最前面的一组可能不足100块,这一组的物理块号和块数存放在管理块的s_free[100]和s_nfree中。
-
空闲磁盘块分组链接索引结构
-
空闲磁盘块分组链接索引结构图示
当系统要为用户分配磁盘块时,首先检查空闲盘块号栈是否上锁,如未上锁,便从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格。若该盘块号已是栈底, 即S.free(0),这是当前栈中最后一个可分配的盘块号。由于在该盘块号所对应的盘块中记有下一组可用的盘块号,因此, 须调用磁盘读过程,将栈底盘块号所对应盘块的内容读入栈中,作为新的盘块号栈的内容,并把原栈底对应的盘块分配出去(其中的有用数据已读入栈中)。
在系统回收空闲盘块时,须调用盘块回收过程进行回收。它是将回收盘块的盘块号记入空闲盘块号栈的顶部,并执行空闲盘块数加1操作。当栈中空闲盘块号数目已达100时,表示栈已满,便将现有栈中的100个盘块号,记入新回收的盘块中,再将其盘块号作为新栈底。
作者:cherish.
出处:https://home.cnblogs.com/u/cherish-/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)