26考研——文件管理_文件目录(4)

408答疑


文章目录

  • 二、文件目录
    • 1、目录的作用与结构
      • 1.1、目录的基本概念
      • 1.2、目录的组织形式
        • 1.2.1、单级目录结构
        • 1.2.2、两级目录结构
        • 1.2.3、多级(树形)目录结构
        • 1.2.4、无环图目录结构
      • 1.3、目录的实现方式
        • 1.3.1、线性列表
        • 1.3.2、哈希表
    • 2、文件共享与链接
      • 2.1、基于索引节点的共享方式(硬链接)
      • 2.2、利用符号链实现文件共享(软链接)
      • 2.3、符号链接与硬链接的比较
  • 五、参考资料
    • 鲍鱼科技课件
    • 26王道考研书
    • 小林coding


二、文件目录

1、目录的作用与结构

1.1、目录的基本概念

  • FCB 的有序集合称为文件目录,一个 FCB 就是一个文件目录项。

  • 与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的属性、位置和所有权等。

  • 目录管理的基本要求:

    • 从用户的角度看,目录在用户(应用程序)所需要的文件名和文件之间提供一种映射,所以目录管理要实现“按名存取”;
    • 目录存取的效率直接影响到系统的性能,所以要提高对目录的检索速度;
    • 在多用户系统中,应允许多个用户共享一个文件,因此目录还需要提供用于控制访问文件的信息。
  • 此外,应允许不同用户对不同文件采用相同的名字,以便于用户按自己的习惯给文件命名,目录管理通过树形结构来解决和实现。

  • 目录的操作

    • 搜索:当用户使用一个文件时,需要搜索目录,以找到该文件的对应目录项。

    • 创建文件:当创建一个新文件时,需要在目录中增加一个目录项。

    • 删除文件:当删除一个文件时,需要在目录中删除相应的目录项。

    • 创建目录:在树形目录结构中,用户可创建自己的用户文件目录,并可再创建子目录。

    • 删除目录(有两种方式)

      1. 不删除非空目录,删除时要先删除目录中的所有文件,并递归地删除子目录。
      2. 可删除非空目录,目录中的文件和子目录同时被删除。
    • 移动目录:将文件或子目录在不同的父目录之间移动,文件的路径名也会随之改变。

    • 显示目录:用户可以请求显示目录的内容,如显示该用户目录中的所有文件及属性。

    • 修改目录:某些文件属性保存在目录中,因此这些属性的变化需要改变相应的目录项。

1.2、目录的组织形式

1.2.1、单级目录结构
  • 在整个文件系统中只建立一张目录表,每个文件占一个目录项,如下图所示。在这里插入图片描述
  • 单级目录结构实现了“按名存取”,但是存在查找速度慢、文件不允许重名、不便于文件共享等缺点,而且对于多用户的操作系统显然是不适用的。

注意:

  • 当建立一个新文件时,必须先检索所有目录项,以确保没有“重名”的情况,然后在该目录中增设一项,将新文件的属性信息填入该项。
  • 当访问一个文件时,先按文件名在该目录中查找到相应的 FCB,经合法性检查后执行相应的操作。
  • 当删除一个文件时,先从该目录中找到该文件的目录项,回收该文件所占用的存储空间,然后清除该目录项。
1.2.2、两级目录结构
  • 为了克服单级目录所存在的缺点,可以采用两级方案,将文件目录分成主文件目录(Master File Directory,MFD)和用户文件目录(User File Directory,UFD)两级,如下图所示。在这里插入图片描述

  • 主文件目录:主文件目录项记录用户名及相应用户文件目录所在的存储位置。

  • 用户文件目录

    • 用户文件目录项记录该用户所有文件的 FCB。
    • 当某用户欲对其文件进行访问时,只需搜索该用户对应的 UFD,这既解决了不同用户文件的“重名”问题,又在一定程度上保证了文件的安全。
  • 优点

    • 两级目录结构提高了检索的速度,解决了多用户之间的文件重名问题,文件系统可以在目录上实现访问限制。
    • 但是两级目录结构缺乏灵活性,不能对文件分类。
