操作系统 文件的物理结构和文件目录

先来说一下文件的文件目录。当我们建立一个文件之后,操作系统会给我们生成对应的记录文件信息的文件(记录文件)的文件名,文件的类型,文件大小,文件访问权限等属性和文件的物理地址。这就是文件的目录(你可以理解为文件夹)

每个文件都有一个文件目录,为了节省空间和访问效率,操作系统把所有文件的目录都整理到一个文件中,这个文件就是目录文件,专门存储文件的目录信息。

目录文件的存储结构如图:

这是一级目录的形式:属性记录文件的类型,大小等信息。物理地址对应的就是文件的物理地址,但是我们实际应用的时候会有多级目录。这样其中的物理地址记录的就是下层目录的地址。最后一层的记录的是文件的物理地址。如图:

这样就是实现了多级目录,不过这种是针对单用户的情况,我们对多用户的共享文件访问的同步比较复杂。因为这种情况对于多用户来说,系统会为其他用户复制一份一样的文件,这样的话对同步文件的访问就比较复杂。而且一次性把所有目录读到内存开销比较大,我们读到内存的就只需要文件名和文件的地址就ok,所以现在一般的操作系统不采用上述的文件目录的管理,以linux操作系统为例:采用记录inode结点的方式来管理目录方式如图:

这样在多用户共享文件的时候,其他用户的指针直接指向共享的Inode结点就实现了文件共享。

针对多用户来说有一种改进的策略,用一个基本文件目录来记录所有用户的信息。通过查询到的物理地址查看是文件还是目录。如果是文件,直接访问,如果是目录,再根据目录中的id号区基本文件目录查看物理地址。

如图:

这种方式更加节省内存,也大大提高访问文件的效率。

注意:文件共享是指多用户之间的,一般一台计算机是无法实现的。可以通过局域网共享文件,也可以通过网络共享文件,比如我们买了服务器,开发网站,我们让每个用户有登陆注册的功能,对于linux服务器来说,此时各种用户就会访问共享数据库的文件,当用户注册成功之后,linux操作系统就会为每一个用户在主文件目录中添加该用户的信息。

最终添加到MySQL数据库的表中。

了解完文件目录之后我们再来看看文件的物理结构。

我们知道根据目录文件的地址最终可以确定到文件最终在磁盘中的位置,但是为了高效且节省内存操作系统是怎么对文件进行管理呢?

物理文件的结构分类:

一、连续文件:

1、顺序文件:

磁盘上的文件按照物理结构连续来存储,根据每个文件的大小确定占多少个块(1块4kb)。然后在磁盘上找到连续的空间,在该文件的后面继续存放文件,我们只需要到固定的柱面的固定的磁道上寻找连续的文件时,只需要磁头移动到很小的距离就可以访问到。这样访问的速度块,访问容易,但是我们知道磁盘是机械运动,花费的时间比较大,而且读写是随机的,我们想要到指定的位置上写,还要先找到这块地址,磁盘上的文件删除时,整理磁盘碎片有需要很大的开销。所以这种文件的管理还是有一定的代价的。

2、连接文件:

①隐式连接:每个文件都存储指向下一个文件的指针,这样可以根据指针找到我们需要的数据。不过这种方法的弊端。当我们访问某个文件时,需要从头开始访问这个文件,然后一直链到这个文件,需要加载到很多不需要的文件地址到内存,造成性能上的浪费。

②显示连接:这种方式是对上面隐式链接的改进,我们把所有文件指向下一个文件的指针都拿出来放在一个专门用来存放指向下一个地址的文件里。这张表叫做文件分配表(Fat)。我们只需要访问这个表的对应文件的位置就可以得到文件的内存。大大提高了检索的效率。windows和DOS操作系统都采用这种显示连接的方式。

③索引文件:我们为每一个文件都建立一个索引块,每一个文件的索引信息都记录在索引块中,这样我们根据索引

中记录的地址来找到文件对应的实际物理地址,当我们的索引文件满的时候,就会有一个和该索引块一样的索引块来记录剩余的索引块,再用一个索引块来记录这两个索引块的位置,这样就达到了二级索引的效果。以此类推,我们可以实现多级索引的效果。至于对多级索引的组织结构的考虑,可以采用b树,b+树,红黑树等数据结构来实现大大提高检索的效率。

④NTFS文件系统:这种系统是微软公司开发的一款可恢复的,高效的文件管理系统。这种系统的磁盘组织是以‘簇’为分配和回收的基本单位。一簇的大小是2的整数次幂倍,不过一簇的大小一般是4k,这与我们的内存内存分配块的大小相契合。在这种系统下,磁盘里的文件都是以文件形式存在的,这种系统的特点就是安全,对数据保护做的很好。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181222G0KUND00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券