操作系统第四章——文件管理(上)

凡所有相,皆是虚妄,若见诸相非相,即见如来


4.1.1 初识文件管理

这一节主要就是两个问题,什么是文件?单个文件的逻辑结构和物理结构之间是否存在某些制约关系(我们使用C语言%P得到的就是逻辑地址,我们平时使用的指针也是逻辑地址,物理地址就是我们存放于存储器上的地址)
文件(File)是以硬盘为载体的存储在计算机上的信息集合,文件可以是文本文档、图片、程序等。在系统运行时,计算机以进程为基本单位进行资源的调度和分配;而在用户进行的输入、输出中,则以文件为基本单位。大多数应用程序的输入都是通过文件来实现的,其输出也都保存在文件中,以便信息的长期存储及将来的访问。当用户将文件用于程序的输入、输出时,还希望可以访问、修改和保存文件等,实现对文件的维护管理,这就需要系统提供一个文件管理系统,操作系统中的文件系统(File System)就是用于实现用户的这些管理要求的。

前情回顾

手机的照片,ppt 什么的都是属于文件,但是不同的文件却呈现了不同的特性,这也需要操作系统来关心,因为一个文件有各种不同的属性所以打开方式就有各种不同的差别,从下往上看操作系统的下层是硬件,所以操作系统也是需要对硬件进行管理,一般来说文件是存放于磁盘中的,外存作为一种硬件同样也是需要操作系统对他进行管理,
请添加图片描述

文件的属性

除了文件数据,操作系统还会保存与文件相关的信息,如所有者、创建时间等,这些附加信息称为文件属性或文件元数据。文件属性在不同系统中差别很大,但通常都包括如下属性。操作系统通过文件控制块来维护文件元数据
请添加图片描述
在一个系统中肯定是有许多的重名文件的,用文件名并不能唯一的区分出不同的文件,因此操作系统会为每一个文件设置一个标识符,指明不同的文件类型是有好处的,比如可以为每一个文件设置一个默认的打开程序,当我们双击打开文件的时候,操作系统需要从外存将文件的数据读入内存,因此操作系统也需要关心文件在外存存放位置的问题,

文件内部的数据应该怎样组织起来?

请添加图片描述
对于有结构文件这样的一行就是一个记录,而每一个记录又是由一组相关的数据项组成
请添加图片描述
文件的逻辑结构就是文件内部的记录应当被如何组织起来的问题,所谓的逻辑结构就是我们所以为的结构,而非底层的存储结构

文件之间应该怎么样组织起来?

请添加图片描述
文件通过目录一层一层有结构的组织起来,这样很方便我们用户使用,

操作系统应该向上提供那些功能?

请添加图片描述
在我们点了一个新建之后背后是使用了操作系统提供的一个创建文件的功能,图像化交互进程是在背后调用了操作系统向上提供的Create系统调用,来完成文件创建的一个工作,文件创建完成之后,文件的数据在外存中就已经有保存,当我们双击打开这个text文件,操作系统先是自动的打开了记事本这个应用程序,这个应用程序又调用了操作系统向上提供的系统调用read函数来实现了读文件的功能,通过读文件的功能就可以将数据从外存读入内存,我们平时编辑的时候只是改变了在文件在内存的那个副本文件的数据所以需要保存文件写回外存,(而内存通常又是DRAM,断电易失 所以这就是为什么我刚刚打了很久却重新打的原因),,
请添加图片描述
这里的打开文件和关闭文件和我们双击和点红色的小叉叉是不同的,

文件如何存放在外存?

请添加图片描述
操作系统也会关心文件时如何存放于外存中的,操作系统进行读写文件的时候也是以块为单位进行数据交换的,外存被分为一个个的磁盘块,有两种方式来存放文件到外存中,到底底层是连续存放的还是不连续存放,会在文件的物理结构中进行讨论。另外操作系统需要关注管理空闲的磁盘块,以及磁盘块进行分配与回收,文件的物理结构探讨的是文件是如何在磁盘上存放的问题,而逻辑结构则是文件的各个记录在逻辑上是什么样的组织关系的问题,
请添加图片描述
请添加图片描述

