文件管理

一、为何需要文件系统?

  磁盘具有大容量、低成本以及持久化的特点,即使发生断电,磁盘上的数据也不会丢失(而内存是易失性)。但是,对于一般用户而言,使.0用磁盘是非常苦难的,因为他们不知道如何驱动一个磁盘,以及计算数据在磁盘上的存放位置。

  操作系统是一个魔术师,其提供给用户的就是各种幻想:抽象。进程抽象的是CPU,虚拟内存抽象的是内存,对于磁盘来说,操作系统提供给用户的帮助就是在磁盘外面包裹一层容易使用的抽象,用户直接与这层抽象打交道,而无需了解磁盘的技术细节。在操作系统中,这层为磁盘提供的抽象就是:文件系统

二、文件系统的基本概念

1、文件系统是什么

  文件系统是操作系统为磁盘和用户之间提供的一个抽象,它是一个子虚乌有的,看不见摸不着的接口,如下图所示:
在这里插入图片描述

  • 文件系统使得用户能够很方便的使用磁盘:将用户从数据存放的细节中解放出来,用户不需要知道内容存放在什么地方,也不需要知道如何存放,更不需要知道磁盘到底是如何工作的。

  • 简单地说,文件系统是将磁盘物理特性转换为用户看到的路径名和文件名用户对磁盘进行访问只需要给出文件名和路径名即可,而无需知道磁柱、磁道、扇面、数据块等信息。

  • 文件系统的主要特性就是存储大量的信息多个进程可以同时访问一个文件,进程结束也不会影响文件的持续存在。

  在系统运行时,计算机以进程为基本单位进行资源的调度和分配;而在用户进行的输入、输出中,则以文件为基本单位。大多数应用程序的输入都是通过文件来实现的,其输出也都保存在文件中,以便信息的长期存及将来的访问。当用户将文件用于应用程序的输入、输出时,还希望可以访问文件、修改文件和保存文件等,实现对文件的维护管理,这就需要系统提供一个文件管理系统,操作系统中的文件系统(File System)就是用于实现用户的这些管理要求。

2、文件的结构

  • 数据项:数据项是最低级数据组织形式。分为基本数据项(用于描述一个对象某种属性的字符集,是数据组织中可以明明的最小逻辑数据单位,即原子数据,又称为数据元素或字段)和组合数据项(由若干个基本数据项组成)。

  • 记录:是一组相关数据项的集合,用于描述一个对象在某方面的属性,为了能够唯一标识一个记录,需要在记录中确定一个或集合数据项,把他们的集合称为关键字,关键字是能够唯一标识一个记录的数据项。

  • 文件:文件是具有文件名的一组相关元素的集合,分为有结构文件和无结构文件。有结构文件由若干个相关记录组成,无结构文件则被看成一个字符流。文件是文件系统的最大数据单位。文件应该具有自己的属性,包括文件类型(如源文件、目标文件、可执行文件等),文件长度(文件的当前长度,也可能是最大允许长度),文件的物理位置(指示文件在哪一个设备上及在该设备的哪个位置的指针),文件的建立时间(文件最后一次修改时间)。

  文件存储在磁盘上需要存储两部分的信息:文件属性信息和文件存放的数据,属性和数据是分开存放的,我们看见的图形化文件只是一个符号并不存储数据,即目录下并不存储实际的数据。

三、文件的属性、基本操作以及文件的打开和关闭

1、文件的属性

  文件有一定的属性,这根据系统的不同而有所不同,但是通常都包括如下属性:

  • 名称:文件名称唯一,以容易读取的形式保存。

  • 标识符:标识文件系统内文件的唯一标签,通常为数字,它是对人不可读的一种内部名称。

  • 类型:被支持不同类型的文件系统所使用。

  • 位置:指向设备和设备上文件的指针。

  • 大小:文件当前大小(用字节、字或块表示),也可包含文件允许的最大值。

  • 保护:对文件进行保护的访问控制信息。

  • 时间、日期和用户标识:文件创建、上次修改和上次访问的相关信息,用于保护、 安全和跟踪文件的使用。

  所有文件的信息都保存在目录结构中,而目录结构也保存在外存上。文件信息当需要时再调入内存。通常,目录条目包括文件名称及其唯一标识符,而标识符定位其他属性的信息。