1.2.3、多级(树形)目录结构
  • 将两级目录结构加以推广,就形成了树形目录结构,如下图所示。它可以明显地提高对目录的检索速度和文件系统的性能。在这里插入图片描述
    • 路径:当用户要访问某个文件时,用文件的路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件通路上所有目录名与数据文件名用分隔符 “/” 链接而成。
    • 绝对路径:从根目录出发的路径称为绝对路径,系统中的每个文件都有唯一的路径名。
    • 当前目录:一个进程在运行时,其所访问的文件大多局限于某个范围,当层次较多时,每次从根目录查询会浪费时间,因此可为每个进程设置一个当前目录(也称工作目录),此时进程对各文件的访问都只需相对于当前目录而进行。
    • 相对路径:当用户要访问某个文件时,使用相对路径名标识文件,相对路径由从当前目录出发到所找文件通路上所有目录名与数据文件名用分隔符 “/” 链接而成。
    • 上图所示是 Linux 操作系统的树形目录结构,“/dev/hda” 就是一个绝对路径。若当前目录为 “/bin”,则 “./ls” 就是一个相对路径,其中符号 “.” 表示当前工作目录。
  • 通常,每个用户都有各自的“当前目录”,登录后自动进入该用户的“当前目录”。操作系统提供一个专门的系统调用,供用户随时改变“当前目录”。例如,在 UNIX 系统中,“/etc/passwd” 文件就包含有用户登录时默认的“当前目录”,可用 “cd” 命令改变“当前目录”。
  • 优点
    • 树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。
    • 在树形目录中,不同性质、不同用户的文件,可以分别呈现在系统目录树的不同层次或不同子树中,很容易地赋予不同的存取权限。
  • 缺点:在树形目录中查找一个文件,需要按路径名逐级访问中间节点,增加了磁盘访问次数,这无疑会影响查询速度。
  • 目前,大多数操作系统如 UNIX、Linux 和 Windows 系统都采用了树形文件目录。
1.2.4、无环图目录结构
  • 树形目录结构能便于实现文件分类,但不便于实现文件共享,为此在树形目录结构的基础上增加一些指向同一节点的有向边,使整个目录成为一个有向无环图,如下图所示。在这里插入图片描述

    • 这种结构允许目录共享子目录或文件,同一个文件或子目录可以出现在两个或多个目录中。
    • 当某用户要求删除一个共享节点时,若系统只是简单地将它删除,则当另一共享用户需要访问时,会因无法找到这个文件而发生错误。
      • 为此,可为每个共享节点设置一个共享计数器,每当图中增加对该节点的共享链时,计数器加 1;每当某用户提出删除该节点时,计数器减 1。
      • 仅当共享计数器为 0 时,才真正删除该节点,否则仅删除请求用户的共享链。
  • 无环图目录结构方便地实现了文件的共享,但使得系统的管理变得更加复杂。

1.3、目录的实现方式

  • 在访问一个文件时,操作系统利用路径名找到相应目录项,目录项中提供了查找文件磁盘块所需要的信息。
  • 目录实现的基本方法有线性列表和哈希表两种,要注意目录的实现就是为了查找,因此线性列表实现对应线性查找,哈希表的实现对应散列查找。
1.3.1、线性列表
  • 最简单的目录实现方法是,采用文件名和数据块指针的线性列表。
  • 当创建新文件时,必须首先搜索目录以确定没有同名的文件存在,然后在目录中增加一个新的目录项。
  • 当删除文件时,则根据给定的文件名搜索目录,然后释放分配给它的空间。
    • 当要重用目录项时有许多种方法:可以将目录项标记为不再使用;或将它加到空闲目录项的列表上;还可以将目录的最后一个目录项复制到空闲位置,并减少目录的长度。
    • 采用链表结构可以减少删除文件的时间。
  • 线性列表的优点在于实现简单,不过由于线性表的特殊性,查找比较费时。
