文件目录(文件控制块FCB,目录结构,索引结点)

news/2024/5/6 11:42:25/文章来源:https://blog.csdn.net/qq_61888137/article/details/133955390

1.文件控制块(实现文件目录的关键数据结构)

目录文件中的一条记录就是文件控制块(FCB)
在这里插入图片描述
FCB的有序集合称为“文件目录”,一个FCB就是一个文件目录项

1.FCB的组成

  • FCB中包含了文件的基本信息(文件名、物理地址、逻辑结构、物理结构等)
  • 存取控制信息(是否可读/可写、禁止访问的用户名单等),
  • 使用信息(如文件的建立时间、修改时间等)。
  • 最重要,最基本的还是文件名、文件存放的物理地址

FCB 实现了文件名和文件之间的映射。使用户(用户程序)可以实现“按名存取”。

2.需要对目录的操作

  1. 搜索:当用户要使用一个文件时,系统要根据文件名搜索目录,找到该文件对应的目录项
  2. 创建文件:创建一个新文件时,需要在其所属的目录中增加一个目录项
  3. 删除文件:当删除一个文件时,需要在目录中删除相应的目录项
  4. 显示目录:用户可以请求显示目录的内容,如显示该目录中的所有文件及相应属性
  5. 修改目录:某些文件属性保存在目录中,因此这些属性变化时需要修改相应的目录项(如:文件重命名)

2.目录结构

1.单级目录结构

早期操作系统并不支持多级目录,整个系统中只建立一张目录表,每个文件占一个目录项。
在这里插入图片描述
单级目录实现了“按名存取”,但是不允许文件重名。

在创建一个文件时,需要先检查目录表中有没有重名文件,确定不重名后才能允许建立文件,并将新文件对应的目录项插入目录表中。

显然,单级目录结构不适用于多用户操作系统。

2.两级目录结构

早期的多用户操作系统,采用两级目录结构。
分为主文件目录(MFD,Master File Directory)和用户文件目录(UFD,User Flie Directory)

在这里插入图片描述
允许不同用户的文件重名。文件名虽然相同,但是对应的其实是不同的文件。

两级目录结构允许不同用户的文件重名,也可以在目录上实现实现访问限制(检查此时登录的用户名是否匹配)。
但是两级目录结构依然缺乏灵活性,用户不能对自己的文件进行分类。

3.多级目录结构(树形目录结构)

在这里插入图片描述

1.绝对路径

用户(或用户进程)要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。
各级目录之间用“/”隔开。
根目录出发的路径称为绝对路径
在这里插入图片描述

2.相对路径

很多时候,用户会连续访问同一目录内的多个文件(比如:接连查看"2015-08"日录内的多个照片文件),
每次都从根目录开始查找,是很低效的。

因此可以设置一个“当前目录”。

例如,此时已经打开了“照片”的目录文件,也就是说,这张目录表已调入内存,那么可以把它设置为“当前目录”。
当用户想要访问某个文件时,可以使用从当前目录出发的“相对路径”

在 Linux 中,“.”表示当前目录,因此如果“照片”是当前目录,则"自拍.jpg"的相对路径为:“./2015-08/自拍.jpg”。

4.无环图目录结构

树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。
但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”。
在这里插入图片描述
可以用不同的文件名指向同一个文件,甚至可以指向同一个目录(共享同一目录下的所有内容)。

1.共享计数器

需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。
用户提出删除结点的请求时,只是删除该用户的FCB、并使共享计数器减1,并不会直接删除共享结点。

注意:
共享文件不同于复制文件。
在共享文件中,由于各用户指向的是同一个文件,因此只要其中一个用户修改了文件数据,那么所有用户都可以看到文件数据的变化。

3.索引结点(对文件控制块(FCB)的优化)

1.索引结点

  1. 当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。
  2. 存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”。
  3. 相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件等。

在这里插入图片描述

2.优化效率对比

  1. 假设一个FCB是64B,磁盘块的大小为1KB,则每个盘块中只能存放16个FCB。若一个文件目录中共有640个目录项,则共需要占用640/16=40个盘块。因此按照某文件名检索该目录,平均需要查询320个目录项,平均需要启动磁盘20次(每次磁盘I/O读入一块)
  2. 使用索引结点机制,文件名占14B,索引结点指针站2B,则每个盘块可存放64个目录项,那么按文件名检索目录平均只需要读入320/64=5个磁盘块。显然,这将大大提升文件检索速度

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

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

相关文章

knife4j-openapi3 无法使用swagger注解@ApiModelProperty

问题描述 当使用knife4j springboot3, 发现无法使用 swagger注解ApiModelProperty需要单独导入一个包但是即使导入这个包也不生效,即使配置了description也为空 原因 简单来说:swagger2 > swagger3的时候出现了破坏性的更新 将ApiMode…

什么是无磁远传水表?工作原理是怎样的?

无磁远传水表是一种新型的智能水表,与传统水表相比,它具有更高的精度和可靠性,并且可以实现远程读数和控制。那么,无磁远传水表的工作原理是怎样的呢?下面,小编来为大家介绍下什么是无磁水表?它的工作原理是怎样的&a…

【OpenCV实现鼠标绘图,轨迹栏做调色板,图像的基本操作】

文章目录 鼠标绘图轨迹栏做调色板图像的基本操作 鼠标绘图 在OpenCV中操作鼠标事件 函数:cv.setMouseCallback() 目的是在鼠标双击的地方画一个圆。首先,我们需要创建一个鼠标回调函数,该函数会在鼠标事件发生时执行。鼠标事件包括左键按下…