2、文件的基本橾作

  • 创建文件,在创建一个新文件时,系统首先要为新文件分配必要的外存空间,并在文件系统的目录中,为之建立一个目录项,目录项中应该记录新文件的文件名及其在外存的地址等属性。

  • 删除文件,当已不再需要某文件时,可将其从文件系统中删除,在删除时,系统应先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。

  • 读文件,读文件时,须在相应系统调用中给出文件名和应读入的内存目标地址。此时,系统要查找目录,找到指定目录项,从中得到被读文件在外存中的位置。在目录项中,还有一个指针用于对文件进行读/写。

  • 写文件,写文件时,须在相应系统调用中给出文件名和其在内存源地址。此时,系统要查找目录,找到指定目录项,从再利用目录中的写指针进行写操作。

  • 截断文件,如果一个文件的内容已经陈旧而需要全部更新时,一种方法是将此文件删除,再重新创建一个新文件,但如果文件名和属性均无改变,则可采取截断文件的方法,其将原有的文件长度设置为0,放弃原有文件的内容。

  • 设置文件的读/写位置,用于设置文件读/写指针的位置,以便每次读/写文件时,不需要从始端开始而是从所设置的位置开始操作。可以改顺序存取为随机存取。

【每个打开文件都有如下关联信息】:

  • 文件指针:系统跟踪上次读写位置作为当前文件位置指针,这种指针对打开文件的某个进程来说是唯一的,因此必须与磁盘文件属性分开保存。

  • 文件打开计数:文件关闭时,操作系统必须重用其打开文件表条目,否则表内空间会不够用。因为多个进程可能打开同一个文件,所以系统在删除打开文件条目之前,必须等待最后一个进程关闭文件。该计数器跟踪打开和关闭的数量,当该计数为0 时,系统关闭文件,删除该条目。

  • 文件磁盘位置:绝大多数文件操作都要求系统修改文件数据。该信息保存在内存中以免为每个操作都从磁盘中读取。

  • 访问权限:每个进程打开文件都需要有一个访问模式(创建、只读、读写、添加等)。该信息保存在进程的打开文件表中以便操作系统能允许或拒绝之后的I/O请求。

四、文件的逻辑结构

  文件的逻辑结构是从用户观点出发看到的文件的组织形式。文件的物理结构是从实现观点出发,又称为文件的存储结构,是指文件在外存上的存储组织形式。文件的逻辑结构与存储介质特性无关,但文件的物理结构与存储介质的特性有很大关系。按逻辑结构,文件有无结构文件和有结构文件两种类型:无结构文件和有结构文件。

1、无结构文件(流式文件)

  无结构文件是最简单的文件组织形式。无结构文件将数据按顺序组织成记录并积累保存,它是有序相关信息项的集合,以字节(Byte)为单位。由于无结构文件没有结构,因而对记录的访问只能通过穷举搜索的方式,故这种文件形式对大多数应用不适用。但字符流的无结构文件管理简单,用户可以方便地对其进行操作。所以,那些对基本信息单位操作不多的文件较适于釆用字符流的无结构方式,如源程序文件、目标代码文件等。

2、有结构文件(记录式文件)

(1)顺序文件

  文件是记录的集合,文件中的记录可以是任意顺序的,因此,它可以按照各种不同的顺序进行排列,一般地,可归纳为以下两种情况。

  • 串结构:记录之间的顺序与关键字无关,通常按照时间先后排序,最先存入的记录作为第一个记录,其次,为第二个记录,以此类推。

  • 顺序结构:文件中所有记录按照关键字排列,可以按照关键词长度从大到小排列。顺序结构的检索效率更高。

在这里插入图片描述

(2)索引文件

  对于定长记录文件,可以方便的实现顺序存取和直接存取,然而,对于变长记录就很难实现。为了解决变长记录检索问题,可为变长记录文件建立一张索引表,对主文件中的每个记录,在索引表中设有一个相应的表项,用于记录该记录的长度L及指向该记录的指针(指向该记录在逻辑地址空间的首址),由于索引表示按记录键排序的,因此,索引表本身是一个定长记录的顺序文件。从而可以方便实现直接存取。
在这里插入图片描述
  在对索引文件进行检索时,首先根据用户(程序)提供的关键字,并利用折半查找检索索引表,从中找到相应的表项,再利用该表项给出的指向记录的指针值,去访问所需的记录。每当要向索引文件中增加一个新纪录时,便须对索引表进行修改。索引表的问题在于除了有主文件外,还需要配置一张索引表,每个记录需要有一个索引项,因此提高了存储费用。

(3)索引顺序文件

  索引顺序文件有效克服了变长记录不便于直接存取的缺点,而且所付出的代价也不算太大,它是顺序文件和索引文件相结合的产物,它将顺序文件中的所有记录分为若干个组,为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个索引项,其中含有该记录的键值和指向记录的指针
在这里插入图片描述
  在对索引顺序文件进行检索时,首先利用用户(程序)所提供的关键字及某种查找算法去检索索引表,找到该记录组中的第一个记录的表项,从中得到该记录组第一个记录在主文件中的位置,然后,再利用顺序查找法去查找主文件,从中找出所要求的记录。

在这里插入图片描述

