[架构之路-164]-《软考-系统分析师》-3-操作系统基本原理-文件系统(文件的逻辑组织、文件的物理组织、硬盘空间管理、分布式文件系统)

news2025/1/22 9:12:43

目录

3 . 4 文件系统

3.4.1文件的组织结构

1 . 逻辑结构

2 . 物理结构

3 . 树形文件结构

3.4.2 硬盘存储空间管理

1 . 空闲文件目录

2 . 空闲块链

3 . 位示图法

4 . 成组链接法

3.4.3分布式文件系统

1. D F S 的特点

2. DFS 的组成

3. DFS 的架构


3 . 4 文件系统

文件是操作系统进行信息管理的基本单位,对软件资源的管理是通过文件系统来实现的。

为了实现这些功能,操作系统必须考虑文件目录的建立和维护、存储空间的分配和回收、信息的编址方法和存储次序,以及如何检索用户信息等问题。

文件是组织数据的一种方式,通过文件,把相互关联的数据有效地组织在一起,并通过硬盘或Flash永久性存储起来。

文件系统管理就是解决:如何逻辑上(在内存中)组织和管理数据,如何把数据按照集中或分散的方式存储在硬盘中,如何实现整体性的逻辑数据与分散的物理数据进行映射。如何管理(增加、删除、修改、查找)文件系统中的各种文件。

3.4.1文件的组织结构

文件的组织结构是指文件的构造方式,通常可以从两个不同的角度来对它进行考察。其中,从用户角度看到的文件称为文件的逻辑组织,从系统角度看到的文件称为文件的物理组织

1 . 逻辑结构

文件的逻辑结构(逻辑文件)是指用户概念中的文件,它独立于物理存储。

逻辑文件有两种形式,分别是无结构的流式文件和有结构的记录式文件。

( 1 ) 流式文件。

流式文件是相关信息项的集合,基本单位是字节(或字),它的管理比较简单,用户可以很方便地对其进行操作。因此,那些对基本信息单位操作不多的文件较适用于采用流式文件结构,例如,源程序文件、目标代码文件等。在 U N I X 系统中,所有的文件都被看成是流式文件,系统不对文件进行格式处理。

(2) 记录式文件。

记录式文件是数据记录的集合,其基本单位是逻辑记录,记录的长度有等长或变长之分。对记录式文件,所有记录描述一个实体集,有相同或不同数目的数据项。流式文件也可视为记录式文件的特例,即每个记录只有1个字节(或字)。

记录式文件的逻辑组织有三种形式,

  • 一种是顺序存储方式,即记录按序排列;
  • 一种是直接存储方式,即用户对记录的存储是不按顺序的,可以指定某一记录进行存储;
  • 还有一种是按键存取方式,即用户对文件内容的访问不是根据记录的编号或地址,而是根据记录的某项内容(关键字)来进行的。

2 . 物理结构

文件物理结构(物理文件)是指文件在存储介质上的组织方式,它依赖于物理的存储设备和存储空间,可以看作是相关物理块的集合。由于物理结构决定了信息在存储设备上的存放位置和方式, 为此,信息的逻辑位置到物理位賈的映射关系也是由物理结构决定的。

常用的文件物理结构有顺序结构链接结构索引结构

(1) 顺序结构(连续结构)。

逻辑上连续的记录构成的文件分配到连续的物理块中

这种方式管理简单,存储速度快,空间利用率低,但文件记录插入或删除操作不方便,只能在文件末尾进行

(2) 链接结构(串联结构)。

将信息存放在非连续物理块中,每个物理块均设有一个指针,指向其后续的物理块,从而使得存放同一文件的物理块链接成一个串联队列。

链接方式又分为显式链接隐式链接

显式链接的链接指针在专门的链接表中,

隐式链接的指针在存放信息的物理块中。

链接结构空间利用率高,且易于文件扩充,但查找效率比较低。

( 3 ) 索引结构(随机结构)。

每个文件建立一个索引表,其中每个表项指出信息所在的物理块号,表目按逻辑记录编写顺序或按记录内某一关键字顺序排列。

