操作系统 | 学习笔记 | 王道 | 4.2 目录

news2024/12/23 9:17:15

4.2 目录

img

4.2.1 目录的基本概念

文件目录指FCB的有序集合,一个FCB就是一个文件的目录项。与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的属性、位置和所有权等。

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

img

image-20241007161857370

4.2.2 目录结构
  1. 单级目录结构

    在整个文件系统中只建立一张目录表,每个文件占一个目录项,不允许文件重名,如下图所示。

    image-20230920114101960

    当访问一个文件时,先按文件名在该目录中查找到相应的FCB,经合法性检查后执行相应的操作。

    当建立一个新文件时,必须先检索所有目录项,以确保没有“重名”的情况,然后在该目录中增设一项,把新文件的属性信息填入到该项中。

    单级目录结构实现了“按名存取”,但是存在查找速度慢、文件不允许重名、不便于文件共享等缺点,而且对于多用户的操作系统显然是不适用的。

  2. 两级目录结构

    将文件目录分成主文件目录(MFD)和用户文件目录(UFD)两级,不同用户的文件可以重名,但不能对文件分类。

    image-20230920114603663

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

    用户文件目录项记录该用户文件的FCB信息。

    img

    两级目录结构提高了检索的速度,解决了多用户之间的文件重名问题,文件系统可以在目录上实现访问限制。但是两级目录结构缺乏灵活性,不能对文件分类。

  3. 树形目录结构

    不同目录下的文件可以重名,可以对文件进行分类,不方便共享。

    image-20230920114906657

    根据“文件路径”找到目标文件。用户(或用户进程)要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级日录之间用“/”隔开。从根目录出发的路径称为绝对路径。

    例如:自拍.jpg的绝对路径是“/照片/2015-08/自拍jpg”

    系统根据绝对路径一层一层地找到下一级目录。刚开始从外存读入根目录的目录表;找到“照片”目录的存放位置后,从外存读入对应的目录表;再找到“2015-08”目录的存放位置,再从外存读入对应目录表;最后才找到文件“自拍Jpg”的存放位置。整个过程需要3次读磁盘I/O操作。

    引入“当前目录”和“相对路径”后,磁盘I/O的次数减少了。这就提升了访问文件的效率。

    从根目录出发是绝对路径;从当前目录出发是相对路径。

    树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。在树形目录中,不同性质、不同用户的文件,可以分别呈现在系统目录树的不同层次或不同子树中,很容易地赋予不同的存取权限。但是,在树形目录中查找一个文件,需要按路径名逐级访问中间节点,增加了磁盘访问次数,这无疑会影响查询速度。目前,大多数操作系统如UNIX、Linux和Windows系统都采用了树形文件目录。

4.无环图目录结构

img

4.2.3 目录的操作
  • 搜索。当用户使用一个文件时,需要搜索目录,以找到该文件的对应目录项。
  • 创建文件。当创建一个新文件时,需要在目录中增加一个目录项。
  • 删除文件。当删除一个文件时,需要在目录中删除相应的目录项。
  • 创建目录。在树形目录结构中,用户可创建自己的用户文件目录,并可再创建子目录。
  • 删除目录。有两种方式:①不删除非空目录,删除时要先删除目录中的所有文件,并递归地删除子目录。②可删除非空目录,目录中的文件和子目录同时被删除。
  • 移动目录。将文件或子目录在不同的父目录之间移动,文件的路径名也会随之改变。
  • 显示目录。用户可以请求显示目录的内容,如显示该用户目录中的所有文件及属性。
  • 修改目录。某些文件属性保存在目录中,因而这些属性的变化需要改变相应的目录项。
4.2.4 目录实现

目录实现有线性列表和哈希表两种方式,线性列表实现对应线性查找,哈希表的实现对应散列查找。

  1. 线性列表

    最简单的目录实现方法是,采用文件名和数据块指针的线性列表。

    • 当创建新文件时,必须首先搜索目录以确定没有同名的文件存在,然后在目录中增加一个新的目录项。

    • 当删除文件时,则根据给定的文件名搜索目录,然后释放分配给它的空间。

    • 当要

      重用目录项

      时有许多种方法:

      • 可以将目录项标记为不再使用,或将它加到空闲目录项的列表上,
      • 还可以将目录的最后一个目录项复制到空闲位置,并减少目录的长度。

    采用链表结构可以减少删除文件的时间。

    线性列表的优点在于实现简单,不过由于线性表的特殊性,查我比较费时。

  2. 哈希表

    哈希表根据文件名得到一个值,并返回一个指向线性列表中元素的指针。

    • 优点:查找非常迅速,插入和删除也较简单,
    • 问题:需要一些措施来避免冲突(两个文件名称哈希到同一位置)。

为了减少I/O操作,把当前使用的文件目录复制到内存,以后要使用该文件时只需在内存中操作,因此降低了磁盘操作次数,提高了系统速度。

