4.2 目录4.2.1 目录的基本概念FCB的有序集合称为文件目录一个FCB就是一个文件目录项4.2.2 目录的操作搜索。创建文件。当创建一个新文件时需要在目录中增加一个目录项删除文件。当删除一个文件时需要在目录中删除相应的目录项创建目录。在树形目录结构中用户可创建自己的用户文件目录并可再创建子目录删除目录。由两种方式不删除非空目录删除时要先删除目录中的所有文件并递归地删除子目录可删除非空目录目录中的文件和子目录同时被删除移动目录。显示目录修改目录4.2.3 目录结构单级目录结构整个文件系统中只建立一张目录表每个文件占一个目录项当建立新文件时先检查没有“重名”然后在该目录中增设一项将新文件的属性信息填入该项。当访问一个文件时先按文件名在该目录中找到相应的FCB经合法性检查后执行相应的操作当删除一个文件时先从该目录中找到该文件的目录项回收该文件所占的存储空间然后清除该目录项单级目录的查找速度慢文件不允许重名不便于共享的缺点对于多用户的操作系统是不使用的两级目录结构为了克服单级目录的缺点可采用两级目录将文件分成主文件目录MFD和用户文件目录UFD主文件目录记录用户名及相应用户文件目录所在的存储位置。用户文件目录记录该用户所有文件的FCB。当某用户想对其文件进行访问时只需搜索该用户对应的UFD既解决了不同用户文件不能重名的问题又在一定程度上保证了文件的安全两级目录结构提高了检索速度解决了多用户的文件重名问题但缺乏灵活性不能对文件分类树形目录结构将两级目录结构加以推广就形成了树形目录结构可以明显提高对目录的检索速度和文件系统的性能当用户要访问某个文件时用文件的路径名标识文件文件路径名是个字符串从根目录出发的路径称为绝对路径从当前目录出发的路径称为相对路径相对路径经过的路径少需要调入的目录少减少了磁盘I/O次数树形结构不便于实现用户间的文件共享查找一个文件需要按路径名逐级访问中间节点增加了磁盘访问次数影响查询速度无环图目录结构在树形目录的基础上增加了指向同一节点的有向边使目录成为一个有向无环图方便多个用户间的文件共享可以用不同的文件名指向同一文件甚至指向同一目录为每个共享节点设置一个共享计数器用于记录此时有多少个用户在共享该节点。当用户提出删除文件请求时只删除该用户的FCB并使计数器减1当共享计数器减为0使才删除文件节点共享文件不同于复制文件各用户指向的是同一文件只要其中一个用户修改了文件数据所有用户都可以看到文件的变化*4.2.4 目录实现4.2.5 文件共享1.基于索引节点的共享方式硬链接硬链接是基于索引节点的共享方式它将文件的物理地址和属性等信息不再放在目录项中而放在索引节点中在目录中只设置指向相应索引节点的指针在索引节点中还有一个链接计数count也称引用计数表示链接到本索引节点上的用户目录项的数量当用户删除共享文件时只将该文件的count减1然后删除自己目录中对应的目录项。当count0时才删除该文件2.利用符号链实现文件共享软链接当用户B想要访问用户A的文件F时由系统创建一个LINK类型的新文件LL中只含有被链接文件F的路径名类似快捷方式当用户访问文件L时操作系统看到要读的文件属于LINK类型则根据其中记录的路径名区查询对应文件F然后对F进行读写操作从而实现共享在软链接中只有文件主才拥有指向其索引节点的指针而共享该文件的其他用户只有该文件的路径名并不拥有指向其索引节点的指针当文件主删除共享文件后若其他用户又试图通过符号链区访问它则会访问失败于是再将符号链删除不会产生什么影响当其他用户读共享文件时系统会根据路径名依次查找目录会导致多次读磁盘故硬链接的查找速度更快符号链也是一个文件其索引节点要占用一定的磁盘空间4.3 文件系统4.3.1 文件系统结构1.I/O控制层包括设备驱动程序和中断处理程序在内存和磁盘系统之间传输信息设备驱动程序将输入的命令翻译成底层硬件的特定指令硬件控制器利用这些指令使I/O设备与系统交互。设备驱动程序告诉I/O控制器的什么位置采取什么动作2.基本文件系统向对应的设备驱动程序发送通用命令以读取/写入磁盘物理块。每个物理块由磁盘地址标识。该层也管理内存缓冲区并保存各种文件系统、目录和数据块的缓存。在进行磁盘块传输前分配合适的缓冲区并对缓冲区进行管理3.文件组织模块组织文件及其逻辑块和物理块将文件的逻辑地址转换为物理地址文件组织模块还包括空闲空间管理器以跟踪未分配的块根据需求提供给文件组织模块4.逻辑文件系统用于管理文件系统中的元数据信息元数据包括文件系统的所有结构而不包括实际数据或文件内容逻辑文件系统管理目录结构以便根据给定的文件名为文件组织模块提供所需要的信息。它通过文件控制块来维护文件结构逻辑文件系统还复制文件保护4.3.2 文件系统布局1.文件系统在磁盘中的结构文件系统存放在磁盘上多数磁盘划分为一个或多个分区每个分区中有一个独立的文件系统。主引导记录MBR位于磁盘的0号扇区用来引导计算机MBR的后面是分区表该表给出每个分区的起始和结束地址。表中的一个分区被标记为活动分区当计算机启动时BIOS读入并执行MBR。MBR做的第一件事是确定活动分区读入它的第一块即引导块引导块MBR执行引导块中的程序后该程序复制启动该分区中的操作系统。每个分区都是统一从一个引导块开始即使它不含有一个可启动的操作系统也不排除以后会在该分区安装一个操作系统。Windows称之为分区引导扇区超级块包含文件系统的所有关键信息在计算机启动时或者在该文件系统首次使用时超级块会被读入内存。超级块中典型信息包括分区块的数量、块的大小、空闲块的数量和指针、空闲的FCB数量和FCB指针等文件系统中空闲块的信息可以用位示图或指针链接的形式给出。后面也许跟的是一组i节点索引节点每个文件对应一个节点2.文件系统在内存中的结构4.3.3 文件存储空间管理存储空间的划分与初始化将物理磁盘划分为一个个文件卷逻辑卷、逻辑盘如C盘D盘文件卷划分为一个个的目录区存放文件目录信息存放用于磁盘存储空间管理的信息、文件区存放文件数据文件卷可由多个物理磁盘组成存储空间管理方法一、空闲表法为每个文件分配一块连续的存储空间。系统为外存上的所有空闲区建立一张空闲表每个空闲区对应一个空闲表项其中包括表项序号、该空闲区的第一个空闲盘块号、该空闲区的空闲盘块数等信息分配磁盘块与动态分区分配类似需分配连续的存储空间可采用首次适应、最佳适应、最坏适应算法回收磁盘块与动态分区分配类似也需要合并空闲区。共四种情况回收区的前后没有相邻空闲区回收区前后都是空闲区回收区前面是空闲区回收区后面是空闲区。二、空闲链表法1.空闲盘块链以盘块为单位组成一条空闲链分配磁盘块若某文件申请k个盘块则从连头开始依次摘下k个盘块分配并修改空闲链的连头指针回收磁盘块将回收的盘块依次挂到链尾并修改空闲链的链尾指针适用于离散分配的物理结构。为文件分配多个盘块时可能需要多次重复操作2.空闲盘区链以盘区为单位组成一条空闲链在空闲盘曲的第一个盘块中记录了盘区的长度、下一个盘区的指针分配磁盘块从链头开始检索按照特定算法找到一个符合要求的空闲盘区分配给文件。若没有合适的连续空闲块也可以将不同盘区的盘块同时分配给一个文件。分配后修改相应的链指针、盘区大小等数据回收磁盘块若回收区和某个空闲盘区相邻则需要将回收区合并到空闲盘区中。若回收区没有和任何空闲区相邻将回收区作为单独的一个空闲盘区挂到链尾三、位示图法每个二进制位对应一个盘块用0/1表示盘块是否空闲。位示图一般用连续的“字”来表示一个字为16位。可以用字号位号对应一个盘块。需要注意字号、位号是从0开始还是从1开始需要能推出盘块号与字号位号相互转换的公式字号位号ij对应的盘块号 b16ijb号盘块对应的字号 ib/n位号 jb%n分配磁盘块顺序扫描位示图找到k个相邻或不相邻的“0”根据字号、位号算出对应的盘块号将相应盘块分配给文件将相应位设为1回收磁盘块根据回收的盘块号计算出字号、位号将相应二进制位设为“0”适用于连续分配找连续k个块和离散分配累计找k个块四、成组链接法空闲表法、空闲链表法不使用于大型文件会导致空闲表、空闲链表过大成组链接法将空闲盘块分成若干组每组的第一个盘块记录下一组的空闲盘块总数和空闲盘块号。由各组的第一个盘块可以连接成一条链。第一组的空闲盘块总数和空闲盘块号保存在内存的专用栈中称为空闲盘块号栈。最后一组盘块中存放的第一个盘块号是“0”作为结束标志分配磁盘块根据空闲盘块号栈的指针将对应的盘块分配给用户同时移动指针并将空闲盘块数减1。若需要将栈底指针指向的盘块分配出去则需先将其中存储的下一组空闲盘块号信息入栈作为新的空闲盘块号栈的内容再将该盘块分配出去回收磁盘块将回收的盘块号存入空闲盘块号栈的顶部图中下边是栈顶同时移动指针将栈中的空闲盘块数加1。当栈已满时将现有栈中的空闲盘块号存入新回收的盘块并将该盘块号作为新栈底再将栈中的空闲盘 块数置14.3.4 虚拟文件系统不同文件系统在使用使可能需要不同的函数调用为简化操作提出虚拟文件系统虚拟文件系统VFS的特点向上层用户进程提供统一标准的系统调用接口屏蔽底层具体文件系统的实现差异VFS要求下层的文件系统必须实现某些规定的函数功能如open、read、write。一个新的文件系统想要在某操作系统上被使用旧必须满足该操作系统VFS的要求每打开一个新文件VFS就在主存中新建一个vnode用统一的数据结构标识文件无论该文件存储在哪个文件系统vnode只存在于主存中inode既会被调入主存也会在外存中存储4.3.5 文件系统挂载文件系统挂载即文件系统安装/装载文件系统挂载需要做的事在VFS中注册新挂载的文件系统。内存中的挂载表包含每个文件系统的相关信息包括文件系统类型、容量大小等新挂载的文件系统要向VFS提供一个函数地址列表将新文件系统加到挂载点也就是将新文件系统挂载到某个父目录下
【操作系统】第四章 文件管理(二)
发布时间:2026/6/6 5:00:00
4.2 目录4.2.1 目录的基本概念FCB的有序集合称为文件目录一个FCB就是一个文件目录项4.2.2 目录的操作搜索。创建文件。当创建一个新文件时需要在目录中增加一个目录项删除文件。当删除一个文件时需要在目录中删除相应的目录项创建目录。在树形目录结构中用户可创建自己的用户文件目录并可再创建子目录删除目录。由两种方式不删除非空目录删除时要先删除目录中的所有文件并递归地删除子目录可删除非空目录目录中的文件和子目录同时被删除移动目录。显示目录修改目录4.2.3 目录结构单级目录结构整个文件系统中只建立一张目录表每个文件占一个目录项当建立新文件时先检查没有“重名”然后在该目录中增设一项将新文件的属性信息填入该项。当访问一个文件时先按文件名在该目录中找到相应的FCB经合法性检查后执行相应的操作当删除一个文件时先从该目录中找到该文件的目录项回收该文件所占的存储空间然后清除该目录项单级目录的查找速度慢文件不允许重名不便于共享的缺点对于多用户的操作系统是不使用的两级目录结构为了克服单级目录的缺点可采用两级目录将文件分成主文件目录MFD和用户文件目录UFD主文件目录记录用户名及相应用户文件目录所在的存储位置。用户文件目录记录该用户所有文件的FCB。当某用户想对其文件进行访问时只需搜索该用户对应的UFD既解决了不同用户文件不能重名的问题又在一定程度上保证了文件的安全两级目录结构提高了检索速度解决了多用户的文件重名问题但缺乏灵活性不能对文件分类树形目录结构将两级目录结构加以推广就形成了树形目录结构可以明显提高对目录的检索速度和文件系统的性能当用户要访问某个文件时用文件的路径名标识文件文件路径名是个字符串从根目录出发的路径称为绝对路径从当前目录出发的路径称为相对路径相对路径经过的路径少需要调入的目录少减少了磁盘I/O次数树形结构不便于实现用户间的文件共享查找一个文件需要按路径名逐级访问中间节点增加了磁盘访问次数影响查询速度无环图目录结构在树形目录的基础上增加了指向同一节点的有向边使目录成为一个有向无环图方便多个用户间的文件共享可以用不同的文件名指向同一文件甚至指向同一目录为每个共享节点设置一个共享计数器用于记录此时有多少个用户在共享该节点。当用户提出删除文件请求时只删除该用户的FCB并使计数器减1当共享计数器减为0使才删除文件节点共享文件不同于复制文件各用户指向的是同一文件只要其中一个用户修改了文件数据所有用户都可以看到文件的变化*4.2.4 目录实现4.2.5 文件共享1.基于索引节点的共享方式硬链接硬链接是基于索引节点的共享方式它将文件的物理地址和属性等信息不再放在目录项中而放在索引节点中在目录中只设置指向相应索引节点的指针在索引节点中还有一个链接计数count也称引用计数表示链接到本索引节点上的用户目录项的数量当用户删除共享文件时只将该文件的count减1然后删除自己目录中对应的目录项。当count0时才删除该文件2.利用符号链实现文件共享软链接当用户B想要访问用户A的文件F时由系统创建一个LINK类型的新文件LL中只含有被链接文件F的路径名类似快捷方式当用户访问文件L时操作系统看到要读的文件属于LINK类型则根据其中记录的路径名区查询对应文件F然后对F进行读写操作从而实现共享在软链接中只有文件主才拥有指向其索引节点的指针而共享该文件的其他用户只有该文件的路径名并不拥有指向其索引节点的指针当文件主删除共享文件后若其他用户又试图通过符号链区访问它则会访问失败于是再将符号链删除不会产生什么影响当其他用户读共享文件时系统会根据路径名依次查找目录会导致多次读磁盘故硬链接的查找速度更快符号链也是一个文件其索引节点要占用一定的磁盘空间4.3 文件系统4.3.1 文件系统结构1.I/O控制层包括设备驱动程序和中断处理程序在内存和磁盘系统之间传输信息设备驱动程序将输入的命令翻译成底层硬件的特定指令硬件控制器利用这些指令使I/O设备与系统交互。设备驱动程序告诉I/O控制器的什么位置采取什么动作2.基本文件系统向对应的设备驱动程序发送通用命令以读取/写入磁盘物理块。每个物理块由磁盘地址标识。该层也管理内存缓冲区并保存各种文件系统、目录和数据块的缓存。在进行磁盘块传输前分配合适的缓冲区并对缓冲区进行管理3.文件组织模块组织文件及其逻辑块和物理块将文件的逻辑地址转换为物理地址文件组织模块还包括空闲空间管理器以跟踪未分配的块根据需求提供给文件组织模块4.逻辑文件系统用于管理文件系统中的元数据信息元数据包括文件系统的所有结构而不包括实际数据或文件内容逻辑文件系统管理目录结构以便根据给定的文件名为文件组织模块提供所需要的信息。它通过文件控制块来维护文件结构逻辑文件系统还复制文件保护4.3.2 文件系统布局1.文件系统在磁盘中的结构文件系统存放在磁盘上多数磁盘划分为一个或多个分区每个分区中有一个独立的文件系统。主引导记录MBR位于磁盘的0号扇区用来引导计算机MBR的后面是分区表该表给出每个分区的起始和结束地址。表中的一个分区被标记为活动分区当计算机启动时BIOS读入并执行MBR。MBR做的第一件事是确定活动分区读入它的第一块即引导块引导块MBR执行引导块中的程序后该程序复制启动该分区中的操作系统。每个分区都是统一从一个引导块开始即使它不含有一个可启动的操作系统也不排除以后会在该分区安装一个操作系统。Windows称之为分区引导扇区超级块包含文件系统的所有关键信息在计算机启动时或者在该文件系统首次使用时超级块会被读入内存。超级块中典型信息包括分区块的数量、块的大小、空闲块的数量和指针、空闲的FCB数量和FCB指针等文件系统中空闲块的信息可以用位示图或指针链接的形式给出。后面也许跟的是一组i节点索引节点每个文件对应一个节点2.文件系统在内存中的结构4.3.3 文件存储空间管理存储空间的划分与初始化将物理磁盘划分为一个个文件卷逻辑卷、逻辑盘如C盘D盘文件卷划分为一个个的目录区存放文件目录信息存放用于磁盘存储空间管理的信息、文件区存放文件数据文件卷可由多个物理磁盘组成存储空间管理方法一、空闲表法为每个文件分配一块连续的存储空间。系统为外存上的所有空闲区建立一张空闲表每个空闲区对应一个空闲表项其中包括表项序号、该空闲区的第一个空闲盘块号、该空闲区的空闲盘块数等信息分配磁盘块与动态分区分配类似需分配连续的存储空间可采用首次适应、最佳适应、最坏适应算法回收磁盘块与动态分区分配类似也需要合并空闲区。共四种情况回收区的前后没有相邻空闲区回收区前后都是空闲区回收区前面是空闲区回收区后面是空闲区。二、空闲链表法1.空闲盘块链以盘块为单位组成一条空闲链分配磁盘块若某文件申请k个盘块则从连头开始依次摘下k个盘块分配并修改空闲链的连头指针回收磁盘块将回收的盘块依次挂到链尾并修改空闲链的链尾指针适用于离散分配的物理结构。为文件分配多个盘块时可能需要多次重复操作2.空闲盘区链以盘区为单位组成一条空闲链在空闲盘曲的第一个盘块中记录了盘区的长度、下一个盘区的指针分配磁盘块从链头开始检索按照特定算法找到一个符合要求的空闲盘区分配给文件。若没有合适的连续空闲块也可以将不同盘区的盘块同时分配给一个文件。分配后修改相应的链指针、盘区大小等数据回收磁盘块若回收区和某个空闲盘区相邻则需要将回收区合并到空闲盘区中。若回收区没有和任何空闲区相邻将回收区作为单独的一个空闲盘区挂到链尾三、位示图法每个二进制位对应一个盘块用0/1表示盘块是否空闲。位示图一般用连续的“字”来表示一个字为16位。可以用字号位号对应一个盘块。需要注意字号、位号是从0开始还是从1开始需要能推出盘块号与字号位号相互转换的公式字号位号ij对应的盘块号 b16ijb号盘块对应的字号 ib/n位号 jb%n分配磁盘块顺序扫描位示图找到k个相邻或不相邻的“0”根据字号、位号算出对应的盘块号将相应盘块分配给文件将相应位设为1回收磁盘块根据回收的盘块号计算出字号、位号将相应二进制位设为“0”适用于连续分配找连续k个块和离散分配累计找k个块四、成组链接法空闲表法、空闲链表法不使用于大型文件会导致空闲表、空闲链表过大成组链接法将空闲盘块分成若干组每组的第一个盘块记录下一组的空闲盘块总数和空闲盘块号。由各组的第一个盘块可以连接成一条链。第一组的空闲盘块总数和空闲盘块号保存在内存的专用栈中称为空闲盘块号栈。最后一组盘块中存放的第一个盘块号是“0”作为结束标志分配磁盘块根据空闲盘块号栈的指针将对应的盘块分配给用户同时移动指针并将空闲盘块数减1。若需要将栈底指针指向的盘块分配出去则需先将其中存储的下一组空闲盘块号信息入栈作为新的空闲盘块号栈的内容再将该盘块分配出去回收磁盘块将回收的盘块号存入空闲盘块号栈的顶部图中下边是栈顶同时移动指针将栈中的空闲盘块数加1。当栈已满时将现有栈中的空闲盘块号存入新回收的盘块并将该盘块号作为新栈底再将栈中的空闲盘 块数置14.3.4 虚拟文件系统不同文件系统在使用使可能需要不同的函数调用为简化操作提出虚拟文件系统虚拟文件系统VFS的特点向上层用户进程提供统一标准的系统调用接口屏蔽底层具体文件系统的实现差异VFS要求下层的文件系统必须实现某些规定的函数功能如open、read、write。一个新的文件系统想要在某操作系统上被使用旧必须满足该操作系统VFS的要求每打开一个新文件VFS就在主存中新建一个vnode用统一的数据结构标识文件无论该文件存储在哪个文件系统vnode只存在于主存中inode既会被调入主存也会在外存中存储4.3.5 文件系统挂载文件系统挂载即文件系统安装/装载文件系统挂载需要做的事在VFS中注册新挂载的文件系统。内存中的挂载表包含每个文件系统的相关信息包括文件系统类型、容量大小等新挂载的文件系统要向VFS提供一个函数地址列表将新文件系统加到挂载点也就是将新文件系统挂载到某个父目录下