知识回顾

请添加图片描述
文件的逻辑结构也就是这一个个记录之间如何组织起来

4.1.2 文件的逻辑结构

知识总览

请添加图片描述
逻辑结构是我们自己以为计算机是这样存储这些文件记录之间的关系的,我们需要用那种方式才能访问这些文件记录,但是物理结构是因为若是连续存放这个文件,可能占用的地方较大,并且可能找不到这样连续的空间,所以计算机操作系统给文件不一样的存放,这不是我们需要关心的,所以操作系统会进行逻辑地址到物理地址之间的转化。

无结构文件(流式文件)

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

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

请添加图片描述

有结构文件的逻辑结构

请添加图片描述

顺序文件

请添加图片描述
请添加图片描述
首先文件中的中的记录也就相当于顺序表中的一个个结点,这些结点之间如何连接,物理上结点之间可以使用链式存储,也可以使用类似数组连续分配的形式,但是不同于数组的这里每一个结点可能不同的大小,若是结点大小一样自然可以采用类似于数组的形式随机访问,若是结点不同则不能随机访问,这里所说的采用折半查找是结点大小一样,并且结点之间是物理上采用顺序存储。并且需要注意可变长记录是需要显示的给出每一个记录的大小的,而定长记录则不需要显示的给出大小(就像段式存储中需要给出每一个段大小,页式存储中不需要给出页的大小)
实际应用中为了减少磁盘IO的次数, 一般操作系统会管理一个日志文件,用日志文件了记录对这个文件进行的修改,每隔一段较长的时间才将修改的信息合并到外存,上一章中内存写回到外存有提到过一种类似的方式
在对记录进行批量操作,即每次要读或写一大批记录时,顺序文件(物理上也顺序存储)的效率是所有逻辑文件中最高的。此外,对于顺序存储设备(如磁带)也只有顺序文件才能被存储并能有效地工作。在经常需要查找、修改、增加或删除单个记录的场合,顺序文件的性能也比较差。

索引文件(第二种逻辑结构)

请添加图片描述
这个指针指向变长记录的逻辑起始地址和记录长度
个人感觉这是对上述顺序存储可变长记录的一个优化
每一个结点都有一个指向它的指针,将这些指针存放于一个索引表中,索引表项逻辑上是一个定长顺序结构(若是物理上能连续存放最好,这样可以快速定位),记录也就不需要在一片连续的区域了。

索引顺序文件

上面我们说了要是物理上能连续就更好了,但是有的时候索引表很长,就跟之前的页表很长一个思想,我们建立一个索引顺序文件,注意这里是使用指针(也就是逻辑地址),而多级页表中使用的块找到最后的块之后,最后的那个块所记录的页框进行拼接得到物理地址
请添加图片描述
索引表其实是一个定长记录的串结构的顺序文件,每一个分组同样也是一个串结构的顺序文件,
请添加图片描述

多级索引顺序文件

请添加图片描述
这里就是相当于多级页表类似的思想,第一步先缩小范围,第二步在精确
索引文件和索引顺序文件都提高了存取的速度,但因为配置索引表而增加了存储空间(索引表也是一种文件,所以这种文件也可能在外存中)。

直接文件或散列文件( Hash File)

给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件,没有顺序的特性。散列文件有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同。

知识点回顾

请添加图片描述
请添加图片描述

4.1.3 文件目录

文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,称为目录项。文件目录也是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用。通常,一个文件目录也被视为一个文件
请添加图片描述
打开一个文件夹,出现的多个文件,文件夹就是文件目录,通过这种树型结构方便查找,
首先来看目录管理的基本要求:从用户的角度看,目录在用户(应用程序)所需要的文件名和文件之间提供一种映射,所以目录管理要实现“按名存取”:目录存取的效率直接影响到系统的性能,所以要提高对目录的检索速度;在多用户系统中,应允许多个用户共享一个文件,因此目录还需要提供用于控制访问文件的信息。此外,应允许不同用户对不同文件采用相同的名字,以便于用户按自己的习惯给文件命名,目录管理通过树形结构来解决和实现