4.2.5 文件共享

文件共享不等于文件复制。

img

文件共享使多个用户共享同一个文件,系统中只需保留该文件的一个副本。

  1. 基于索引结点的共享方式(硬链接)

    各个用户的目录项指向同一个索引结点,索引结点中需要链接计数count,用于表示链接到本索引结点上的用户目录项数。

    image-20230920140425794

    某用户删除文件只是删除该用户的目录项,count–

    只有count==0才能真正删除文件数据和索引结点。

  2. 利用符号链实现文件共享(软链接,eg快捷方式)

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

    image-20230920140838755

    在一个Link型的文件中记录共享文件的存放路径(Windows快捷方式),操作系统根据路径一层层查找目录,最终找到共享文件。

    当User3访问“ccc”时,操作系统判断文件“ccc”属于Link类型文件,于是会根据其中记录的路径层层查找目录,最终找到User1的目录表中的“aaa”表项,于是就找到了文件1的索引结点。

    即使软链接指向的共享文件已被删除,Link型文件依然存在,只是通过Link型文件中的路径去查找共享文件会失败(找不到对应目录项)。

    由于用软链接的方式访问共享文件时要查询多级目录,会有多次磁盘I/O,因此用软链接访问的速度要比硬链接更慢。硬链接直接存数据块,不需要解析路径。

硬链接和软链接都是文件系统中的静态共享方法,在文件系统中还存在着另外的共享需求,即两个进程同时对同一个文件进行操作,这样的共享称为动态共享。

注意:原文件被删除了,软链接本身这个文件还是1,不是0

4.2.6 本节小结

1)目录管理的要求是什么?

实现“按名存取”,这是目录管理最基本的功能。
提高对目录的检索速度,从而提高对文件的存取速度。
为了方便用户共享文件,目录还需要提供用于控制访问文件的信息。
允许不同用户对不同文件采用相同的名字,以使用户按自己的习惯给文件命名。

2)在目录中查找某个文件可以使用什么方法?

​ 可以采用线性列表法或哈希表法。线性列表将文件名组织成一个线性表,查找时依次与线性表中的每个表项进行比较。若将文件名按序排列,则使用折半查找法可以降低平均的查找时间但建立新文件时会增加维护线性表的开销。哈希表用文件名通过哈希函数得到一个指向文件的指针,这种方法非常迅速,但要注意避免冲突。

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

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

相关文章

win11下AMD CPU支持WSL2

除开常规的配置: 1.打开虚拟机 2.打开hyper-v 3.bios启用虚拟机 还需要做如下操作: 管理员方式进入Powershell: bcdedit /set hypervisorlaunchtype auto 成功案例: win11: cpu: amd

00_概览_kafka

kafka 概述kafka版本流程启动zk配置zk启动命令 启动kafka修改server.properties启动命令 kafka脚本-命令行操作命令行创建主题脚本查看主题主题详情修改主题删除主题大量日志解决方案 控制台生产者消费者代码 生产者 消费者kafka-toolkafka数据文件 扩展横向扩展纵向扩展分区消…

【小沐学GIS】QGIS导出OpenStreetMap数据(QuickOSM、OSM)

文章目录 1、简介1.1 OSM1.2 QuickOSM1.3 Overpass Turbo 2、插件安装3、插件使用3.1 快速查询(boundary边界)3.2 快速查询(railway铁路)3.3 快速查询(boundaryadmin_level行政边界)3.4 快速查询&#xff0…

OpenFeign-查询参数-日期格式化:LocalDate、Date、@DateTimeFormat(低版本无效)

创建时间:2024-10-08 本文适用的依赖版本: spring-boot-starter-parent:3.3.3 spring-cloud-starter-openfeign:4.1.3 一、场景 在 REST API 的查询接口中,日期查询参数 的格式一般是标准(ISO 8601&#x…

BiGRU-Transformer时间序列预测(多输入单预测)——基于Pytorch框架

1 介绍 本文将介绍一种基于Transformer和BiGRU(双向门控循环单元)的混合模型及其在时间序列预测中的应用。本模特适用于多输入单输出预测,适合风电预测,功率预测,负荷预测等等。 2 方法 首先,从Excel文件…

常见数据库等保测评检查命令汇总

MySQL数据库 select user, host FROM mysql.user;查看管理用户 show variables like validate%; 查看口令策略 show variables like %password%; 查看口令策略 show variables like %general%; 查看日志是否开启 show variables like general_log%; 可以看查询日…

电磁兼容(EMC):PCB设计里的镜像面究竟是个啥?

目录 1. 镜像面概念 2. 镜像面示意 3. 镜像面工作原理 4. 总结 PCB设计中涉及到高频信号处理时经常会听到一个叫做镜像面的概念。镜像面究竟是哪个面?和我们平时所说的地平面和电源平面有什么区别? 1. 镜像面概念 镜像面是指高频信号在完整平面上的…

退货单不能反价值重估的操作

财务的工作效率几何级式倍增。29号做的退货单,30号就做了发票。业务员工作质量却是堪忧,退货单做了2次。这样的问题是常态,该如何避免呢? 从提示文字分析,不能弃审, 一般是单据被下游单据锁定导致的&#…

算法 | 模拟

目录 替换所有的问号 题解: 提莫攻击 题解: Z字形变换 题解: 外观数列 题解: 数青蛙 题解: 替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode)https://leetcode.cn/problems/re…