(4)多级索引顺序文件

  为顺序文件建立多级索引表。
在这里插入图片描述

3、文件的逻辑结构总结

在这里插入图片描述

五、文件的目录结构

  与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的信息,包括属性、 位置和所有权等,这些信息主要是由操作系统进行管理。首先我们来看目录管理的基本要求: 从用户的角度看,目录在用户(应用程序)所需要的文件名和文件之间提供一种映射,所以目录管理要实现“按名存取”;目录存取的效率直接影响到系统的性能,所以要提高对目录的检索速度;在共享系统中,目录还需要提供用于控制访问文件的信息。此外,文件允许重名也是用户的合理和必然要求,目录管理通过树形结构来解决和实现。

1、文件控制块

  文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,实现了文件名和文件之间的映射,使得用户可以“按名存取”。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,成为目录项。FCB主要包含以下信息:

  • 基本信息,如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等。

  • 存取控制信息,如文件存取权限等。

  • 使用信息,如文件建立时间、修改时间等。

2、索引结点

  在检索目录文件的过程中,只用到了文件名,仅当找到一个目录项(查找文件名与目录项中文件名匹配)时,才需要从该目录项中读出该文件的物理地址。也就是说,在检索目录时,文件的其他描述信息不会用到,也不需调入内存。因此,有的系统釆用了文件名和文件描述信息分开的方法,把文件描述信息单独形成一个称为索引结点的数据结构,简称为 i 结点,每个文件对应一个索引节点

  在文件目录中的每个目录项仅由文件名和索引节点指针构成,这样就减少了目录项的长度,因此每个磁盘可以存放更多的目录项
在这里插入图片描述

3、目录结构

  在目录这个层次上需要执行的操作:

  • 搜索:当用户使用一个文件时,需要搜索目录,以找到该文件的对应目录项。

  • 创建文件:当创建一个新文件时,需要在目录中增加一个目录项。

  • 删除文件:当删除一个文件时,需要在目录中删除相应的目录项。

  • 显示目录:用户可以请求显示目录的内容,如显示该用户目录中的所有文件及属性。

  • 修改目录:某些文件属性保存在目录中,因而这些属性的变化需要改变相应的目录项。

(1)单级目录结构

  在整个文件系统中只建立一张目录表,每个文件占一个目录项:
在这里插入图片描述
  当访问一个文件时,先按文件名在该目录中查找到相应的FCB,经合法性检查后执行相应的操作。当建立一个新文件时,必须先检索所有目录项以确保没有“重名”的情况,然后在该目录中增设一项,把FCB的全部信息保存在该项中。当删除一个文件时,先从该目录中找到该文件的目录项,回收该文件所占用的存储空间,然后再清除该目录项。

  单级目录结构实现了 “按名存取”,但是存在查找速度慢、文件不允许重名、不便于文件共享等缺点,而且对于多用户的操作系统显然是不适用的。

(2)两级目录结构

  单级目录很容易造成文件名称的混淆,可以考虑釆用两级方案,将文件目录分成主文件目录(Master File Directory, MFD)和用户文件目录(User File Directory, UFD)两级:
在这里插入图片描述
  两级目录结构可以解决多用户之间的文件重名问题,文件系统可以在目录上实现访问限制。但是两级目录结构缺乏灵活性,不能对文件分类

(3)多级目录结构(树形目录结构)

  用户要访问某个文件时用文件的路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件的通路上的所有目录名与数据文件名用分隔符链接起来而成。从根目录出发的路径称绝对路径。当层次较多时,每次从根目录查询浪费时间,于是加入了当前目录,进程对各文件的访问都是相对于当前目录进行的。当用户要访问某个文件时,使用相对路径标识文件,相对路径由从当前目录出发到所找文件通路上所有目录名与数据文件名用分隔符“/”链接而成。
在这里插入图片描述
  “/dev/hda”就是一个绝对路径(从根目录出发)。若当前目录为 “/bin”,则“./ls”就是一个相对路径(从当前目录出发),其中符号“.”表示当前工作目录

  树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,在树形目录中查找一个文件,需要按路径名逐级访问中间结点,这就增加了磁盘访问次数,无疑将影响查询速度。

(4)无环图目录结构

  树形目录结构可便于实现文件分类,但不便于实现文件共享,为此在树形目录结构的基础上增加了一些指向同一结点的有向边,使整个目录成为一个有向无环图。引入无环图目录结构是为了实现文件共享

  当某用户要求删除一个共享结点时,若系统只是简单地将它删除,当另一共享用户需要访问时,却无法找到这个文件而发生错误。为此可以为每个共享结点设置一个共享计数器(类似智能指针的引用计数),每当图中增加对该结点的共享链时,计数器加 1;每当某用户提出删除该结点时,计数器减1。仅当共享计数器为0时,才真正删除该结点,否则仅删除请求用户的共享链。