1.3.2、哈希表
  • 哈希表根据文件名得到一个值,并返回一个指向线性列表中元素的指针。

  • 优点:查找非常迅速,插入和删除也较简单。

  • 缺点:需要一些措施来避免冲突(两个文件名称哈希到同一位置)。

目录查询优化

  • 目录查询是通过在磁盘上反复搜索完成的,需要不断地进行 I/O 操作,开销较大。
  • 为了减少 I/O 操作,将当前使用的文件目录复制到内存,以后要使用该文件时只需在内存中操作,因此降低了磁盘操作次数,提高了系统速度。

2、文件共享与链接

  • 文件共享使多个用户共享同一个文件,系统中只需保留该文件的一个副本。若系统不能提供共享功能,则每个需要该文件的用户都要有各自的副本,会造成对存储空间的极大浪费。
  • 以无环图目录为例,基于该结构可以实现文件共享,当建立链接关系时,必须将被共享文件的物理地址(盘块号)复制到相应的目录。如果某个用户向该文件添加新数据,且需要增加新盘块,那么这些新增的盘块只出现在执行操作的目录中,对其他共享用户是不可见的。

2.1、基于索引节点的共享方式(硬链接)

  • 硬链接是基于索引节点的共享方式,它将文件的物理地址和属性等信息不再放在目录项中,而是放在索引节点中,在目录中只设置文件名及指向相应索引节点的指针。

  • 如下图所示,在用户 A 和 B 的目录中,都设置有指向共享文件的索引节点指针。在这里插入图片描述

    • 在索引节点中还有一个链接计数 count,也称引用计数,表示链接到本索引节点(文件)上的用户目录项的数量。
    • c o u n t = 2 count = 2 count=2 时,表示有两个用户目录项链接到本文件上,即有两个用户共享此文件。
  • 文件创建与共享

    • 当用户 A 创建一个新文件时,他是该文件的所有者,此时将 count 置为 1。
    • 当用户 B 要共享此文件时,在 B 的目录中增加一个目录项,并设置一个指针指向该文件的索引节点。此时,文件主仍是用户 A, c o u n t = 2 count = 2 count=2
  • 文件删除

    • 当用户 A 不再需要此文件时,能否直接将其删除?
      • 答案是否定的。
      • 因为若删除该文件,必然也删除该文件的索引节点,这样便使用户 B 的指针悬空,而 B 可能正在此文件上执行写操作,此时将因此半途而废。
      • 因此用户 A 不能删除此文件,只是将该文件的 count 减 1,然后删除自己目录中的相应目录项。
      • 用户 B 仍可以使用该文件。
    • 当 count = 0 时,表示没有用户使用该文件,才删除该文件。
  • 如下图所示为文件共享中的链接计数。在这里插入图片描述

2.2、利用符号链实现文件共享(软链接)

  • 为使用户 B 能共享用户 A 的一个文件 F,可由系统创建一个 LINK 类型的新文件 L,并将文件 L 写入用户 B 的目录,以实现 B 的目录与文件 F 的链接。

  • 文件 L 中只含有被链接文件 F 的路径名,如下图所示。在这里插入图片描述

    • 这种链接方法称为符号链接或软链接,它类似于 Windows 系统中的快捷方式。
    • 当用户 B 访问文件 L 时,操作系统看到要读的文件属于 LINK 类型,则根据其中记录的路径名去查询文件 F,然后对 F 进行读/写操作,从而实现用户 B 对文件 F 的共享。
  • 文件主与共享用户

    • 利用符号链方式实现文件共享时,只有文件主才拥有指向其索引节点的指针。
    • 而共享该文件的其他用户只有该文件的路径名,并不拥有指向其索引节点的指针。这样,也就不会发生在文件主删除一个共享文件后留下一个悬空指针的情况。
  • 文件删除:当文件主将一个共享文件删除后,若其他用户又试图通过符号链去访问它时,则会访问失败,于是再将符号链删除,此时不会产生任何影响。

  • 访问开销

    • 在符号链的共享方式中,当其他用户读共享文件时,系统根据文件路径名依次查找目录,直至找到该文件的索引节点。
    • 因此,每次访问共享文件时,都可能要多次地读盘,增大了访问文件的开销。
    • 此外,符号链接也是一个文件,其索引节点也要耗费一定的磁盘空间。