AFSim仿真系统 --- 系统简解_03( Warlock模块 - 人在环路 在仿真领域中指的是AFSIM的操作员互动可视化应用程序)

我们就用保留单词 Warlock Warlock(在仿真领域中指的是AFSIM的操作员互动可视化应用程序--人在环路 ) Warlock是AFSIM的操作员环环相扣(Operator-in-the-Loop)视觉应用程序。它提供了一个图形环境,用于在运行时查看和…

【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL45

异步FIFO 描述 请根据题目中给出的双口RAM代码和接口描述,实现异步FIFO,要求FIFO位宽和深度参数化可配置。 电路的接口如下图所示。 双口RAM端口说明: 端口名 I/O 描述 wclk input 写数据时钟 wenc input 写使能 waddr input 写…

Qt程序国际化

目录 程序的国际化 第一步:生成ts文件 第二步:生成并加载qm文件 程序的国际化 第一步:生成ts文件 Ts文件格式上实际是xml,记录界面的字符和代码中tr包含的字符的具体位置(文件位置,行号列号等&#xff0…

QT 实现图片查看工具

QT 实现图片查看工具 1、选择图像文件 单文件选择 QFileDialog::getOpenFileName多文件选择 QFileDialog::getOpenFileNamesQList<QString> imageNames = QFileDialog::getOpenFileNames(this,tr("打开图片"),"",tr("图片文件 (*.png *.jpg *.b…

【STM32 Blue Pill编程实例】-OLED显示DHT22传感器数据

OLED显示DHT22传感器数据 文章目录 OLED显示DHT22传感器数据1、DHT22介绍2、硬件准备与接线3、模块配置3.1 定时器配置3.2 DHT22引脚配置3.3 OLED配置4、代码实现在本文中,我们将介绍如何将 DHT22 温度和湿度传感器与 STM32 Blue Pill 开发板连接,并使用 HAL 库在 STM32CubeI…

车载音频焦点(二)

目录 1 可延迟的音频焦点 2 多音频区焦点管理 3 HAL 音频焦点 4 OEM 车载音频焦点服务 1 可延迟的音频焦点 在 Android 11 中,AAOS 开始支持请求获得可延迟的音频焦点。 当非瞬态焦点请求 与 当前焦点持有者交互 遭到拒绝时,前者可以延迟。 一旦焦点的变化导致延迟的请…

各省份自然灾害损失造成的直接经济损失数据(2009-2022年)

自然灾害是自然演变过程中不可避免的现象&#xff0c;它们对人类社会构成了巨大的威胁。中国作为一个自然灾害频发的国家&#xff0c;面临着种类繁多的灾害挑战&#xff0c;包括气象灾害、地质灾害、海洋灾害、生物灾害和森林草原火灾等。 数据来源&#xff1a;《中国环境统计…

数据分布过于集中 怎么办,python 人工智能 ,数据分析,机器学习pytorch tensorflow ,

数据分布过于集中&#xff0c;意味着数据的大部分值都聚集在某个特定区间内&#xff0c;这可能会导致统计分析的结果不够稳健&#xff0c;或者模型训练时出现过拟合等问题。针对这种情况&#xff0c;可以考虑以下几种方法来处理&#xff1a; 变换成 1. **数据转换**&#xff1…

笔记-stm32移植ucos

文章目录 一、UCOS的基础知识1.1 前后台系统:1.2 RTOS系统可剥夺型内核:前后台系统和RTOS系统 1.3 UCOS系统简介学习方法 二、ucossii移植Step1&#xff1a;在工程中建立存放UCOSS代码的文件夹UCOSIIStep2:向CORE文件夹添加文件Step3:向Config文件夹添加文件Step4:向port文件夹…

Knife4j-SpringBoot3-OpenAPI3:基本使用、生产环境关闭接口文档、配置文件、配置接口文档描述信息、OpenAPI3注解

版本&#xff1a; SpringBoot&#xff1a;3.3.3 Knife4j&#xff1a;4.5.0 创建时间&#xff1a;2024-10-08 一、官网 Knife4j 的 SpringBoot3 官方说明文档&#xff1a; https://doc.xiaominfo.com/docs/quick-start#spring-boot-3 springdoc官网&#xff1a;https://spring…