对于大文件,为检索方便,可以建立多级索引,还可以将文件索引表也作为一个文件(称为索引表文件)。该方式可以满足文件动态增长的要求且存取方便,但建立索引表增加了存储空间的开销对 多级索引,访问时间开销较大。
例如,在 U N I X 系统中,文件的物理结构采用直接、一级、二级和三级间接索引技术,假如索引节点有13个地址项,并且规定地址项0〜 9 采用直接寻址方法,地址项10采用一级间接寻址,地址项11采用二级间接寻址,地址项12采用三级间接寻址。每个盘块的大小为1 K B ,每个盘块号占4 B , 那么,对于访问文件的第356 168 B 处的数据来说;先进行简黾换算356 168/1024& 348 K B , 由于地址项0〜 9 可直接寻址10个物理盘块,每个物理块大小为1 K B , 所以访问文件的前10 K B 范围的数据时是直接寻址。地址项 10釆用一次间接寻址,即地址项10里存放的是一级索引表的地址,因为每个盘块号占4 B , 该索引表可存放1024/4=256个物理块的地址,所以当访问文件为10〜 266 K B 之间的数据时是一次间接寻址。由于要访问的数据是348 K B , 所以还有348-266=82 K B 。显然地址项11足够存取这些数据,因此,最多就在地址项11而无须存取地址项12,即只需要二级间接寻址。

3 . 树形文件结构

文件控制块的集合称为文件目录,文件目录也被组织成文件,常称为目录文件。文
件管理的一个重要方面是对文件 B 录进行组织和管理。文件系统一般采用一级目录结构、
二级目录结构和多级目录结构,例如, U N I X 和 W i n d o w s 系统都采用了多级树形目录结
构,如图3-7所示。

在图3-7中,主文件目录称为根目录,根目录下的子目录称为中间节点,子目录下的文件称为叶节点。

从根目录出发到某文件的通路上所有各级子目录名和该文件名的顺序组合称为文件的路径名。每个文件都有一个唯一的路径名。为操作方便,减少访问时间,系统给用户指定一个当前目录,若用户欲访问某文件,就不用给出全部路径,只需给出从当前目录到欲査找文件之间的相对路径名。

树形目录结构的特点是层次清楚,解决了文件重名问题,提高了查找的效率,同时也方便用户共享文件。

3.4.2 硬盘存储空间管理

一个大容量的文件存储器(硬盘)为系统本身和许多用户所共享。为方便用户“按名存取”所需文件,系统应能自动为用户分配并管理系统和用户的存储空间。为此,必须解决以下三个问题:

登记空闲区的分布情况、按需要给一个文件分配物理存储空间(不是内存空间),以及收回不再保留的文件所占的存储空间。

以上问题都可以归结为磁盘空闲区的管理问题,常用的磁盘空闲区管理方法有空闲文件目录、空闲块链、位示图和成组链接法。

1 . 空闲文件目录

磁盘空间上一个连续未分配区域成为空闲文件。//必须连续、必须未使用

系统为所有这些空闲文件单独建立一个目录。对每个空闲文件,在这个目录中建立一个表目。表目的内容包括第一个空闲块地址(物理块号)和连续的空闲块个数等。

在进行存储空间的分配时,也可采用首次适应和最佳适应等算法,而冋收时,同样要进行连续空闲区的合并。

这种方法的优点是空闲区的分配和回收都相当容易,但用来管理空闲块的空闲表(空闲目录)需要占用大量的存储空间。

2 . 空闲块链

空闲块链是将所有空闲块链接指针索引结构组成一个空闲文件(而不是一个空闲目录+无数个空闲文件)

释放和分配空闲块都以在链首进行,只需要修改几个有关的链接字。

该方法只要求在内存中保存一个指针,令它指向第一个空闲块,其优点是实现简单,需要很少的内存和硬盘空间,但工作效率低,因为每当在链上增加或移去空闲块时,都需要对空闲块链表做较大的调整,从而会有较大的系统开销。

一种改进方法是将空闲块分成若干组,再用指针将组与组链接起来,这种管理空闲块的方法称为成组链接法,它在进行空闲块的分配与回收时要比空闲块链法节省时间。组内通过空闲目录的方式进行组织。

3 . 位示图法

位示图是利用二进制的1位来表示文件存储空间中的1个块的使用情况。一个 m 行、« 列的位示图,可 用 来 描 述 块 的 文 件 存 储 空 间 ,当行号、列号和块号都是从〇开始编号时,第 /行、第7•列的二进制位对应的物理块号为/ XAI +/。如 果 “〇”表示对应块空闲,“1”表示对应块已分配,则在进行存储空间的分配时,可顺序扫描位示图,从中找出一个或一组值为“0”的二进制位,将对应的块分配出去,并将这些位置“1”• ,而在回收某个块时,只需找到对应的位,并将其值清零即可。位示图法适合于所有的分配方式,它简单易行,而且,位示图通常较小,故吋将其读入内存,从而进一步加快文件存储空间分配和回收的速度。

4 . 成组链接法

