首页 理论教育 文章摘要计算机操作系统中的文件共享机制及链接计数功能

文章摘要计算机操作系统中的文件共享机制及链接计数功能

时间:2023-11-06 理论教育 版权反馈
【摘要】:此时,由任何用户对文件进行Append操作或修改,所引起的相应结点内容的改变,都是其他用户可见的,从而也就能提供给其他用户来共享。在索引结点中还应有一个链接计数count,用于表示链接到本索引结点上的用户目录项的数目。当count=3时,表示有三个用户目录项连接到本文件上,或者说是有三个用户共享此文件。当用户C创建一个新文件时,他便是该文件的所有者,此时将count置1。

文章摘要计算机操作系统中的文件共享机制及链接计数功能

文件共享是指不同用户(进程)共同使用同一份文件,这样在系统中只需保留该共享文件的一份副本,可以节省大量的外存空间,同时可以减少由于文件复制而增加的访问外存次数。

文件共享可以有多种形式,如绕弯路法、连访法,以及利用基本文件实现文件共享的方法,下面我们介绍当前常用的两种文件共享方法。

7.6.1 基于索引结点的共享方式

在树形结构的目录中,当有两个(或多个)用户要共享一个子目录或文件时,必须将共享文件或子目录链接到两个(或多个)用户的目录中,才能方便地找到该文件,如图7-15所示。此时该文件系统的目录结构已不再是树形结构,而是个有向非循环图(directed acyclic graph,DAG)。

图7-15 包含共享文件的文件系统

图7-16 基于索引节点的共享方式

如何建立B目录与共享文件之间的链接呢?如果在文件目录中包含了文件的物理地址,即文件所在盘块的盘块号,则在链接时,必须将文件的物理地址拷贝到B目录中去。但如果以后B或C还要继续向该文件中添加新内容,也必然要相应地再增加新的盘块,这须由附加操作Append来完成。而这些新增加的盘块,也只会出现在执行了操作的目录中。可见这种变化对其他用户而言是不可见的,因而新增加的这部分内容已不能被共享。

为了解决这个问题,可以引用索引结点,即诸如文件的物理地址及其他的文件属性等信息,不再是放在目录项中,而是放在索引结点中。在文件目录中只设置文件名及指向相应索引结点的指针,如图7-16所示。此时,由任何用户对文件进行Append操作或修改,所引起的相应结点内容的改变(例如增加了新的盘块号和文件长度等),都是其他用户可见的,从而也就能提供给其他用户来共享。(www.xing528.com)

在索引结点中还应有一个链接计数count,用于表示链接到本索引结点(亦即文件)上的用户目录项的数目。当count=3时,表示有三个用户目录项连接到本文件上,或者说是有三个用户共享此文件。

当用户C创建一个新文件时,他便是该文件的所有者,此时将count置1。当有用户B要共享此文件时,在用户B的目录中增加一目录项,并设置一指针指向该文件的索引结点,此时文件所有者仍然是C,count=2。如果用户C不再需要此文件,也不能将此文件删除。因为若删除了该文件,也必然删除了该文件的索引结点,这样便会使B的指针悬空,而B则可能正在此文件上执行写操作,此时将因此半途而废。但如果C不删除此文件而等待B继续使用,这样由于文件拥有者是C,如果系统要记账收费,则C必须为B使用此共享文件而付账,直至B不再需要。图7-17示出了B链接到文件上的前后情况。

图7-17 进程B链接前后

7.6.2 利用符号链实现文件共享

为使B能共享C的一个文件F,可以由系统创建一个LINK类型的新文件,也取名为F,并将F写入B的目录中,以实现B的目录与文件F的链接。在新文件中只包含被链接文件F的路径名。这样的链接方法被称为符号链接(symbolic linking)。新文件中的路径名则只被看作是符号链(symbolic link),当B要访问被链接的文件F且正要读LINK类新文件时,此要求将被OS截获,OS根据新文件中的路径名去读该文件,于是就实现了用户B对文件F的共享。

在利用符号链方式实现文件共享时,只是文件拥有者才拥有指向其索引结点的指针;而共享该文件的其他用户则只有该文件的路径名,并不拥有指向其索引结点的指针。这样也就不会发生在文件拥有者删除一共享文件后留下一悬空指针的情况。当文件的拥有者把一个共享文件删除后,其他用户试图通过符号链去访问一个已被删除的共享文件时,会因系统找不到该文件而使访问失败,于是再将符号链删除,此时不会产生任何影响。

符号链方式有一个很大的优点,是它能够用于链接(通过计算机网络)世界上任何地方的计算机中的文件,此时只需提供该文件所在机器的网络地址以及该机器中的文件路径即可。然而符号链共享方式的缺点是,当其他用户去读共享文件时,系统是根据给定的文件路径名逐个分量(名)地去查找目录,直至找到该文件的索引结点。因此在每次访问共享文件时,都可能要多次读盘。这使每次访问文件的开销很大,且增加了启动磁盘的频率。此外要为每个共享用户建立一条符号链,而由于该链实际上是一个文件,尽管该文件非常简单,却仍要为它配置一个索引结点,这也要耗费一定的磁盘空间。

上述两种链接方式都存在这样一个共同的问题,即每一个共享文件都有几个文件名。换言之,每增加一条链接就增加一个文件名。这在实质上就是每个用户都使用自己的路径名去访问共享文件。当试图去遍历(traverse)整个文件系统时,将会多次遍历到该共享文件。例如,当有一个程序员要将一个目录中的所有文件都转存到磁带上去时,就可能对一个共享文件产生多个拷贝。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