利用符号链实现网络文件共享时,只需提供该文件所在机器的网络地址及文件路径名。

2.3、符号链接与硬链接的比较

  • 硬链接是多个指针指向一个索引节点,保证只要还有一个指针指向索引节点,索引节点就不能删除;硬链接的查找速度要比软链接的快。

  • 软链接是将到达共享文件的路径保存下来,当要访问文件时,根据路径寻找文件。

  • 文件共享,“软”“硬”兼施。硬链接和软链接各有优缺点,可以根据具体需求选择适合的共享方式。

五、参考资料

鲍鱼科技课件

b站免费王道课后题讲解:
在这里插入图片描述

网课全程班:
在这里插入图片描述

26王道考研书

小林coding

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/82022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven 项目中集成数据库文档生成工具

在 Maven 项目中,可以通过集成 数据库文档生成工具(如 screw-maven-plugin、mybatis-generator 或 liquibase)来自动生成数据库文档。以下是使用 screw-maven-plugin(推荐)的完整配置步骤: 1. 添加插件配置…

WebSocket指数避让与重连机制

1. 引言 在现代Web应用中,WebSocket技术已成为实现实时通信的重要手段。与传统的HTTP请求-响应模式不同,WebSocket建立持久连接,使服务器能够主动向客户端推送数据,极大地提升了Web应用的实时性和交互体验。然而,在实…

本地部署AI工作流

🧰 主流 RAG / 工作流工具对比表(含是否免费、本地部署支持与资源需求) 工具名类型是否支持 RAG可视化目标用户是否免费支持本地部署本地部署一般配置Dify企业级问答系统平台✅✅非技术 & 企业用户✅ 免费版 商业版✅ 支持2C4G 起&…

React 第五十节 Router 中useNavigationType的使用详细介绍

前言 useNavigationType 是 React Router v6 提供的一个钩子,用于确定用户如何导航到当前页面。 它提供了关于导航类型的洞察,有助于优化用户体验和实现特定导航行为。 一、useNavigationType 核心用途 1.1、检测导航方式: 判断用户是通过…

4.2.3 Spark SQL 手动指定数据源

在本节实战中,我们学习了如何在Spark SQL中手动指定数据源以及如何使用format()和option()方法。通过案例演示,我们读取了不同格式的数据文件,包括CSV、JSON,并从JDBC数据源读取数据,展示了如何将这些数据转换为DataFr…

【AUTOSAR OS】计数器Counter机制解析:定义、实现与应用