成组链接法是对空闲块链法的一种改进,它将一个文件卷的所有空闲盘块按同定大小 (例如,每组 m 块)分成若干组,并将每一组的盘块数和该组所有的盘块记入前一组的最后一个盘块中,第一组的盘块数和该组的所有盘块号则记入超级块的空闲盘块中。

当系统要为用户分配文件所需的盘块时,若第一组不只一块,则将超级块中的空闲盘块数 减 1 , 并将空闲盘块栈顶的盘块分配出去;若第一组只剩一块且栈顶的盘块号+是结束标记“0”,则先将该块的内容(记录有下-•组的盘块数和盘块号)读到超级块中,然后再将该块分配出去;否则,若栈顶的盘块号为结束标记“0”,则表示该磁盘 h 已无空闲盘块可供分配。在系统回收空闲盘块时,若第一组不满 w 块,则只需将冋收块的块号填入超级块的空闲盘栈顶,并将其中的空闲盘块数加1 ; 若第一组己有 m 块,则必须先将超级块屮的空闲盘块数和空闲盘块号写入回收块中,然后将盘块数和回收块的块号记入超级块中。
值得注意的是,超级块中的空闲盘块栈是临界资源,对该栈的操作必须互斥地进行。系统需要为空闲盘块设置一把“锁”,并通过上锁和解锁来实现对空闲盘块栈的操作。成组链接法除了第一组空闲盘块外,其余空闲盘块的登记不占额外的存储空间,而超级块(即文件卷的第一块)已在安装磁盘时拷入内存,因此,绝大部分的分配和1 H ]收工作可在内存中进行,从而使之具有较高的效率。

3.4.3分布式文件系统

在计算机网络中,每个节点运行一个包括自己的文件系统本地操作系统,称为本地文件系统 (Local File System , L F S )。 L F S 负责将磁盘块分配给文件,并维护文件分配表等信息,提供诸如新建文件、读文件、写文件和删除文件等+同的服务。它为所有本地 目录和文件维护目录结构,允许用户更改自己的工作目录,列出本地目录中的所有文件,以及实现对本地文件和目录的访问控制。

当用户想要对远程文件执行所有这些功能时,就会出现问题,分布式文件系统(Distributed File System , D F S ) 正好可以提供这种功能。 D F S 是分布式系统的重要组成部分,它允许通过网络来互连,使不同机器上的用户共享文件的一种文件系统。

D F S 不是一个分布式操作系统,而是一个相对独立的软件系统,称为分布式文件系统,被集成到分布式操作系统中,并为其提供远程访问服务。

1. D F S 的特点

D F S 具有网络透明性和位置透明性。

网络透明性是指用户访问文件服务器上的文件的操作如同访问 L F S 的操作一样;

位置透明性是指用户通过文件名访问文件,但并不知道该文件在网络中的位置,文件的物理位置改变了,但只要文件的名字不变,用户仍可进行访问。

在分布式系统中,区分文件服务和文件服务器的概念是非常重要的。

文件服务是文件系统为其用户提供的各种功能描述,例如,可用的原语,以及它们所带的参数和执行的动作等。对于用户来说,文件服务精确地定义了它们所期望的服务,而不涉及实现方面的细节。实际上,文件服务提供了文件系统与用户之间的接口;

文件服务器是运行在网络中某台机器上的一个实现文件服务的进程,一个系统可以有一个或多个文件服务器,但用户并不知道有多个文件服务器及它们的位置和功能。用户所知道的只是当调用文件服务中某个具体过程时,所要求的工作以某种方式执行,并返回所要求的结果。

2. DFS 的组成

D F S 为系统中的客户机提供共享的文件系统,为分布式操作系统提供远程文件访问服务

分布式操作系统通常在系统中的每个机器上都有一个副本,但 D F S 并不一样,它由两部分组成,分别是运行在服务器上的 D F S 软件和运行在每个客户机上的 D F S 软件

这两部分程序代码在运行中都要与本机操作系统的文件系统紧密结合,共同起作用。

现代操作系统都支持多种类型的文件系统, D F S 将通过虚拟文件系统和虚拟节点与 L F S 交互作用。

3. DFS 的架构

D F S 目前大多采用客户/服务器架构,客户是要访问文件的计算机,服务器是存储文件并且允许用户访问这些文件的计算机。

D F S 中需要解决的一个问题是命名的透明性,通常有三种解决方式,

第一种方式是通过机器名+路径名来访问文件;

第二种方式是将远程文件系统安装到本机文件目录上,这样,用户就可以自己定制文件名;

第三种方式是让所有机器上看起来有相同的单一名字空间,这种方式实现难度较大。

