四、文件管理(一)文件系统基础

news2024/11/23 15:08:09

目录

1.1文件的基本概念

1.2文件控制块和索引结点

1.3文件的操作

1.4文件保护

1.5文件的逻辑结构

1.5.1无结构文件(流式文件) 

1.5.2有结构文件(记录式文件)

1.5.2.1顺序文件

1.5.2.2索引文件

1.5.2.3索引顺序文件

1.5.2.4直接文件或散列文件(Hash File)

1.6文件的物理结构

1.6.1连续分配

1.6.2链接分配

1.6.2.1隐式链接

1.6.2.2显式链接

1.6.3索引分配

1.6.3.1大文件索引块的三种处理方案

1.6.4混合索引分配


文件管理功能是专门管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。这不仅方便了用户,保证了文件的安全性,还可有效地提高系统资源的利用率。 

1.1文件的基本概念

文件是指具有文件名的若干相关元素的集合。元素通常是记录,而记录又是一组有意义的数据项的集合。文件可以是文本文档、图片、程序等。文件通常具有点+三个字母的文件扩展名,用于指示文件类型。在用户进行的输入、输出中,则以文件为基本单位。

可见,基于文件系统的概念,可以把数据组成分为数据项记录文件三级。

  • 数据项:是最低级的数据组织形式,数据项不可分割。
  • 记录:是一组相关的数据项的集合。组成数据的、有一定意义的基本单位,又称数据元素。
  • 文件:可分为有结构文件无结构文件。在操作系统中,通常将程序和数据组织成文件。其基本访问单元可以是字节或记录。文件可以长期存储在硬盘中,允许可控制的进程间共享访问,能够被组织成复杂的结构。

1.2文件控制块和索引结点

除了文件数据,操作系统还会保存与文件相关的信息,如所有者、创建时间等,这些附加信息称为文件属性文件元数据。 

文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项一个文件具有一个FCB

一个文件目录也被视为一个文件,称为目录文件

FCB(File Control Block)主要包含以下信息:

  • 基本信息,如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构。
  • 存取控制信息,包括文件拥有者的存取权限、核准用户的存取权限和一般用户的存取权限。
  • 使用信息,如文件创建时间、最后一次修改时间和最后一次存取时间等。

在检索目录的过程中,只需用文件名,当找到一个目录项(其中的文件名与要查找的文件名匹配)时,才需从该目录项中读出该文件的物理地址。 

因此有的系统(如UNIX)便采用了文件名文件描述信息分开的方法,使文件描述信息单独形成一个称为索引结点的数据结构,简称 i 结点(inode)。这种方法可以减少查找文件的平均启动磁盘次数,节省系统开销。

在文件目录中的每个目录项仅由文件名指向该文件所对应的索引结点指针构成。

1.3文件的操作

 

  • create系统调用:提供所需的外存空间大小;文件路径;文件名等参数;操作系统在外存中找到文件所需的空间创建该文件的目录项
  • delete系统调用:提供文件路径文件名等参数。操作系统找到文件对应的目录项,根据其信息回收文件占用的磁盘块,最后删除文件对应的目录项
  • read系统调用在读文件之前需要先打开文件,然后提供打开文件表中的索引号,读入多少数据,和数据放在内存中的位置。操作系统会从读指针指向的外存地址中,将指定大小的数据读入用户指定的内存区域。
  • write系统调用在写文件之前需要先打开文件,然后提供打开文件表中的索引号,写入多少数据,和写回外存的数据放在内存中的位置等参数操作系统会从用户指定的内存区域,将指定大小的数据写回写指针指向的外存地址。
  • open系统调用:提供文件存放路径文件名;要对文件的操作类型(如:r只读;rw读写等)操作系统找到文件对应的目录项将目录项复制到内存中的打开文件表。之后用户使用打开文件表的编号来指明要打开的文件。
  • close系统调用:操作系统将进程的打开文件表相应表项删除;回收打开文件表的打开计数器count减1,若count=0,则删除对应表项。

 打开文件表的索引号也称“文件描述符”,“文件句柄”(对应UNIX和Windows)

1.4文件保护

 

 注:访问控制表(Access Control List)是对访问矩阵按列(对象)划分而建立的。

1.5文件的逻辑结构

所谓“逻辑结构”,就是指在用户看来,文件内部的数据应该是如何组织起来的。而“物理结构”指的是在操作系统看来,文件的数据是如何存放在外存中的。 

1.5.1无结构文件(流式文件) 

无结构文件内部的数据就是一系列二进制流或字符流。 无结构文件将数据按顺序组织成记录并积累保存,它是有序相关信息项的集合,以字节 (Byte)为单位。 由于无结构文件没有结构,因而对记录的访问只能通过穷举搜索的方式。 但字符流的无结构文件管理简单,用户可以方便地对其进行操作。 所以,那些对基本信息单位操作不多的文件较适于釆用字符流的无结构方式,如源程序文件目标代码文件等。

1.5.2有结构文件(记录式文件)