一、Counter的定义与作用 在AUTOSAR Classic Platform(CP)中,**Counter(计数器)**是系统实现时间管理的核心组件,用于测量时间间隔、触发报警(Alarm)和调度表(Schedule …

在机器视觉测量和机器视觉定位中,棋盘格标定如何影响精度

棋盘格标定是机器视觉(尤其是基于相机的系统)中进行相机内参(焦距、主点、畸变系数)和外参(相机相对于世界坐标系的位置和姿态)标定的经典且广泛应用的方法。它的质量直接、显著且多方面地影响最终的视觉测量和定位精度。 以下是棋盘格标定如何影响精度的详细分析: 标定…

SOC-ESP32S3部分:21-非易失性存储库

飞书文档https://x509p6c8to.feishu.cn/wiki/QB0Zw7GLeio4l4kyaWQcuQT3nZS 非易失性存储 (NVS) 库主要用于在 flash 中存储键值格式的数据。 它允许我们在芯片的闪存中存储和读取数据,即使在断电后,这些数据也不会丢失。 NVS 是 ESP32 flash&#xff…

让大模型看得见自己的推理 — KnowTrace结构化知识追踪

让大模型“看得见”自己的推理 —— KnowTrace 结构化知识追踪式 RAG 全解析 一句话概括:把检索-推理“改造”成 动态知识图构建任务,再让 LLM 只关注这张不断精炼的小图 —— 这就是显式知识追踪的核心价值。 1. 背景:为什么 RAG 仍难以搞定多跳推理? 长上下文负担 传统 I…

新版智慧景区信息化系统解决方案

该智慧景区信息化系统解决方案以云 + 大数据 + 物联网技术为核心,秉持 “汇聚联合,突显数据隐性价值” 理念,通过数据融合、业务融合、技术融合,构建 “营销、服务、管理” 三位一体模式。方案涵盖智慧票务、智能入园、精准营销、景区管理(如用电安全监测、森林防火、客流…

人工智能在智能健康监测中的创新应用与未来趋势

随着人们健康意识的不断提高和医疗资源的日益紧张,智能健康监测作为一种新兴的健康管理方式,正在迅速发展。人工智能(AI)技术通过其强大的数据分析和预测能力,为智能健康监测提供了重要的技术支持。本文将探讨人工智能…

python打卡day40

知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中展平操作:除第一个维度batchsize外全部展平dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 导入包 # 先继续之前的代码 import torch …

系统性学习C语言-第十二讲-深入理解指针(2)

系统性学习C语言-第十二讲-深入理解指针(2) 1. const 修饰指针1.1 const 修饰变量1.2 const 修饰指针变量 2. 野指针2.1 野指针成因2.2 如何规避野指针2.2.1 指针初始化2.2.2 小心指针越界2.2.3 指针变量不再使用时,及时置 NULL &…

《高等数学》(同济大学·第7版) 第一节《映射与函数》超详细解析

集合(Set)—— 最基础的数学容器 定义: 集合是由确定的、互不相同的对象(称为元素)组成的整体。 表示方法: 列举法:A {1, 2, 3} 描述法:B {x | x > 0}(表示所有大于…

Spring Boot整活指南:从Helo World到“真香”定律

📌 一、Spring Boot的"真香"本质(不是996的福报) 你以为Spring Boot只是个简化配置的工具?Too young!它其实是程序员的​​摸鱼加速器​​。 ​​经典场景还原​​: 产品经理:“这个…

打字练习:平台推荐

1.打字练习 . 1)平台推荐 下面推荐两个打字练习平台 Keybr:https://www.keybr.com/ TypingClub:https://www.edclub.com/sportal/ . 2)平台对比 特性KeybrTypingClub核心优势AI智能弱项训练结构化课程体系适合人群开发者/…

ASP.NET Core 中JWT的基本使用

文章目录 前言一、JWT与RBAC二、JWT 的作用三、RBAC 的核心思想四、使用1、配置文件 (appsettings.json)2、JWT配置模型 (Entity/JwtSettings.cs)3、服务扩展类,JWT配置 (Extensions/ServiceExtensions.cs)4、用户仓库接口服务5、认证服务 (Interface/IAuthService.…

(19)java在区块链中的应用

🔗 Java在区块链中的应用:智能合约开发全攻略 TL;DR: Java在区块链领域主要通过Hyperledger Fabric、Web3j和专用JVM实现智能合约开发,相比Solidity具有更强的企业级支持和开发效率,但在执行效率和Gas消耗方面存在差异&#xff0c…

深入理解设计模式之访问者模式

深入理解设计模式之访问者模式(Visitor Pattern) 一、什么是访问者模式? 访问者模式(Visitor Pattern)是一种行为型设计模式。它的主要作用是将数据结构与数据操作分离,使得在不改变数据结构的前提下&…

div或button一些好看实用的 CSS 样式示例

1:现代渐变按钮 .count {width: 800px;background: linear-gradient(135deg, #72EDF2 0%, #5151E5 100%);padding: 12px 24px;border-radius: 10px;box-shadow: 0 4px 15px rgba(81, 81, 229, 0.3);color: white;font-weight: bold;border: none;cursor: pointer;t…