知识总览

请添加图片描述
最开始是单级目录,后面发展出现了两级目录,再到后面出现了多级目录,然后是无环图目录,

文件控制块

请添加图片描述
如上图就是D盘根目录下,使用一个目录表来表示这个文件夹存放了什么东西,每一个文件,文件夹都会对应这里目标表的一个表项,目录表的每一个表项就是一个记录,所以说目录本身就是一个有结构的文件。我们点击文件夹的时候就是找这个目录表的各个表项,然后看这个表项的所指向的地址,然后到那个地址去,
请添加图片描述

单级目录结构

请添加图片描述
单级目录不适合多用户操作系统,因为在这种情况下,所有用户都必须共享同一个目录结构。这意味着如果一个用户更改了某个文件或目录的名称或位置,这将影响其他用户的访问和使用。此外,单级目录不支持访问控制和权限设置,这样可能会导致安全性问题和数据丢失。

两级目录结构

请添加图片描述
但是用户不能对自己的文件进行分类

多级目录结构

请添加图片描述
每一级目录读取都是需要进行读磁盘的IO操作(FCB所表达的文件的物理位置总是存放于外存中),

请添加图片描述
注意相对路径是在当前目录之后出现的,需要配合当前目录使用,
多级目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”。

无环图目录结构

请添加图片描述
无环图目录结构方便实现文件的共享,但使得系统的管理变得更加复杂

索引结点(FCB的改进)

主要就是让一个磁盘块放入更多的FCB,这样平均下来就减少了磁盘IO的次数
文件目录通常存放在磁盘上,当文件很多时,文件目录会占用大量的盘块。在查找目录的过程中,要先将存放目录文件的第一个盘块中的目录调入内存,然后用给定的文件名逐一比较,若未找到指定文件,就还需要不断地将下一盘块中的目录项调入内存,逐一比较。我们发现,在检索目录的过程中,只用到了文件名,仅当找到一个目录项(其中的文件名与要查找的文件名匹配)时,才需从该目录项中读出该文件的物理地址。也就是说,在检索目录时,文件的其他描述信息不会用到,也不需要调入内存。因此,有的系统(如UNIX)便采用了文件名和文件描述信息分开的方法,使文件描述信息单独形成一个称为索引结点的数据结构,简称i结点(inode)。在文件目录中的每个目录项仅由文件名和指向该文件所对应的i结点的指针构成
请添加图片描述
当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件
根据索引结点存放在内/外存可分为“磁盘索引结点”、“内存索引结点”
存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”。
相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件
(1)磁盘索引结点
它是指存放在磁盘上的索引结点。每个文件有一个唯一的磁盘索引结点,主要包括以下内容:·
文件主标识符,拥有该文件的个人或小组的标识符。
文件类型,包括普通文件、目录文件或特别文件。。
文件存取权限,各类用户对该文件的存取权限。
文件物理地址,每个索引结点中含有13个地址项,即 iaddr(O)~iaddr(12),它们以直接或间接方式给出数据文件所在盘块的编号。
文件长度,指以字节为单位的文件长度。
文件链接计数,在本文件系统中所有指向该文件的文件名的指针计数。
文件存取时间,本文件最近被进程存取的时间、最近被修改的时间及索引结点最近被修改的时间。
(2)内存索引结点
它是指存放在内存中的索引结点。当文件被打开时,要将磁盘索引结点复制到内存的索引结点中,便于以后使用。在内存索引结点中增加了以下内容:
索引结点编号,用于标识内存索引结点
状态,指示i结点是否上锁或被修改
访问计数,每当有一进程要访问此i结点时,计数加1;访问结束减1
逻辑设备号,文件所属文件系统的逻辑设备号。(设备管理是和文件系统紧密结合的,把设备和文件关联起来,这样系统调用可以直接用操作文件一样的方法来操作设备。各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3)
链接指针,设置分别指向空闲链表和散列队列的指针
FCB或索引结点相当于图书馆中图书的索书号,我们可以在图书馆网站上找到图书的索书号,然后根据索书号找到想要的书本。

知识回顾

请添加图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值