由一组相似的记录组成,每条记录由若干个数据项组成。如:数据库表文件。通常由其中一个数据项作为主关键字可以唯一标识一个记录。根据各条记录的长度(占用存储空间)是否相等,又可分为定长记录可变长记录两种。

有结构文件按记录的组织形式可以分为:顺序文件索引文件索引顺序文件直接文件或散列文件(Hash File)

1.5.2.1顺序文件

顺序文件类似于数据结构中的线性结构(线性表),在物理上可以链式存储顺序存储

串结构:关键字排列无序,即无序线性表。顺序结构关键字顺序排列,即有序线性表。

链式存储、顺序存储定长记录、可变长记录串结构、顺序结构。这三类限制理论上有八种组合。

重点关注

  • 只有顺序存储才有可能支持随机存取
  • 可变长记录不能随机存取,要查找第 m 条记录必须顺序地查找所有的前m-1条记录,从而获得相应记录的长度L,进而计算出第 m 条记录的首址。
  • 串结构即无序线性表只能顺序查找,顺序存储的定长顺序结构即有序顺序表支持折半查找。

注:考试中默认顺序文件是指顺序存储的顺序文件。 

1.5.2.2索引文件

索引文件主要是为了应对可变长记录不能随机存取。索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高的场合。

索引表本身是定长记录的顺序文件。因此可以随机存取。可将关键字作为索引号内容,若按关键字顺序排列(顺序结构),还可支持折半查找。

1.5.2.3索引顺序文件

索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。 

争议

  • 其思想和分块查找(索引顺序查找)是类似的。
  1. 分块查找的索引表必须是组内无序,组间有序,原因可能是分块查找用索引表的相邻关键字来划分出组内关键字范围。而这里索引顺序文件给出的关键字本身可以映射一种范围因而无需块间有序
  2. 索引顺序文件的索引表中同一个组中的关键字可以无序,但组与组之间的关键字必须有序。解释:就算是以姓名首字母来作为关键字检索,其底层硬件也是0/1二进制码,必须是有序的才方便划分组内关键字范围。

王道书上描述的是第二种,王道视频课如上图所述的是第一种。实际上遇见此类问题时不能在这里被坑了即可。

为进一步提高检索速度,可以为顺序文件建立多级索引表。

1.5.2.4直接文件或散列文件(Hash File)

给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件,没有顺序的特性。


小结:顺序文件适用顺序查找;顺序存储、顺序结构的定长顺序文件适用折半查找;索引顺序文件适用分块查找;直接文件(散列文件)适用散列(哈希)查找。

1.6文件的物理结构

 

1.6.1连续分配

连续分配方式要求每个文件在磁盘上占有一组连续的块。

缺点:文件长度不宜动态增加,删除和插入记录麻烦;会产生外部碎片。

优点:作业访问磁盘时需要的寻道数寻道时间最小

1.6.2链接分配

链接分配是一种采用离散分配的方式。它消除了磁盘的外部碎片,对文件的插入、删除和修改操作也十分方便。 

1.6.2.1隐式链接

只支持顺序访问,不支持随机访问

可以将几个盘块组成簇(cluster),按簇而不按块来分配,这样做增加了内部碎片,减少了磁盘访问时间。

 1.6.2.2显式链接

把用于链接文件各物理块的指针显式地存放在一张表中。即文件分配表(FAT,file allocation table) 

 

1.6.3索引分配

索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似页表)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块

注意:显式链接分配中一个磁盘对应一个文件分配表FAT,索引分配中一个文件对应一个索引表。两者都不需要访问磁盘。

1.6.3.1大文件索引块的三种处理方案

原理同分页管理方式中页表太长这一问题。

  • 链接方案:将多个索引块链接起来存放。访问后面的索引块必须先读入前面的索引块。
  • 多层索引:建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。
  • 混合索引:即下面1.6.4介绍的一种文件分配方式,也能解决大文件索引块过大的问题。

 

1.6.4混合索引分配

是多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)

 

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

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

相关文章

数据库之架构

一、数据库架构原则 高可用 高性能 一致性 扩展性 二、常见的架构方案 方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb 1、高可用分析:高可用,主库挂了,kee…

[ vulhub漏洞复现篇 ] Apache Solr RemoteStreaming 文件读取与SSRF漏洞 (CVE-2021-27905)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

C++11特性-易用性改进

1.字符串的原始字面量 表达式:R"xxx(原始字符串)xxx"或者R"(原始字符串)",xxx要写的话,必须一样 //两种申明形式string a "aaa";//没有转义的时候就是原始字面量string b R"aaa(…

总体设计阶段复习

总体设计总体设计(概要设计/初步设计):确定系统模块及相互关系,划分程序,文件,数据库,文档等物理元素设计原理:启发规则图形工具:面向数据流设计方法(SD)总体设计(概要设计/初步设计):确定系统模块及相互关系,划分程序,文件,数据库,文档等物理元素 系统设计阶段 数据流图分析方…

一篇五分生信临床模型预测文章代码复现——Figure 4-6 临床模型构建(六)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

FineReport智能数据图表- 文本域控件

