文章目录
4.1 文件系统基础
4.1.1 文件的基本概念
- 文件是以硬盘为载体的存储在计算机上的信息集合,文件可以是文本文档、图片、程序等
- 系统运行时,计算机以进程为基本单位进行资源调度和分配;而用户进行输入、输出时,以文件为基本单位
文件的结构,通过自底向上的方式定义:
- 数据项。文件系统中最低级的数据组织形式,可以分为
- 基本数据项:描述一个对象或某种属性的一个值,是数据中的最小逻辑单位
- 组合数据项:多个基本数据项组成
- 记录:一组相关的数据项的集合,描述一个对象在某方面的属性
- 文件:创建者定义的,具有文件名的一组相关元素的集合,分为
- 有结构文件(记录式文件):由若干个相似的记录组成,如(一个班的学生记录)。
- 无结构文件(流式文件):被视为字符流, 如(一个二进制文件或字符文件)。
4.1.2 文件控制块和索引节点
与进程管理类似,为了便于文件管理,操作系统引入文件控制块的数据结构
1. 文件的属性
文件属性/文件元数据:操作系统保存的与文件相关的信息
- 名称。文件名称唯一,以容易读取的形式保存
- 类型。被支持不同类型的文件系统使用
- 创建者。文件创建者的ID
- 所有者。文件所有者的ID
- 位置。指向设备和设备上文件的指针
- 大小。文件当前大小(字节、字或块表示),也可以包含文件允许的最大值。
- 保护。对文件进行保护的访问控制信息
- 创建时间、最后修改时间、最后存取时间。用于保护和跟踪文件
操作系统通过文件控制块FCB来维护文件元数据
2. 文件控制块
- FCB存放控制文件需要的各种信息,实现按名存取
- FCB的有序集合称为文件目录,一个FCB文件就是一个文件目录项
- 一个文件目录也被视为一个文件,称为目录文件
FCB主要包含:
- 基本信息:文件名、文件物理位置、逻辑结构、物理结构等等。
- 存取控制信息:文件主的存取权限,核准用户的存储权限以及一般用户的存取权限。
- 使用信息:文件建立时间,上次修改时间等。
一个文件目录也被称为一个文件,称为目录文件。
3. 索引节点
- 文件目录一般放在磁盘,查找文件时需要将目录调入内存,付出开销。
- 在检索目录时,文件名以外的描述信息不会使用到,也就不需要调入内存。因此有的系统(例如UNIX)采用文件名和文件描述信息分开的方法。
- 文件描述信息单独形成一个数据结构,称为索引节点,简称i节点(inode)。文件目录中的每个目录项由文件名和指向i节点的指针组成。
索引节点分为:
- 磁盘索引节点:存放在磁盘中的索引节点。每个文件有一个唯一的磁盘索引节点
2.内存索引节点:存放在内存中的索引节点。文件被打开时,需要将磁盘索引节点复制到内存索引节点中。
1 . UNIX操作系统中,IO设备视为:特殊文件
2. (13 408)某文件系统索引节点中包含直 接地址项和间接地址项,与单个文件长度无关的因素:索引节点的总数。一个索引节点(inode)对应一个文件,索引节点总数对应文件的数量
4.1.3 文件的操作
1. 文件的基本操作
2. 文件打开和关闭
文件打开:
- 调用open根据文件名搜索目录,将指明文件的属性(包括文件在外存的物理位置),从外存复制到内存打开文件表的一个表目中,并将该表目的编号(索引)返回给用户
- 用户再次向系统发出文件操作请求时,可通过索引在打开文件表中查询到该文件的信息,节省搜索目录的开销
文件关闭:
- 文件不在使用时,利用系统调用close关闭,操作系统会从打开文件表中删除这一条目
在多个进程可以同时打开文件的操作系统中,通常采用两级表
- 进程打开表:根据进程打开的所有文件,存储进程对文件的使用信息
- 系统打开表:包含打开的文件相关信息
- 一旦有进程打开文件,系统表就包含该文件的条目
- 另一个进程对已经打开的文件进行open,只需在其进程表中增加一个条目,并指向系统表中该文件的条目
- 通常系统表为每个文件关联一个计数器count,open使count+1,close使count-1。count=0时可以从系统打开表中删除该文件条目
- 文件名不必是文件打开表的一部分,一旦完成对FCB在磁盘上的定位,系统就不再使用文件名,而是采用文件标识符
- 对于访问文件表的索引,UNIX称之为文件描述符,而windows称之为文件句柄。
- 只要文件未关闭,所有文件操作就通过文件打开表来进行
- (2012 408) read系统调用不需要提供文件名(要先open调用,之后就不用文件名了,用文件标识符
打开文件关联信息:
- 文件指针:跟踪上次读写位置作为当前文件位置的指针,该指针对打开文件的某个进程是唯一的,因此必须与磁盘文件属性分开保存。
- 文件打开计数:计数器跟踪当前文件打开和关闭的数量。多个进程可能打开同一个文件,系统在删除打开文件条目之前必须等待最后一个进程关闭文件
- 文件磁盘位置:文件在磁盘上的位置,存储在内存中,减少系统修改文件开销
- 访问权限:每个进程打开文件都需要有访问模式(创建、只读、读写、添加等),一边操作系统允许或拒绝后续IO请求
- 打开文件的主要工作:把指定文件的目录复制到内存指定的区域
4.1.4 文件保护
分为:
- 口令保护
- 加密保护
- 访问控制
口令和加密是为了访问用户文件别他人存取或窃取;访问控制用于控制用户对文件的访问方式
- 对一个文件的访问,通常由:用户访问权限和文件属性共同限制
- 任何一个用户在进入系统时都需要进行注册,这一级安全管理属于:系统级
1. 访问类型
对文件的保护可以从限制对文件的访问类型出发,可以加以控制的访问类型:
- 读:从文件中读
- 写:向文件中写
- 执行:将文件装入内存执行
- 添加:将新信息添加到文件结尾位置
- 删除:删除文件,释放空间
- 列表清单:列出文件名和属性
此外可以对文件的重命名、复制、编辑等加以控制。这些高层功能可以通过系统程序调用低层系统调用实现,保护可以只在低层提供
例如复制文件可以通过一系列读请求完成,这样,具有读访问权限的用户也就具有复制和打印权限
2. 访问控制
- 根据用户身份进行控制
- 为每个文件和目录增加一个访问控制表(ACL),规定每个用户名以及允许的访问类型
精简的访问列表采用拥有者、组和其他用户三种类型(UNIX操作系统采用这种方法)
- 拥有者:创建文件的用户
- 组:一组需要共享文件且具有类似访问的用户
- 其他:系统内的所有其他用户
口令
- 用户在创建文件时提供一个口令,系统为其创建PCB时附上相应口令,同时告知允许共享该文件的所有用户
- 用户请求访问时必须提供相应口令
优点:时间和空间的开销不多,缺点:口令直接存在系统内部,不够安全。
密码
- 对文件进行加密,文件被访问时需要使用密钥
优点:保密性强,节省了存储空间。缺点:编码和译码需要花费一定的时间。
- 现代操作系统常采用方法是:将访问控制列表与用户、组和其他成员访问控制方案一起使用
- 对于多级目录结构,不仅需要保护单个文件,还需要保护子目录内的文件,即提供目录保护机制。目录操作和文件操作不同,因此需要不同的保护机制
- (17 408) 某个文件系统中,针对每个文件分为4类用户,访问权限分5种,使用二进制位串表示文件权限,至少需要:4*5=20位(注意二进制位串
4.1.5 文件的逻辑结构(用户看到的文件组织形式)
按照逻辑结构,文件可分为无结构文件和有结构文件两大类
- 文件逻辑结构是为了方便用户而设计的
1. 无结构文件(流式文件
- 将数据按照顺序组织成记录并积累、保存
- 是有序相关项的集合,以字节为单位
- 对记录的访问只能通过穷举搜索的方法
- 管理简单,适合源程序文件、目标代码文件等
2. 有结构文件(记录式文件
按照记录的组织形式可以分为
1. 顺序文件
- 文件中的记录按照顺序一个个排列,记录通常是定长的,可以顺序存储或链表存储
- 记录通常是定长的
- 分为串结构(记录之间的顺序与关键字无关,通常是按存入时间的先后排序,对串结构文件进行检索必须从头开始顺序依次查找,比较费时)和顺序结构(指文件中的所有记录按关键字顺序排列,可采用折半查找法,提高了检索效率)。
- 顺序文件适合需要对记录进行批量操作的场合。
- 顺序文件的效率是所有逻辑文件中最高的。
- 对于顺序存储设备(如磁带),也只有顺序文件才能被存储并能有效的工作。
- 顺序文件不适合经常需要查找、修改或删除单个记录的场合
2. 索引文件
为了提高变长记录文件的查找速度
- 建立一张索引表,为主文件的每个记录在索引表中分别设置一个表项
- 表项包含:指向变长记录的指针(⚠️逻辑起始地址)和记录长度
- 索引表按照关键字排序,其本身也是一个定长记录的顺序文件
3. 索引顺序文件
- 将顺序文件中的所有记录分为若干组,为顺序文件建立一张索引表
- 索引表中为每一组的第一条记录建立一个索引项,包含该记录的关键字值和指向该记录的指针
- 同一个组中的关键字可以无序,但组之间的关键字必须有序
- 先查找组关键字,再在组内顺序查找
- 索引顺序文件包含N个记录,分为N\sqrt{N}N组,每组N\sqrt{N}N条记录,最好情况下平均只需查找N\sqrt{N}N次
- 索引表表项中包含逻辑地址,不是物理地址
4. 直接文件/散列文件
- 给定记录的键值或通过散列函数转换的键值直接决定记录的物理位置
- 这种映射结构没有顺序的特性
- 存取速度快
- 会引起冲突,即不同关键字的散列函数值相同
4.1.6 文件的物理结构(文件数据在存储设备上如何分布组织)
1. 连续分配
- 每个文件在磁盘上占有一组连续的块。
- 磁盘地址定义了磁盘上的一个线性排序,这种排序使作业访问磁盘时需要的寻道数和寻道时间最小。
- 采用连续分配时,逻辑文件中的记录顺序也存储在相临接的块中。
- 实现简单,存储速度快。
- 文件长度不宜增加,可能需要大量移动文件,因为一个文件末尾的盘块可能已经分配给其他文件。
- 为了保持文件有序,增删记录时,需要对相邻的记录做物理上的移动,还会动态改变文件的长度。
- 反复增删会增加外部碎片(与内存管理分配方式中的碎片相似)。
- 难以确定文件所需空间大小,只适合长度固定的文件。
访问磁盘块需要移动磁头
(11 408)
2. 链接分配
离散分配,消除磁盘外部碎片,适合文件插入删除修改
1. 隐式链接
- 目录项包含文件第一块的指针和最后一块的指针
- 每个文件对应一个磁盘块的链表
- 除了最后一个盘块,每个盘块都含有指向文件下一个盘块的指针,这些指针对用户透明
- 只适合顺序访问,必须从链表头开始查找;可以几个盘块组合成簇,连接起来,但会增加内部碎片
- 隐式链接稳定性不好,一个指针丢失或损坏就会导致文件数据丢失
- 可以将几个盘块组成簇,按簇不按块来分配,可以成倍的减少查找时间。但会增加内部碎片(4个盘块一个簇,但只用了三个,有一个块没用,内部碎片)。应用于大多数操作系统。
2. 显式链接
- 将用于链接文件各个物理块的指针,从每个物理块的末尾提取出来,显示存放在内存的一张链接表里,称为文件分配表(FAT
- 文件的第一个盘块号记录在目录项“物理地址”字段中,后续的盘块可通过查FAT找到。
- FAT在整个磁盘中仅设置一张
- FAT表在系统启动时就会读入内存,因此查找记录过程在内存中进行,提高检索速度,减少磁盘访问次数
缺点: - FAT占据内存空间较大
- 打开某个文件时只需要相应盘块,没必要调入整个FAT
- 支持顺序访问,也支持随机访问。
- 逻辑块号转换成物理块号的过程不需要读磁盘操作,FAT常驻内存。
- FAT在开机的时候就会被读入内存,并且常驻内存。
- FAT32的文件目录项包括:文件名、文件访问权限、文件所在的物理位置;不包含:文件控制块的物理位置
4. 索引分配
索引分配将每个文件所有盘块号都集中存放在一起构成索引块(表)。
每个文件都有索引块,是一个磁盘块地址的数组
- 解决FAT的缺点
- 支持直接访问(随机访问),没有外部碎片
- 索引块的第i个条目指向文件的第i个块。要读第i个块,通过索引块的第i个条目的指针来查找和读入所需的块。
缺点:每个文件都必须有一个索引块,因此索引块应尽可能的小,但索引块太小无法支持大文件,可以通过以下机制解决
- 链接方案:将多个索引块连接起来
- 多层索引
- 混合索引(重点:既采用直接地址,又采用单级索引和多级索引
4. 混合索引分配
- 对于小文件:将每个盘块地址直接放入FCB,为直接寻址
- 对于中文件:采用单级索引,先从FCB得到该文件的盘块地址,即为一次间址
- 对于大型文件:采用多级索引。UNIX系统采用这种分配方式,设置13个地址项
- (20 408)某文件系统目录项由文件名和索引节点组成,每个目录项长度64字节,4字节存储索引节点号,60字节存储文件名,则该文件系统能创建的文件数量上限:2^32,文件名可以重复,考虑索引节点号即可
根据课后题总结的知识点:
- FCB的集合就是文件目录,其中的每个文件的FCB就是一个文件目录项。
- 打开文件是将该文件的FCB存入内存的活跃文件目录表,而不是将文件内容复制到主存。
- 文件目录包含FCB,(UNIX中文件目录包含文件名和i结点),FCB中才包含文件的一些基本信息,如:物理地址。
- 将文件的描述信息从目录项中分离,即应用了索引结点的方法,磁盘的盘块中可以存放更多的目录项,查找文件时可以大大减少其I/O信息量。
- 相对于加密保护机制,访问控制机制的安全性较差。因为访问控制的级别和保护力度较小,因此他的灵活性较高。
- 访问控制由操作系统实现,如不由操作系统实现,则系统本身的安全性就无法保证。加密机制若由系统实现,则加密的方法将无法扩展。
- 系统安全管理包括注册和登录。
- 文件结构包括逻辑结构和物理结构。逻辑结构是用户组织数据的结构形式,数据组织形式来自需求,而物理结构是操作系统组织物理存储块的结构形式。
- 逻辑文件的组织形式取决于用户,物理结构的选择取决于文件系统设计者对硬件结构(如磁带介质很难实现链接结构和索引结构)所采取的策略。
- 索引文件由逻辑文件和索引表组成,对索引文件进行存取时,必须先查找索引表。索引项只包含每条记录的长度和在逻辑文件中的起始位置。因为每条记录都要有一个索引项,因此提高了存储代价。
- 磁带是一种顺序存储结构,他存储文件只能采用顺序存储结构。
- 直接存取即随机存取,采用连续分配和索引分配的文件都适合于直接存取,只有采用链接分配的文件不具有随机存取的特性。
- 顺序文件占用连续的磁盘空间,容易导致存储碎片(外部碎片)的发生。
- 上面的题,不要忘了最后乘以一个盘块的大小,这里一个盘块的大小是1kb,所以256*256*1kb = 64MB
- 打开文件表存放仅存放已打开文件的信息,将指名文件的属性从外存复制到内存,再使用该文件时直接返回索引。
- 索引表中记录每个文件存放的盘块地址。
- 索引表的表项中含有相应记录的关键字和存放记录的逻辑地址。
- 三级索引需要访问4次磁盘,访问磁盘的数目比索引级别多1。
- 无论是顺序存取还是随机存取,顺序文件通常都是速度最快的。
- 一个文件被用户进程首次打开即被执行了open操作,会把文件的FCB调入内存,而不会把文件内容读到内存中,只有进程希望获取文件内容时才会把文件内容读入内存。
4.2 目录
4.2.1 目录的基本概念
- 文件目录:FCB的有序集合
- 一个FCB就是一个文件目录项
目录管理的基本要求
- 从用户角度来看,目录在用户(应用程序)所需要的文件名和文件之间提供一种映射,因此目录需要实现“按名存取”
- 目录存取的效率直接影响到系统性能,因此需要提高对目录的检索速度
- 多用户系统允许多个用户共享一个文件,因此目录需要提供用于控制访问文件的信息
- 允许不同用户对不同文件采用相同的名字
目录管理通过树形结构来解决和实现
4.2.2 目录结构
1. 单级目录结构
整个文件系统只建立一张目录表,每个文件占一个目录项
- 访问一个文件时,按照文件名查找FCB
- 建立新文件时,必须检索所有目录项,确保没有重名
- 删除一个文件时,按文件名找到目录项,回收空间,清除目录项
实现了按名存取,但是查找速度慢、文件不允许重名、不便于文件共享
2. 两级目录结构
将文件目录分为**主文件目录(MFD)和用户文件目录(UFD)**两级
- 主文件目录项记录用户名和相应用户文件目录所在的存储位置
- 用户文件目录项记录该用户文件的FCB信息
- 某用户欲对文件进行访问,先搜索该用户对应UFD,解决了不同用户文件重名的问题
提高检索速度,解决了多用户之间文件重名问题,可以在目录上实现访问限制,但是缺乏灵活性,不能对文件分类
3. 树形目录结构
- 用文件路径名标识文件,文件路径名是一个字符串,由从根目录出发到所找文件通路上所有目录名与数据文件名用’/'分割组成
- 绝对路径:从根目录出发的路径,例如 /dev/fd0
- 相对路径:从当前目录(工作目录)出发。例如当前正在/bin目录,则./ls表示/bin/ls
在树形目录中查找文件需要按照路径名逐级访问中间节点,增加了磁盘访问次数
UNIX、Linux、Windows系统都采用树形文件目录
4. 无环图目录结构
4.2.3 目录的操作
- 搜索:用户使用文件时需要搜索目录,找到文件的对应目录项
- 创建文件:创建一个新文件,需要在目录中增加一个目录项
- 删除文件:删除一个文件,需要在目录中删除对应的目录项
- 创建目录:树形目录结构中,用户可以创建自己的用户文件目录,并可再创建子目录
- 删除目录:删除空目录/非空目录
- 移动目录:文件或子目录再不同父目录中移动,此时文件路径名也会随之改变
- 显示目录:用户请求显示目录的内容
- 修改目录
4.2.4 目录的实现*
4.2.5 文件共享
多个用户共享同一个文件,系统中只需要保留该文件的一个副本
硬链接速度快于软链接
1. 基于索引节点的共享方式(硬链接)这里的索引节点就是上面那种减少存储空间的指针指向的索引结点。
- 文件的物理地址及其他文件属性等信息不再放在目录项中,而是放在索引节点中
- 文件目录中只设置文件名及指向相应索引节点的指针
- 索引节点中还有计数器count,表示共享用户目录项的数目。删除文件需要count==0
2. 利用符号链实现文件共享(软链接
只有主文件才有指向其索引结点的指针,而共享文件的其他用户只有该文件的路径名,并不拥有指向其索引结点的指针。这就解决了删除一个共享文件后留下一个悬空指针的情况。
- (09 408) 文件F1当前引用计数值为1,先建立F1的符号链接文件F2.在建立F1的
硬链接文件F3,然后删除F1,此时F2引用计数为:1,F3引用计数为:1- (17 408) 文件f1硬链接f2,两个进程分别打开f1和f2,那么f1和f2的读写指针位置不相同
根据课后题总结的知识点:
- 采用多级目录结构,提高了文件查找的速度,还允许用户建立同名文件。
- 在单极目录结构中,每建立一个文件就必须先检索所有的目录项,以保证新文件名在目录中式唯一的。
- 建立符号链接时,引用计数值直接复制;建立硬链接时,引用计数器值加1.
- 硬链接指通过索引结点进行链接,共享文件都指向同一个索引结点,
- 整个系统只有一个系统打开文件表,同一个文件打开多次只需要改变引用计数。
- 按照路径每访问一层目录,就访问一次磁盘。
- 树形目录不便于文件的共享。
4.3 文件系统
4.3.1 文件系统结构
文件系统提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据
- I/O控制
- 基本文件系统
- 文件组织模块
- 逻辑文件系统
4.3.2 文件系统布局
1. 文件系统在磁盘中的结构
文件系统存放在磁盘上。多数磁盘划分为一个或多个分区,每个分区中有一个独立的文件系统
2. 文件系统在内存中的结构
内存中的信息用于管理文件系统并通过缓存来提高新能。这些数据在安装文件系统时加载、在文件系统操作期间被更新,卸载时被丢弃,这些结构的类型可能包括:
- 内存中的安装表:包含每个已安装文件系统分区的有关信息
- 内存中的目录结构的缓存:包含最近访问目录的信息
- 整个系统的打开文件表:包含每个打开文件的FCB副本及其他信息
- 每个进程的打开文件表:包含一个只想整个系统的打开文件表中的适当条目的指针,以及其他信息
4.3.3 外存空闲空间管理
- 一个存储设备可以按整体用于文件系统,也可以细分,例如一个磁盘可以划分为4个分区,每个分区都有单独的文件系统
- 包含文件系统的分区通常称为卷(volume),卷可以是磁盘的一部分,也可以是整个磁盘,还可以是多个磁盘组成RAID集
3. 在一个卷中,存放文件数据的空间(文件区)和FCB的空间(目录区)是分开的
4. 文件存储设备划分为许多大小相同的物理块,以块为单位交换信息,因此文件存储设备的管理实质上是对空闲块的组织和管理,包括空闲块的组织、分配和回收等
1. 空闲表法
- 属于连续分配方式。为每个文件分配一块连续的存储空间
- 系统为外存上的所有空闲区建立一张空闲盘块表,每个空闲区对应一个空闲表项
- 空闲盘区的分配和内存动态分配类似,采用最佳适应算法和首次适应算法
- 回收存储空间时,需要考虑是否合并
2. 空闲链表法
将所有空闲盘区拉成一条空闲链表。根据构成链表的基本元素的不同,分为:
- 空闲盘块链
- 空闲盘区链
3. 位示图法
4. 成组链接法(UNIX系统采用
4.3.4 虚拟文件系统(VFS
文件系统的挂载:
4.3.5 分区和安装
文件系统的全局结构:
物理格式化:
物理格式化,即低级格式化----划分扇区,检测坏扇区。并用备用扇区替换坏扇区。
逻辑格式化:
逻辑格式化后,磁盘分区(分卷Volume),完各分区的文件系统初始化
注:逻辑格式化后,灰色部分就有实际的数据了,白色部分还没有数据。
文件系统在内存中的结构:
408真题
(12 408)
- 直接索引分配
- 寻址
(14 408)
-
磁盘连续分配、连接分配
-
FCB
(18 408) -
混合索引分配
-
簇