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

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

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

目录

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 的公共界面来索引,它们对系统核心和用户进程来说是透明的。