1. 概述 1.1 版本 报表服务器版本 11.0 1.2 应用场景 1.2.1 填报控件 填报报表中可以通过该控件输入多行文本信息,录入填报的数据,如下图所示: 1.2.2 参数控件 参数面板处可以通过该控件输入多行文本信息,键入查询参数&#…

【车载开发系列】UDS诊断---安全访问服务($0x27)

【车载开发系列】UDS诊断—安全访问服务($0x27) UDS诊断---安全访问服务($0x27【车载开发系列】UDS诊断---安全访问服务($0x27)一.概念定义二.安全控制过程三.报文格式1)请求种子2)发送密钥3)否定响应四.否定响应码列表五.参数定义六.注意事项…

JavaScript基础学习

文章目录什么是JavaScriptJavaScript 运行过程JvaScript 的组成JavaScript的三种书写模式行内式内嵌式外部式JavaScript的输出输出方式输入: prompt输出: alert输出: console.logJavaScript的一些基础语法变量的使用如何理解JS的动态类型(弱类型)基本数据…

SSM整合:mybatis层-P17

首先构建新的项目。 MYSQL: 在mysql中创建我们需要的表 CREATE DATABASE ssmbuild;USE ssmbuild;DROP TABLE IF EXISTS books;CREATE TABLE books ( bookID INT(10) NOT NULL AUTO_INCREMENT COMMENT 书id, bookName VARCHAR(100) NOT NULL COMMENT 书名, bookCo…

【深入浅出Spring原理及实战】「IOC容器初始化」彻底让你明白和理解运行原理和源码流程

前言介绍 本篇文章篇幅较大,希望读者可以慢慢阅读,建议收藏,分多次阅读学习。 学习源码的过程当中,有几点建议: 一定要学会抓重点,归纳核心类、核心方法、核心步骤; 分析源码我们不需要太过于纠…

MongoDB 存储引擎

简单回顾 上次我们说到了关于 mongodb 的集群,分为主从集群和分片集群,对于分片集群中的分片这里需要注意如下几点,一起来回顾一下: 对于热点数据某些分片键(分片键是集合中每个文档中存在的索引字段或复合索引字段&a…

qt历史数据管理模块(模块化程序)功能块复制直接使用不冲突

一、前言 qt对历史数据管理部分个人总结的模块化程序,直接按照步骤复制粘贴程序,直接实现历史数据管理功能,无需花费脑筋在理清各个思路,适合快速编写组装程序 二、环境 windows qt5.7 sqlite3 三、正文 建议参照前文&…

【uni-app】uni-app之云开发uniCloud跨全栈开发笔记总结,包括一个 schema自动生成代码小案例(附详细截图)

1- 前言 本文主要讲解如何使用uni-app 和 uniCloud 云开发,实现小案例,不需要后端,来实现全栈开发。 2- 概念 2.1 什么是uni-app uni-app 是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、…

对信息系统生命周期各阶段进行风险评估的要点汇总

概述 风险评估应贯穿于评估对象生命周期 各阶段中。评估对象生命周期各阶段中涉及的风险评估原则和方法昆一致的,但由干各阶段实施内容对象、安全需求不同.使得风险评估的对象、目的、要求等各方面也有所不同。在规划设计阶段,通过风险评估以确定评估对…

pytorch笔记(九)转置卷积、膨胀卷积

Transposed Convolution (转置卷积) 别名:Fractionally Strided Convolution (小数步长的卷积)、Deconvolution(逆/反卷积) 作用:upsampling(上采样) 模拟: PS:不是恢复原始值(因为一般情况下矩阵不可逆,无法等式左右两边同乘矩阵的逆得到原始矩阵) 转置卷积的…

为什么分布式系统这么火?

做Java的升职空间有限,可以说如果不想一辈子做程序员,只能往其他方向进行拓展,比如做到产品经理之类的或者技术总监。 可如果还是想做和技术相关的职业,那么架构师是很好的一步。 可是要如何做一名优秀的架构师呢? …

每天五分钟机器学习:经典的机器学习PCA的核心——特征分解技术

本节重点 本节我们将学习特征分解,特征分解是矩阵分析中非常重要的概念,它也可以应用到PCA算法中,本节先讲解什么是特征分解,然后讲解特征分解在PCA算法中的应用。 数学知识准备 如上所示是方差的定义,方差是度量一组数据的分散程度 如上所示是方差的定义,协方差是…

BSP板机支持包、linux启动分析、ARM裸机编程

文章目录一、BSP二、驱动驱动的基本要素三、启动分析1.uboot2.uboot的作用3.uboot相关命令关键的内容:1)bootargs,启动参数2)启动命令3)修改启动延时时间4)复位开发板5)修改本地IP地址6&#xf…

Matlab群体智能优化算法之大鲹鱼优化算法(GTO)

Giant Trevally Optimizer : A Novel Metaheuristic Algorithm for Global Optimization and Challenging 一、灵感来源二、算法的初始化三、GTO的数学模型  Phase1:广泛搜索  Phase2:选择区域  Phase3:攻击四、流程图五、伪代码六、实…

[附源码]计算机毕业设计四川景区管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…