在客户/服务器架构中,客户使用远程方法访问文件,服务器则响应客户的请求。

有些系统中的服务器能提供更多的服务,它不仅响应客户的请求,还对客户机中的高速缓存的一致性作出预测,一旦客户数据变为无效时便通知客户。

3.4.4 虚拟文件系统

虚拟文件系统(VFS)是由Sun microsystems公司在定义网络文件系统(NFS)时创造的。

它是一种用于网络环境的分布式文件系统,是允许和操作系统使用不同的文件系统实现的接口。

虚拟文件系统(VFS)是物理文件系统与服务之间的一个接口层,它对Linux的每个文件系统的所有细节进行抽象,使得不同的文件系统在Linux核心以及系统中运行的其他进程看来,都是相同的。

严格说来,VFS并不是一种实际的文件系统。它只存在于内存中,不存在于任何外存空间。VFS在系统启动时建立,在系统关闭时消亡。

Linux就支持虚拟文件系统,虚拟文件系统最重要的特征之一就是支持多种物理文件系统,使其更加灵活,从而与许多其它的操作系统共存。Linux支持ext,ext2,xia,minix,umsdos,msdes,fat32 ,ntfs,proc,stub,ncp,hpfs,affs 以及 ufs 等多种文件系统。

为了实现这一目的,Linux 对所有的文件系统采用统一的文件界面,用户通过文件的操作界面来实现对不同文件系统的操作。对于用户来说,我们不要去关心不同文件系统的具体操作过程,而只是对一个虚拟的文件操作界面来进行操作,这个操作界面就是 Linux 的虚拟文件系统(VFS ) 。形象地说,Linux 的内核好象一个 PC 机的母板,VFS 就是上面的一个插槽,具体的文件系统就是一块块的接 121 卡。因此,每一个文件系统之间互不干扰,而只是调用相应的程序来实现其功能。在 Linux 的内核文件中,VFS 和具体的文件系统程序都放在 Linux\FS 中,其中每一种文件系统对应一个子目录,另外还有一些共用的 VFS 程序。在具体的实现上,每个文件系统都有自己的文件操作数据结构file—operations。所以,VFS 作为 ILinux内核中的一个软件层,用于给用户空间的程序提供文件系统接口,同时也提供了内核中的一个抽象功能,允许不同的文件系统很好地共存。

VFS 使 Linux 同时安装、支持许多不同类型的文件系统成为可能。VFS 拥有关于各种特殊文件系统的公共界面,如超级块、inode、文件操作函数入口等。实际文件系统的细节,统一由 VFS 的公共界面来索引,它们对系统核心和用户进程来说是透明的。

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

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

相关文章

腾讯云服务器TencentOS系统安装宝塔Linux面板命令

腾讯云服务器TencentOS Server操作系统安装宝塔Linux面板命令选择CentOS安装脚本即可,TencentOS用户态环境与CentOS保持兼容,在CentOS上开发的应用程序可直接在TencentOS Server上运行。腾讯云百科分享腾讯云服务器TencentOS操作系统安装宝塔Linux面板命…

客户端ack模块的实现

文章目录背景第一版设计第二版设计第三、四版设计写在最后背景 所谓客户端ack模块是在我们推送服务中一个技术需求,本文主要介绍其迭代过程。 首先简单介绍下推送服务的架构,如下图。用户请求ws服务,建立ws长连接,并通过login和…

类和对象(C++11)

目录 一、类的定义 1.定义与声明放一起 2.定义与声明分开 二、类的访问限定符及封装 1.类的访问限定符 2.类的封装 三、类的实例化 四、类对象 1.类对象的存储方式 2.计算类对象的大小 面试题 1.结构体怎么对齐? 为什么要进行内存对齐? 2.如…

Python数据结构与算法-树

一、树的概念详情见 https://blog.csdn.net/little_limin/article/details/129845592 Python数据结构与算法-堆排序(NB组)—— 一、树的基础知识二、树的实例:模拟文件系统1、树的存储树结构也是链式存储的,与链表的结构相似&…

java通过URLClassLoader类加载器加载外部jar

相信在实际工作中,大家可能会遇到这种需求,这个jar是外部的,并没有添加到项目依赖中,只能通过类加载器加载并调用相关方法。 这种jar加载,其实也简单,我们通过普通的URLClassLoader就可以加载。代码如下所示…

netfilter filter表

iptables是linux下常用的一个防火墙软件,可以实现对网络访问的各种限制。iptables相当于防火墙的客户端,与用户进行交换,其后台依赖于内核的netfilter模块。iptables的各种配置,最终都是netfilter模块来实现的。 iptables分为4个…

