设为首页 加入收藏

TOP

【操作系统】文件
2023-07-23 13:27:19 】 浏览:63
Tags:文件

写在前面

  本系列的文章是博主边学边记录的,可能不是特别的正确,因为会加上博主自己的理解,仅供参考。

正文:

1.文件目录

  文件目录是一种数据结构,用于标识系统中文件及其物理地址,供检索的时候使用。对于目录的管理有如下要求:

  1.实现按名存取

  2.提高对目录的检索速度

  3.文件共享

    在多用户系统中,应允许多个用户共享一个文件,这样只需在外存中保留一份该文件的副本供不同用户使用,以节省大量的存储空间,并方便用户和提高文件利用率。

  4.允许文件重名

    系统应该允许不同用户对不同文件采用相同的名字,以便用户按照自己的习惯给文件命名和使用文件。

2.文件控制块

  为了能对一个文件进行正确的存取,必须为文件设置用于描述和控制文件的数据结构。称为文件控制块---FCB

FCB包含的内容:

  1.文件名

  2.文件物理位置

  3.文件逻辑结构

  4.文件的物理结构

3.索引节点

  在查找文件的过程中,我们首先需要知道文件的目录,然后根据目录项中内容去匹配查找合适的文件。这里的目录项就是一个FCB

  但是查询过程中,使用到的仅仅是文件名,而不需要直接把整个FCB都给加载到内存,所以为了节省空间,提高查询速度,和目录的存储数量。抽出FCB的文件名,和指向文件位置的指针组合在一起,形成一个索引节点

这个索引节点也就是我们平常说的inodex节点。下面看图

  

 

 

上面说了一些基础概念,除了这以外,目录也是文件,只不过存储的是索引节点而已。目录的组织方式和文件的查找速度息息相关。下面我们来看下目录的组织方式:

1.单级目录

  顾名思义,整个文件系统只建立一张目录,每个文件占用一个目录项。目录项呢,包含文件名、扩展名、文件长度、类型、物理地址等。

新建文件:

  需要遍历目录表,保证文件名唯一,然后创建一个空白目录项,根据新文件的信息,创建一个新的目录项。

总体来说单机目录非常简单,但是这种方式不仅查找速度慢,也不能实现文件的重名和共享。所以不适用现在的环境。适用于单用户的环境。

 

2.两级文件目录

  这种组织方式主要使用在多用户系统中。首先建立一张目录,该目录项是用户名和指向该用户文件系统的地址。第二长目录就是对于当前用户文件系统管理的一张目录。

 

 

  在两级目录下,实现个各个用户的隔离,不同用户可以使用相同的文件名。但是这种方式并没有实现不同用户对同一文件的共享。

3.树形目录

不用说,这种目录肯定在现代os中普遍使用的目录组织方式。来看看它的构成:

 仅有一个根目录,其他子目录只能有一个父目录。每个目录作为一个节点,每个数据文件作为树叶。

 

 

 

路径名: 在树形结构目录中,从根目录到任何数据文件都有一条唯一的通路。在该路径上,从树的根开始,把全部目录文件名与数据文件名依次用"/"连接起来。构成该数据文件的唯一路径名。

当前目录:如果每访问一个文件都要从树根开始,这很麻烦。于是提出当前目录/工作目录的概念。每个进程对各文件的访问都相对于当前目录进行。

 

是不是很熟悉,其实当前目录的开始查找数据的路径,就是相对路径。而从根目录开始查找的路径就是绝对路径


当然了,树形目录实现了文件的共享,我们继续往下面看:

 

对于树形目录主要是用符号连接来实现,符号连接的基本思想是允许一个文件或者子目录有多个父目录,但是仅有一个作为主目录。

符号连接又是什么?

当想要共享文件B的时候,需要在当前目录中新建一个连接类型的文件F,这个文件F仅保存到B的路径名。

当用户通过当前目录访问B的时候,要读取这个连接文件F,然后系统根据F中保存的路径名去找到文件B。从而实现当前用户对文件B的共享。

看个书上的图,这个p就是link类型的文件

  

 

 

 

 

  总结:

  符号连接的方式实现文件共享的时候,只有主文件才拥有指向索引节点的指针,而共享该文件的其他用户只有该文件的路径名。并不指向其索引节点的指针。

  当主文件删除的时候,其他共享该文件的用户再去访问这个文件的时候,就会找不到,然后将符号连接删除即可。

  说到这了,博主突然恍然大悟,这不就是linux中涉及的软连接的概念嘛~。

 

好了,本文从逻辑上讲解了文件系统,那么文件在磁盘上的存储结构,我们并不了解。所以后期再写一篇关于文件物理结构方面的文章~

 

不骄不躁,保持学习

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇CVE-2020-1247漏洞分析 下一篇【操作系统】再谈文件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目