【七:docken+jenkens部署】

一:腾讯云轻量服务器docker部署Jenkins https://blog.csdn.net/qq_35402057/article/details/123589493 步骤1:查询jenkins版本:docker search jenkins步骤2:拉取jenkins镜像 docker pull jenkins/jenkins:lts步骤3:…

如何通过命令行进入到mysql?

如何通过命令行进入到mysql? 首先进入到C盘mysql安装目录的bin文件夹,然后在这个文件夹下打开命令行窗口,如下图: 接着输入进入命令mysql -u root -p如下图: 可以发现输入连接命令之后需要让你输入mysql连接密码&am…

Oracle的立场:官网更换首页与以色列站在一起

Oracle公司的官网,更换了首页内容,明确表明立场:Oracle与以色列站在一起。 声明指出: Oracle谴责针对以色列及其公民的恐怖袭击。Oracle将为其员工、以色列政府和国防机构提供一切必要的支持。 Magen David Adom是一家为以色列公民…

CCF CSP认证 历年题目自练Day34

题目一 试题编号: 202303-1 试题名称: 田地丈量 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 问题描述 西西艾弗岛上散落着 n 块田地。每块田地可视为平面直角坐标系下的一块矩形区域,由左下角坐标 (x1,…

spark获取hadoop服务token

spark 作业一直卡在accepted 问题现象问题排查1.查看yarn app日志2.问题分析与原因 问题现象 通过yarn-cluster模式提交spark作业,客户端日志一直卡在submit app,没有运行 问题排查 1.查看yarn app日志 appid已生成,通过yarn查看app状态为…

“传统”开发与AI开发的区别与联系(更新了GPT3.5的反馈)

1、传统开发的算法和软件整体,也可以看成是一个“大模型”,其中有不同层次的处理,最终能够完成从输入到输出的计算,不过,其中的计算都是人工定义的,一般依赖于研究成果的应用。研究成果在实际中的应用处理。…

linux性能分析(一)如何查看网络的性能指标

一 如何查看网络的性能指标 说明: 以下案例中的相关命令只是粗略讲解,后续会有针对性的细讲补充: 各个案例通过不同维度衡量网络的性能指标 ① 如何进行性能分析 思考:如何进行性能分析?1、前提:一定是系统出现不符合预期的…

SpringCloud 完整版--(Spring Cloud Netflix 体系)

目录 SpringCloudSpring Cloud Netflix 体系分布式概念:分析图单体应用分布式架构集群微服务分布式微服务集群 服务注册与发现Eureka作用:为什么使用Eureka?解答:分析图 搭建:1、注册中心Eureka-server搭建创建项目配置…

初出茅庐的小李博客之Windows11运行Linux记录

安装教程 超简单,不安装虚拟机,Windows11运行Linuxhttps://zhuanlan.zhihu.com/p/393484912 注意事项 出现错误有可能是少了驱动 驱动下载地址 https://link.zhihu.com/?targethttps%3A//wslstorestorage.blob.core.windows.net/wslblob/wsl_updat…

电子技术基础之一(电容和电感)

Electronic Techonolgy 1、电容和电感1.1、电容(Capacitor)1.1.1、滤波功能1.1.2、储能功能 1.2、电感(Inductor)1.2.1、楞次定律1.2.2、储能作用 1、电容和电感 先讲一个概念,电流分为直流电和交流电,其中直流电再分为稳定直流电和脉动直流电。 直流电…

Softing为连接PROFIBUS网络提供多种接口产品方案

一 应用广泛的PROFIBUS网络 PROFIBUS是基于统一、标准且独立于应用的通信协议。据PI-China统计,在工业领域里早已有近5090万个PROFIBUS设备被安装在了超过900万节点中。PROFIBUS网络的广泛应用得益于PROFIBUS协议的开放性——用户可以很方便地在PROFIBUS网络的任意…

Redis在分布式场景下的应用

分布式缓存 缓存的基本作用是在高并发场景下对应服务的保护缓冲 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题: redis由于高强度性能采用内存 但是意味着丢失的风险单结点redis并发能力有限分布式服务中数据过多 依赖内存的redis 明显单机不…

JavaSE编程题目练习(三)

博客昵称:架构师Cool 最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。 作者简介:一名Coder,欢迎关注小弟! 博主小留言:哈喽!各位CSDN的uu们,我是你的小弟Cool&#xff0…

超低延迟直播技术路线,h265的无奈选择

超低延迟,多窗显示,自适应编解码和渲染,高分辨低码率,还有微信小程序的标配,这些在现今的监控和直播中都成刚需了,中国的音视频技术人面临着困境,核心门户浏览器不掌握在自己手上,老…

前言:自动化框架的设计模式

1、UI自动化框架的设计模式 自动化测试框架有很多种,常见的自动化框架分类如下: 在使用上面的自动化框架时,通常会结合使用分层思想,也就是一些自动化框架设计模式,今天重点分享一下UI自动化框架设计使用比较多的一种…

2023/10/30-LED灯驱动开发

k1.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include "head.h" char kbuf[128] {}; unsigned int major; //定义三个指针指向映射后的虚拟内…

STM32:TIM通道输入捕获

本文主要讲解如何使用TIMER通道的输入脉冲捕获功能。基于STM32F7的Timer2 Channel3来进行讲解。 配置时钟 Timer2的时钟频率&#xff0c;对应APB1 Timer。 分频设置为96-1&#xff0c;这样设置每次count计数&#xff0c;对应的时间为1us。Counter设置为最大即可&#xff0c;默…