Python-DQN代码阅读(12)

目录 1.代码 1.1代码解读 1.2 代码分解 1.2.1 latest_checkpoint tf.train.latest_checkpoint(checkpoint_dir) 1.2.2 saver.restore(sess, latest_checkpoint) 1.2.3 sess.run(tf.global_variables_initializer()) 1.2.4 deep_q_learning() 1.3 输出结果 1.4 问题 1…

v-for比v-if优先级更高?

前言 v-if和v-for哪个优先级更高呢?这是面试官常常问到的一个问题,如果是在三年前,我会毫不犹豫的回答当然是v-for哩,但在3202的今天,如果还这么答,显然是低估了前端技术的日新月异啰。下面我们就来结合编…

第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 E 题

颜色平衡树问题描述格式输入格式输出样例输入样例输出评测用例规模与约定解析参考程序问题描述 格式输入 输入的第一行包含一个整数 n ,表示树的结点数。 接下来 n 行,每行包含两个整数 Ci , Fi,用一个空格分隔,表示第 i 个结点 …

动态内存管理【下篇】

文章目录⚙️5.C/C程序的内存开辟⚙️6.柔性数组🔔6.1.柔性数组的特点🔔6.2.柔性数组的使用⚙️5.C/C程序的内存开辟 C/C程序内存分配的几个区域: 🔴1.栈区(stack):在执行函数时,函数…

2023软件测试最难求职季,哪些测试技能更容易拿到offer?

在一线大厂,没有测试这个岗位,只有测开这个岗位。这几年,各互联网大厂技术高速更新迭代,软件测试行业也正处于转型期。传统的功能测试技术逐步淘汰,各种新的测试技术层出不穷,测试人员的薪资也水涨船高。与…

【刷题之路】LeetCode 2389. 和有限的最长子序列

【刷题之路】LeetCode 2389. 和有限的最长子序列一、题目描述二、解题1、方法——二分法1.1、思路分析1.2、代码实现一、题目描述 原题连接: 2389. 和有限的最长子序列 题目描述: 给你一个长度为 n 的整数数组 nums ,和一个长度为 m 的整数数…

UR5构型机械臂正逆运动学

前言 整理之前的一个项目,当时看着一个博客硬生生计算了差不多一个星期。尝试用MatLab符号推导工具箱化简一部分工作。我使用的大象机器人一款开源入门级协作机器人产品myCobot,开发文档十分完善,但是有部分技术没有开源,如正逆运…

数据分析师 ---- SQL强化(2)

数据分析师 ---- SQL强化(2) 文章目录数据分析师 ---- SQL强化(2)题目一:SQL实现文本处理题目二:语种播放量前三高所有歌曲总结:题目一:SQL实现文本处理 现有试卷信息表examination_info(exam_id试卷ID, tag试卷类别,…

钢铁侠材质制作——2、线条轮廓部分的制作

钢铁侠Unlit光照Shader,三种效果变化返回目录大家好,我是阿赵,这里是钢铁侠材质制作第二部分,线条轮廓部分的制作 为了实现这个效果,可以把细节拆分成以下几个部分: 1、轮廓光 1.效果分析 这是一个很基…

时间序列 | MATLAB实现CNN-BiLSTM-Attention时间序列预测

时间序列 | MATLAB实现CNN-BiLSTM-Attention时间序列预测 目录时间序列 | MATLAB实现CNN-BiLSTM-Attention时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现CNN-BiLSTM-Attention时间序列预测,CNN-BiLSTM结合注意力机制时间序列预…

语言模型ChatGPT,为什么能引领各行各业的AI技术革命

为什么ChatGPT这样一个语言模型的发展能引发所有行业的AI技术革命呢? 答案就在于它能理解我们的自然语言, 并能将我们的语言转换成计算机能够完全理解的特征。 自然语言与计算机理解 ChatGPT之所以能引领技术革命,关键在于它能理解我们的…

GPT、科技、人类的生产、知识与未来(上)

本文将继续结合GPT探讨人工智能技术升级可能对人类社会带来的影响。主要还是侧重历史、社会、文化、经济、政治等角度。 问题的提出:ChatGPT等工具会提高人的工作效率和产出。但它会让人类使用者自身变得更“聪明”,还是“更笨”?更“强”&am…

CVE-2017-16995 Ubuntu 16.04 漏洞复现

目录 1.背景介绍 2.目的: 3.环境 4.操作: 工具下载地址: 1.背景介绍 Ubuntu 16.04版本存在本地提权漏洞,该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中,当用户提供恶意BPF程序使eBPF验证器模块产生计算错误&…