操作系统第四章 文件管理
计算机学科基础:操作系统第四章文件管理的学习笔记
一.文件系统基础(✪)
1.文件控制块(FCB)和索引结点
文件的概念:以硬盘为载体的存储在计算机上的信息集合
FCB(目录项)
定义:一个文件对应一个FCB,一个FCB就是一个目录项;文件系统在创建文件时,建立一个文件目录项;多个FCB组成文件目录
FCB的组成
- 文件的基本信息(文件名、物理地址、逻辑结构、物理结构等)
- FCB实现了文件名和文件之间的映射。使用户(用户程序)可以实现“按名存取“
- 存取控制信息(是否可读/可写、禁止访问的用户名单等)
- 使用信息(如文件的建立时间、修改时间等)
- 文件的基本信息(文件名、物理地址、逻辑结构、物理结构等)
索引结点(FCB的瘦身策略,iNode)
- 除了文件名之外的所有信息都放到索引结点中,每个文件对应一个索引结点,简称i结点
目录项中只包含文件名、索引结点指针,因此每个目录项的长度大幅减小 - 由于目录项长度减小,因此每个磁盘块可以存放更多个目录项,因此检索文件时磁盘I/O的次数就少了很多
- 当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。
- 存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存/活动索引结点”
相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件 - 文件的打开过程描述
- ①检索目录,要求打开的文件应该是已经创建的文件,它应登记在文件目录中,否则会出错。
在检索到指定文件后,就将其磁盘Node复制到活动iNode表中。 - ②把参数mode所给出的打开方式与活动iNode中在创建文件时所记录的文件访问权限相比较,如果合法,则此次打开操作成功。
- ③当打开合法时,为文件分配用户打开文件表表项和系统打开文件表表项,并为后者设置初值,
通过指针建立表项与活动Node之间的联系,再把文件描述符fd返回给调用者。
- ①检索目录,要求打开的文件应该是已经创建的文件,它应登记在文件目录中,否则会出错。
- 图片
- 除了文件名之外的所有信息都放到索引结点中,每个文件对应一个索引结点,简称i结点
2.目录的结构(一种特殊的文件)
- 单级目录结构:一个系统只有一张目录表,不允许文件重名
- 两级目录结构
- 分为主文件目录和用户文件目录
- 主文件目录记录用户名及相应用户文件目录的存放位置
- 用户文件目录由该用户的文件FCB组成
- 不同用户的文件可以重名,但不能对文件进行分类
- 分为主文件目录和用户文件目录
- 树形目录结构
- 不同目录下的文件可以重名,可以对文件进行分类,不方便文件共享
- 系统根据”文件路径”找到目标文件
- 从根目录出发的路径是“绝对路径”,
从”当前目录出发的路径是相对路径”,可以减少磁盘I/O次数
- 无环图目录结构
- 在树形目录结构的基础上,增加一些指向同一节点的有向边,使整个目录成为一个有向无环图
可以更方便地实现多个用户间的文件共享。 - 为共享结点设置一个共享计数器,计数器为0时才真正删除该结点
- 共享文件不同于复制文件。在共享文件中,由于各用户指向的是同一个文件,因此只要其中一个用户修改了文件数据,那么所有用户都可以看到文件数据的变化。
- 图片
- 在树形目录结构的基础上,增加一些指向同一节点的有向边,使整个目录成为一个有向无环图
3.文件的逻辑结构
- 逻辑结构:在用户看来文件内部的数据应该是如何组织起来的。
- 无结构文件(流式文件)
- 文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如:Windows操作系统中的txt文件
- 有结构文件(记录式文件)
- 定义
- 由一组相似的记录组成,又称“记录式文件”。每条记录又若干个数据项组成。如:数据库表文件。
- 一般来说,每条记录有一个数据项可作为关键字。
- 根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录和可变长记录两种。
- 分类(逻辑上如何组织)
- 顺序文件
- 定义:文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。
- 两种结构
- 串结构:记录之间的顺序与关键字无关
- 顺序结构:记录之间的顺序按关键字顺序排列
- 可变长记录的顺序文件无法实现随机存取,定长记录的顺序存储方式可以
- 定长记录、顺序结构的顺序文件可以快速检索(根据关键字快速找到记录)
- 最大缺点:不方便增加/删除记录
- 索引文件
- 建立一张索引表,每个记录对应一个表项。各记录不用保持顺序,方便增加/删除记录
- 索引表本身就是定长记录的顺序文件,一个索引表项就是一条定长记录,因此索引文件可支持随机存取
- 若索引表按关键字顺序排列,则可支持快速检索
- 解决了顺序文件不方便增/删记录的问题,同时让不定长记录的文件实现了随机存取。但索引表可能占用很多空间
- 索引顺序文件
- 将记录分组,每组对应一个索引表项
- 检索记录时先顺序查索引表,找到分组,再顺序查找分组
- 当记录过多时,可建立多级索引表
- 当只有一级索引号时,对于n个记录最好的分组记录为:$分为\sqrt{n}组,每组\sqrt{n}个记录$,此时平均查询次数为$\sqrt{n}/2*2$
- 若要为N个记录的文件建立K级索引,则最优的分组是每组$N^{\frac{1}{K+1}}$个记录(一般)采用一级索引即可k=1
- 检索一个记录的平均查找次数是$N^{\frac{1}{K+1}}/2*(K+1)$
- 图片
- 顺序文件
- 定义
- 例题
- 本题可以看做是只有一张索引表,此时的查找记录最少时为$\sqrt{10000}/2*2=100$,此时为D
- 本题可以看做是只有一张索引表,此时的查找记录最少时为$\sqrt{10000}/2*2=100$,此时为D
4.文件的物理结构(♚)
磁盘块
- 在内存管理中,进程的逻辑地址空间被分为一个一个页面,在外存管理中,文件的逻辑地址空间也被分为了一个一个的文件“块”
很多操作系统中,磁盘块的大小与内存块、页面的大小相同 - 内存与磁盘之间的数据交换(即读/写操作、磁盘I/O)都是以块”为单位进行的。即每次读入一块,或每次写出一块
- 文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式。
- 操作系统为文件分配存储空间都是以块为单位的,用户通过逻辑地址来操作自己的文件,操作系统要负责实现从逻辑地址到物理地址的映射
- 在内存管理中,进程的逻辑地址空间被分为一个一个页面,在外存管理中,文件的逻辑地址空间也被分为了一个一个的文件“块”
文件的分配方式(对非空闲磁盘块的管理,实现逻辑地址到物理地址的映射)
- 连续分配
- 连续分配方式要求每个文件在磁盘上占有一组连续的块。
- 文件目录中记录存放的起始块号和长度(总共占用几个块)
- 给出要访问的逻辑块号,操作系统找到该文件对应的目录项(FCB),物理块号=起始块号+逻辑块号
- 只需转换块号就行,块内地址保持不变,此时可实现到物理块号的映射
- 连续分配支持顺序访问和直接访问(即随机访问)
- 读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需时间就越长。
- 连续分配的文件在顺序读/写时速度最快
- 缺点:不方便文件拓展:存储空间利用率低,会产生磁盘碎片
可以用紧凑来处理碎片,但是需要耗费很大的时间代价。
- 链接分配(离散分配)
- 隐式链接
- 除了文件的最后一个磁盘块之外,每个磁盘块中都会保存指向下一个盘块的指针,这些指针对用户是透明的
- 目录中记录了文件存放的起始块号和结束块号。也可以增加一个字段来表示文件的长度
- 操作系统找到该文件对应的目录项(FCB),从目录项中找到起始块号(即0号块),将0号逻辑块读入内存,
由此知道1号逻辑块存放的物理块号,以此类推,读入i号逻辑块总共需要$i+1$次磁盘I/O
- 操作系统找到该文件对应的目录项(FCB),从目录项中找到起始块号(即0号块),将0号逻辑块读入内存,
- 优点:很方便文件拓展,不会有碎片问题,外存利用率高。
- 若此时要拓展文件,则可以随便找一个空闲磁盘块,挂到文件的磁盘块链尾,并修改文件的FCB
- 缺点:只支持顺序访问,不支持随机访问,查找效率低,指向下一个盘块的指针也需要耗费少量的存储空间。
- 图片
- 显式链接
- 目录中只需记录文件的起始块号,把用于链接文件各物理块的指针显式地存放在一张表中,即文件分配表(FAT)
- FAT的各个表项在物理上连续存储,且每一个表项长度相同,因此“物理块号”字段可以是隐含的
- 逻辑块号转换成物理块号的过程不需要读磁盘操作
- 用户给出要访问的逻辑块号ⅰ,操作系统找到该文件对应的目录项 (FCB),从目录项中找到起始块号,
之后查询内存中的文件分配表FAT,往后找到ⅰ号逻辑块对应的物理块号。
- 用户给出要访问的逻辑块号ⅰ,操作系统找到该文件对应的目录项 (FCB),从目录项中找到起始块号,
- 一个磁盘仅设置一张FAT,开机时,将FAT读入内存,并常驻内存。
- FAT不仅记录了文件中各个块的先后链接顺序,同时还标记了空闲的磁盘块,操作系统可以通过FAT对文件空闲存储空间实现管理
- 优点
- 采用链式分配(显式链接)方式的文件,支持顺序访问,也支持随机访问
- 由于块号转换的过程不需要访问磁盘,因此相比于隐式链接来说,访问速度快很多。
- 显式链接也不会产生外部碎片,也可以很方便地对文件进行拓展,外存利用率高
- 缺点:文件分配表的需要占用一定的存储空间
- 图片
- 目录中只需记录文件的起始块号,把用于链接文件各物理块的指针显式地存放在一张表中,即文件分配表(FAT)
- 隐式链接
- 索引分配(离散分配)
- 索引表
- 系统会为每个文件建立一张索引表,一张索引表的每个索引表项记录了文件的各个逻辑块对应的物理块,索引表中的“逻辑块号”可以是隐含的。
- 索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块;目录需要记录文件名和其对应的索引块
- 索引表的功能类似于内存管理中的页表:建立逻辑页面到物理页之间的映射关系
- 用户给出要访问的逻辑块号ⅰ,操作系统找到该文件对应的目录项(FCB),从目录项中可知索引表存放位置,将索引表从外存读入内存,并查找索引表即可知道ⅰ号逻辑块在外存中的存放位置
- 优点:索引分配方式可以支持随机访问,文件拓展也很容易实现,需要给文件分配一个空闲块,并增加一个索引表项
- 缺点:但是索引表需要占用一定的存储空间
- 图片
- 解决由于文件太大导致,一个磁盘块装不下此文件索引表的问题
- 链接方案:如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放,需要很多的I/O操作,太低效
- 多层索引
- 原理类似于多级页表,使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。
- 若采用多层索引,则各层索引表大小不能超过一个磁盘块
- 采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作
- 文件的最大长度:$最多存放索引项个数^{k}*磁盘块大小$
- 图片
- 缺点:即使是小文件,访问一个数据块依然需要K+1次读磁盘。
- 混合索引
- 多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)
- 对于小文件,只需较少的读磁盘次数就可以访问目标数据块(一般计算机中小文件更多)
- 图片
- 索引表
三种外存分配方式的区别
- 连续分配:需访问磁盘1次
- 链接分配:需访问磁盘n次
- 索引分配:m级需访问磁盘m+1次
例题
- 例1:此时最大长度直接套公式计算:1KB/4=$2^8$个项,此时最大长度为${2^{82}}$1KB=64MB
- 例2:若此题的磁盘块没有读入内存,还需要分别加1(读入索引结点),此时选D
- 例1:此时最大长度直接套公式计算:1KB/4=$2^8$个项,此时最大长度为${2^{82}}$1KB=64MB
5.文件的操作
文件描述符(即索引号)
- 打开文件时,将目录项中的信息复制到内存中的打开文件表中,并将打开文件表的索引号返回给用户进程
“索引号”也称“文件描述符” - 打开文件时并不会把文件数据直接读入内存,读数据时才需要读入内存,写数据时需要写出外存。
- 读/写文件时用“文件描述符”即可指明文件,不再需要用到文件名
- 打开文件时,将目录项中的信息复制到内存中的打开文件表中,并将打开文件表的索引号返回给用户进程
创建文件(create系统调用)
- 分配外存空间
- 利用空闲链表法、位示图、成组链接法等管理策略,在外存中找到空闲空间
- 在目录中创建目录项
- 目录项中包含了文件名、文件在外存中的存放位置等信息。
- 分配外存空间
- 删除文件(delete系统调用)
- 回收外存空间
- 回收磁盘块时,根据空闲表法、空闲链表法、位图法等管理策略的不同,需要做不同的处理
- 从目录表中删除文件对应的目录项
- 回收外存空间
- 打开文件(open系统调用)
- 过程
- 从目录中找到文件名对应的的目录项,并检查该用户是否有指定的操作权限。
- 将目录项中的信息复制到内存中的打开文件表中,并将打开文件表的索引号返回给用户
- 打开文件时并不会把文件数据直接读入内存。“索引号”也称“文件描述符”
- 打开文件之后,对文件的操作不再需要每次都查询目录,可以根据内存中的打开文件表进行操作
- 每个进程有自己的打开文件表,系统中也有一张总的打开文件表
- 进程打开文件表中特有的属性:读写指针、访问权限(只读?读写?)
- 系统打开文件表中特有的属性:打开计数器(有多少个进程打开了该文件)
- 图片
- 关于打开文件表(注意用户打开文件表的读写指针和访问权限以及系统打开文件表的打开计数器)
- 过程
- 关闭文件(close系统调用)
- 将用户进程的打开文件表相应表项删除
- 回收分配给该文件的内存空间等资源
- 系统打开文件表的打开计数器count减1,若count=0,则删除对应表项。
- 读文件(read系统调用)
- 根据读指针、读入数据量、内存位置等信息将文件数据从外存读入内存
- 将文件数据读入内存,才能让CPU处理,双击后,应用程序通过read系统调用,将文件数据从外存读入内存,并显示在屏幕上(必须要打开文件之后)
- 读/写文件“文件描述符”即可指明文件不再需要用到“文件名
- 写文件(write系统调用)
- 根据写指针、写出数据量、内存位置将文件数据从内存写出外存
- 点击“保存”后,应用程序通过write系统调用,将文件数据从内存写回外存
6.文件的保护
口令保护
- 为文件设置一个“口令”,用户想要访问文件时需要提供口令,由系统验证口令是否正确
- 实现开销小,但“口令”一般存放在FCB或索引结点中(也就是存放在系统中)因此不太安全
加密保护
- 用一个“密码”对文件加密,用户想要访问文件时,需要提供相同的“密码”才能正确的解密
- 安全性高,但加密/解密需要耗费一定的时间 (如异或加密)
- 访问控制
- 在每个文件的FCB(或索引结点)中增加一个访问控制表(ACL),记录各个用户(或各组用户)对文件的访问权限
对文件的访问类型可以分为:读/写/执行/删除等 - 精简的访问列表:以“组”为单位,标记各“组”用户可以对文件执行哪些操作,系统需要管理分组的信息
- 如:分为系统管理员、文件主、文件主的伙伴、其他用户几个分组。
- 当某用户想要访问文件时,系统会检查该用户所属的分组是否有相应的访问权限。
- 若想要让某个用户能够读取文件,只需要把该用户放入文件主的伙伴这个分组即可
- 实现灵活,可以实现复杂的文件保护功能
- 在每个文件的FCB(或索引结点)中增加一个访问控制表(ACL),记录各个用户(或各组用户)对文件的访问权限
7.文件共享
文件共享与文件复制的区别
- 操作系统为用户提供文件共享功能,可以让多个用户共享地使用同一个文件
- 多个用户共享同一个文件,意味着系统中只有“一份”文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。
- 如果是多个用户都“复制”了同一个文件,那么系统中会有“好几份”文件数据。其中一个用户修改了自己的那份文件数据,对其他用户的文件数据并没有影响。
基于索引结点的共享方式(硬链接)
- 各个用户的目录项指向同一个索引结点,索引结点中需要有链接计数count,用于表示链接到本索引结点上的用户目录项数
若cout=2,说明此时有两个用户目录项链接到该索引结点上,或者说是有两个用户在共享此文件 - 若某个用户决定“删除”该文件,则只是要把用户目录中与该文件对应的目录项删除,且索引结点的count值减1.
- 若cout>0,说明还有别的用户要使用该文件,暂时不能把文件数据删除,否则会导致指针悬空。
- 当count=0时系统负责删除文件。
- 图片
- 各个用户的目录项指向同一个索引结点,索引结点中需要有链接计数count,用于表示链接到本索引结点上的用户目录项数
- 基于符号链的共享方式(软链接)
- 在一个Link型的文件中记录共享文件的存放路径(Windows快捷方式)
- 操作系统根据路径一层层查找目录,最终找到共享文件即使软链接指向的共享文件已被删除,Link型文件依然存在,
只是通过Link型文件中的路径去查找共享文件会失败(找不到对应目录项) - 由于用软链接的方式访问共享文件时要查询多级目录,会有多次磁盘I/O,因此用软链接访问共享文件的速度要比硬链接更慢
- 例题
- 例1:此时新创建硬链接的文件的索引节点指向F1的索引结点,删除F1后其技术值变为1,软链接的计数值不变,即选B
- 例1:此时新创建硬链接的文件的索引节点指向F1的索引结点,删除F1后其技术值变为1,软链接的计数值不变,即选B
- 连续分配
二.文件系统(✪)
1.文件系统布局
- 文件系统的概述
- 操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统
- 文件系统由三部分组成:与文件管理有关的软件、被管理文件及实施文件管理所需的数据结构。
- 文件系统的功能
- 对于用户而言,文件系统最主要的功能是实现对文件的基本操作,
让用户可以按名存储和查找文件,组织成合适的结构,并应当具有基本的文件共享和文件保护功能。 - 从系统角度看,文件系统负责对文件的存储空间进行组织、分配;负责文件的存储并对存入文件进行保护、检索。
- 对于用户而言,文件系统最主要的功能是实现对文件的基本操作,
- 文件系统在磁盘中的结构
- 磁盘的物理格式化:即低级格式化,划分扇区,检测坏扇区,并用备用扇区替换坏扇区
- 磁盘的逻辑格式化:磁盘分区(分卷Volume)后,对各分区进行逻辑格式化,完成文件系统初始化
- 文件系统在磁盘中的组成
- 主引导记录(MBR)
- 位于磁盘的0号扇区,用来引导计算机,MBR后面是分区表,该表给出每个分区的起始和结束地址。
- 表中的一个分区被标记为活动分区,当计算机启动时,BIOS读入并执行MBR,MBR做的第一件事是确定活动分区,读
入它的第一块,即引导块。
- 引导块
- MBR执行引导块中的程序后,该程序负责启动该分区中的操作系统。为统一起见,每个分区都从一个引导块开始。Windows系统称之为分区引导扇区。
- 超级块
- 包含文件系统的所有关键信息,在计算机启动时,或者在该文件系统首次使用时,超级块会被读入内存。
- 超级块中的典型信息包括分区的块的数量、块的大小、空闲块的数量和指针、空闲的FCB数量和FCB指针等。
- 其它组成
- 文件系统中空闲块的信息,可以使用位示图或指针链接的形式给出。
- 后面也许跟的是一组i结点,每个文件对应一个结点,ⅰ结点说明了文件的方方面面。
- 接着可能是根目录,它存放文件系统目录树的根部。最后,磁盘的其他部分存放了其他所有的目录和文件。
- 主引导记录(MBR)
- 图片
- 文件系统在内存中的结构
- 近期访问过的目录文件会缓存在内存中,不用每次都从磁盘读入,这样可以加快目录检索速度
- 图片
- 文件系统的层次结构(了解)
2.外存空闲空间管理(♚)
存储空间的划分与初始化
- 包含文件系统的物理磁盘分区被称为卷(逻辑卷、逻辑盘)C盘、D盘……
- 存储空间的初始化:将各个文件卷划分为目录区、文件区
- 目录区主要存放文件目录信息(FCB)、用于磁盘存储空间管理的信息
- 文件区用于存放文件数据
- 有的系统支持超大型文件,可支持由多个物理磁盘组成一个文件卷
存储空间管理(对空闲块的组织、分配与回收)
空闲表法(连续分配方式)
- 与内存的动态分配相似,为每个文件分配一块连续的存储空间。系统为外存上的所有空闲区建立一张空闲表
每个空闲区对应一个空闲表项,包括表项序号,空闲区的第一个盘块号,空闲盘块数,再以起始盘块号递增的次序排列 - 分配磁盘块:与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间,同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。
- 回收磁盘块:与内存管理中的动态分区分配很类似,回收时需要注意表项的合并问题。
- 图片
- 与内存的动态分配相似,为每个文件分配一块连续的存储空间。系统为外存上的所有空闲区建立一张空闲表
空闲链表法
- 空闲盘块链(适用于离散分配)
- 以盘块为单位组成一条空闲链,空闲盘块中存储着下一个空闲盘块的指针
操作系统保存着链头、链尾指针。 - 分配磁盘块:若某文件申请K个盘块,则从链头开始依次摘下K个盘块分配,并修改空闲链的链头指针。
- 回收磁盘块:回收的盘块依次挂到链尾,并修改空闲链的链尾指针。
- 为文件分配多个盘块时可能要重复多次操作
- 图片
- 以盘块为单位组成一条空闲链,空闲盘块中存储着下一个空闲盘块的指针
- 空闲盘区链(离散分配、连续分配都适用)
- 以盘区为单位组成一条空闲链;连续的空闲盘块组成一个空闲盘区;空闲盘区中的第一个盘块内记录了盘区的长度、下一个盘区的指针;操作系统保存着链头、链尾指针。
- 分配磁盘块
- 若某文件申请K个盘块,则可以采用首次适应、最佳适应等算法,从链头开始检索按照算法规则找到一个大小符合要求的空闲盘区,分配给文件
- 若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针、盘区大小等数据
- 回收磁盘块
- 若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。
- 若回收区没有和任何空闲区相邻,将回收区作为单独的一个空闲盘区挂到链尾。
- 为个文件分配多个盘块时效率更高
- 图片
- 空闲盘块链(适用于离散分配)
位示图法(离散分配、连续分配都适用)
位示图
每个二进制位对应一个盘块。“0”代表盘块空闲,“1”代表盘块已分配。
位示图一般用连续的“字”来表示,字的字长是16位,字中的每一位对应一个盘块。
因此可以用(字号,位号)对应一个盘块号。计算方法
位示图法中行和列都从1开始编号
- (字号,位号)=(i,j) 的二进制位对应的盘块号:$b=n(i-1)+j$
- b号盘块对应的字号:$i=(b-1)/n +1$,位号:$j=(b-1)\%n+1$
位示图法中行和列都从0开始编号
(字号,位号)=(i,j) 的二进制位对应的盘块号:$b=ni+j$
b号盘块对应的字号:$i=b/n$,位号:$j=b\%n$
图片
磁盘的分配
- 若文件需要K个块,①顺序扫描位示图,找到K个相邻或不相邻的“0”
- ②根据字号、位号算出对应的盘块号,将相应盘块分配给文件,并将相应位设置为“1”
磁盘的回收
- ①根据回收的盘块号计算出对应的字号、位号;②将相应二进制位设为“0”
成组链接法(了解)
- 空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。
UNIX系统中采用了成组链接法对磁盘空闲块进行管理。 - 文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时需要将超级块读入内存。
并且要保证内存与外存的“超级块”数据一致,适合大型文件系统
- 空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。
例题
- 盘块号${=}$起始块号${+\lfloor}$盘块号${/(1024 \times 8)\rfloor=32+\lfloor 409612 /(1024 \times 8)\rfloor=32+50=82}$, 这里问的是块内字节号而不是位号, 因此还需除以${8(1 \mathrm{B}=8}$位${)}$, 块内字节号${=\lfloor(}$盘块号${\%(1024 \times 8)) / 8\rfloor=1}$。
- 盘块号${=}$起始块号${+\lfloor}$盘块号${/(1024 \times 8)\rfloor=32+\lfloor 409612 /(1024 \times 8)\rfloor=32+50=82}$, 这里问的是块内字节号而不是位号, 因此还需除以${8(1 \mathrm{B}=8}$位${)}$, 块内字节号${=\lfloor(}$盘块号${\%(1024 \times 8)) / 8\rfloor=1}$。
3.虚拟文件系统(VFS)与文件系统挂载
- 虚拟文件系统
- 虚拟文件系统的特点
- 向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
- VFS要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write
一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求 - 每打开一个文件,VFS就在主存中新建一个vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统
vnode只存在于主存中,而inode既会被调入主存,也会在外存中存储 - 打开文件后,即创建vnode,并将文件信息复制到vnode中,vnode的功能指针指向具体文件系统的函数功能
- 图片
- 虚拟文件系统的特点
- 文件系统挂载(文件系统装载)
- 挂载的过程
- 在VFS中注册新挂载的文件系统。内存中的挂载表(mount table)包含每个文件系统的相关信息,包括文件系统类型、容量大小等
- 新挂载的文件系统,要向VFS提供一个函数地址列表
- 将新文件系统加到挂载点(mount point),也就是将新文件系统挂载在某个父目录下
- 图片
- 挂载的过程