在这里插入图片描述
  共享文件(或目录)不同于文件拷贝(副本)。

  • 对于文件拷贝,如果一个文件被修改,那么另一个拷贝的文件不会有改变。

  • 对于共享文件,只存在一个真正文件,任何改变都会为其他用户所见。

4、文件的目录结构总结

在这里插入图片描述

六、文件分配方式

  文件分配要解决的问题是:文件数据应该怎么存放在外存中。
在这里插入图片描述

1、连续分配

  连续分配要求为每个文件分配一组连续的块,一组盘块地址定义了磁盘上的一段线性地址。采用连续分配方式时,可把逻辑文件中的记录顺序地存储到邻接的各物理盘块中,这样所形成的文件结构称为顺序文件结构,这种分配方式保证了逻辑文件中的记录顺序与存储器中文件占用盘块的顺序的一致性。下图为连续分配方式(假设记录与盘块一样大)。物理块号=起始块号+逻辑块号。
在这里插入图片描述
【连续分配的特点】:

  • 连续分配访问速度快,因为由连续分配所装入的文件,其所占用的盘块可能是位于一条或几条相邻的磁道上,这是,磁头移动距离最少,这种对文件访问的速度使几种存储空间分配方式中最高的一种。

  • 会产生许多外部碎片,严重地降低了外存空间利用率。

  • 由于连续分配需要占用连续的块,因此不便于扩展

2、隐式链接分配

  在文件目录的每个目录项中,都含有指向链接文件第一个盘块和最后一个盘块的指针
在这里插入图片描述
【隐式链接分配的特点】:

  • 隐式链接分配的主要问题在于:其只适合于顺序访问,对随机访问的效率及其低效。此外,其可靠性较差,任何一个指针出现问题,都会导致整个链的断开。可以将几个盘块组成一个簇,然后以簇为单位进行分配,会减少查找指定块的时间,但是会增加内部碎片。

3、显示链接分配

  把用于链接文件各物理块的指针,显式的放在内存的一张链接表中,该表在整个磁盘仅设置一张
在这里插入图片描述
【显式链接分配的特点】:

  • 支持随机访问。

  • 文件分配表需要占用一定的存储空间。

4、索引分配

  为每个文件建立了一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。索引表中存放的磁盘块称为索引块,文件数据存放的磁盘称为数据块索引分配支持随机访问。
在这里插入图片描述
在这里插入图片描述

(1)链接方案

在这里插入图片描述

(2)多层索引

在这里插入图片描述

(3)混合索引

在这里插入图片描述

5、文件分配总结

在这里插入图片描述

七、共享文件:硬链接和软链接

  文件共享使多个用户(进程)共享同一份文件,系统中只需保留该文件的一份副本。如果系统不能提供共享功能,那么每个需要该文件的用户都要有各自的副本,会造成对存储空间的极大浪费。随着计算机技术的发展,文件共享的范围已由单机系统发展到多机系统,进而通过网络扩展到全球。这些文件的分享是通过分布式文件系统、远程文件系统、分布式信息系统实现的。这些系统允许多个客户通过C/S模型共享网络中的服务器文件。
在这里插入图片描述

1、硬链接

  文件A是文件B的硬链接,则A的目录项中的inode节点号与B节点的inode节点号相同,既一个inode节点对应两个不同的文件名,两个文件名指向一个同一个文件,A和B对于文件系统其实是完全相同的。所以硬链接实际上是为文件建一个别名,也就是copy+同步更新。

  如果删除了其中一个,对另外一个没有影响. 每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应数据块被回收。

2、硬链接的特点

  • 硬连接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。

  • 不能对目录创建硬链接。

  • 不能对不存在的文件创建硬链接。

3、软链接

  A是B的软链接,A的目录项中的inode节点号与B的目录项中的inode节点号不同,A和B指向的是两个不同的inode,继而指向两块不同的数据块,但是A的数据块存放的是B的路径名 。A和B之间 "主从"关系,如果B被删除了,A仍然存在,但指向的是一个无效的链接。所以软链接类似于快捷方式。

4、软链接的特点

  • 软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vi这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在)。

  • 可以对目录创建软链接,便利操作会忽略目录的软链接。

  • 可以跨越文件系统。

硬链接: ln 源文件名 链接名
软链接  ln -s 源文件名 链接名

八、文件保护

  文件保护通过口令保护、加密保护和访问控制等方式实现。其中,口令保护和加密保护是为了防止用户文件被他人存取或窃取,而访问控制则用于控制用户对文件的访问方式。

参考:https://blog.csdn.net/xiaoyangsavvy/article/details/78260777
https://www.bilibili.com/video/av31584226/?p=22

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值