上章链接
【系统架构师】第一章:操作系统(1.2.3)续:管程
终于写完了第一块内容,这里是最难的。
剩下的就比较简单了,这章先介绍文件管理。

1.3 文件管理

文件管理是对外部设备上的文件信息进行管理。我们这里介绍两种文件结构。
第一种是文件的逻辑组织,另一种是文件的物理结构。

本篇引用链接:
https://zhidao.baidu.com/question/554853332.html

一.文件的逻辑组织

文件的逻辑组织指的是从用户的角度所看到的文件组织形式。我们可以大致分为两种:

  1. 无结构的字符流文件
  2. 有结构的记录文件

这个我搜了一下,无结构的字符流文件指的是按照字符的形式来对文件进行读取,例如我们的小说等txt文件。

有结构的记录文件一般是由记录组成。这个有个很好的例子,比如系统的日志就属于一种记录。

书上对这个进行了更细的划分,这里就不过多的介绍了,因为我找了很多文档,都没有关于其中划分的更详细的介绍,比如转置结构,很多资料介绍的都很模糊。

有一篇资料是按照其记录长度进行划分,而且说的比较清楚,这里就引用了。

  1. 定长记录文件。指文件中各条记录的长度都相同。优点是开销小,记录处理方便。
  2. 变长记录文件。指的是文件中记录的长度不相同。在处理之前每个记录的长度都是已知的。
二.文件的物理组织

与上一种组织不同的是,物理组织指的数据在物理设备上的存储方式。为了使文件存储的效率更高,因此才有了物理组织。

物理组织被划分了如下的方式:

  1. 连续文件
  2. 串连文件
  3. 索引文件和多重索引文件

1.连续文件

连续文件就是直接按照系统字节数来进行存储文件,将一个逻辑上连续的文件存放在连续的内存中。

很明显,你也可以通过以上的描述来发现连续文件的优点:由于文件信息是连续的,所以系统无需去寻找,直接就可以访问到。

但是缺点也是显而易见的。

第一点就是,不能随意的扩充文件的内容。
当你想在其中的某个文件的末尾添加一些信息的时候时,你就会发现你遇到大麻烦了:即使就往文件末尾添加一个字符a,由于你此刻使用的是连续文件,所以,这个文件的下一个文件的开头的存储空间就需要往后变一个,下一个也是,以此类推。这样就会导致出现很多不可控制的情况。

第二点,提前就需要计算好文件的大小。
由于使用的是连续文件,所以在存放第二个文件的时候,第一个文件的位置就需要提前计算好,然后才能存放第二个文件。这对于系统开发人员是很容易的,但是对用户是很不方便的。

第三点,有可能造成不必要的系统浪费。
由于连续文件讲究的就是一个连续性,但是由于系统中存在很多小的内存碎片,这样就会导致内存碎片无法进行连续的使用。

因此,结合以上的优点和缺点,我们一般使用连续文件对系统文件,编译文件等一些预先的配置文件使用连续文件进行存储。

2.串连文件

为了克服我们上述的连续文件的缺点,因此产生了串连文件。

这个概念的理解可以引入c语言里面的链表。我们在做动态链表的时候,next指针永远指向下一个malloc所开辟的内存。因此,使用一个while循环,每次都将指针指向next指针中存放的下一个结构体的地址即可。

同理。连续文件在尾部也有一个指针,这个指针指向了下一个地址块的物理地址。

这样做的好处就是,假如有微小的内存碎片,我们也可以使用串连文件来进行连接。

但是我们也可以看到串连文件的缺点:

1.仅仅适合信息的顺序访问,不适合于文件的随机存储。
2.如果想在尾部添加信息,这样会使信息管理添加麻烦。
3.由于一些内存块是不连续的,这样就会导致信息读取缓慢。

3.索引文件和多重索引文件

索引文件是另一种不连续存储文件的方式。系统会为文件建立一个索引表,这个表中的每一表项指出文件信息所在的逻辑块号与之对应的物理块号。

这种方式的优点在于既可以动态的增长文件长度,又可以实现文件的随机存储。
不过,很多时候我们使用的是多重索引文件。因为当一个索引表的大小超过一个内存块的时候,就会出错。因此,采用了一块内存块中存放第一级别的索引,然后每一个索引里面存放下一级的索引,以此类推。

缺点也很明显,当想访问某个文件的时候,就需要先访问索引表盘,然后在访问文件。这样就导致访问一个文件需要访问两块磁盘,最终速度变慢。

聪明人是多数的,很快就有人想到了解决办法,就是提前将索引表调入内存。这样,就能很快的从索引中找到我们想要的文件。

三.树形目录结构

这一块我直接水了。这种结构天天用,就不用多说了吧?
打开你的磁盘,首先肯定是根目录,然后就是根目录下的各种文件,然后…
用过电脑的人应该都知道怎么回事,这里就不写了,多写也都是废话。
不过这里要强调两个东西,就是文件存储的格式,一种是fat32格式的文件,另一种是ntfs格式。不同格式的文件是无法兼容的,这里可以给你们说一个我遇到的例子。

之前在将kali安装到物理机的时候,前面都正常,但是在选择磁盘的时候,却发现本来电脑自带的1t银盘怎么都扫描不出来。
我开始以为是安装包的问题,重装了好几次发现都不行。

在百度了很多地方,最终在b站上找到了答案,是磁盘格式的问题。

我的windows默认使用的是ntfs的格式,而linux一般要求的都是fat格式,所以导致在安装的时候无法扫描出硬盘。

就这两种格式而言,ntfs是要比fat格式要好的,前者安全性高,而且产生的磁盘碎片少。在不是必要的情况下,一般都使用的是ntfs格式。

这几天一直有事情,本节内容就耽搁了。下几节可能发的慢一点。

Logo

更多推荐