磁盘启动次数计算原理总结
@(OS)
文件管理有三大部分内容:
- 目录管理
- 文件存储空间管理
- 文件共享保护管理
目录管理又细分为:
- 文件控制块和索引结点
- 目录结构
- 单级目录结构
- 两级目录结构
- 树形目录结构
文件存储空间管理主要是四种:
- 空闲表
- 空闲链表
- 位示图
- 成组连接
文件共享和保护主要分为:
- 基于索引结点的共享方式–硬链接
- 利用符号链接实现文件共享–软链接
个人感觉最重要的是理解目录管理中的文件控制块设计与其优化后得到的索引结点存储方式。
剩下的,都可以稍加推断,很容易明白。但是如果FCB这些概念不能理解,后面的就很难打通。
这里再次总结FCB相关与磁盘访问计数问题。
文件控制块
设计目的:为了对一个文件进行正确的存取,设置了用于描述和控制文件的数据结构–文件控制块(FCB)。
文件管理程序可以借助文件控制块中的信息,对文件进行各种操作。
特别需要理解的是:一个文件对应一个文件控制块。 具体场景(利用场景记忆)是,比如你在桌面上建立了一个txt文档,这个文档就有一个自己的FCB,可能这个文档是空的,但是这种格式化文件需要记录一些基本描述信息,假设1KB,而它的FCB呢,大概是64B左右,其实也不是很大,就512个二进制位而已。
我们常用电脑知道,会新建个文件夹进行组织文件。这里也一样,单个的FCB与文件一一对应,如何组织这些FCB呢?用的是文件目录。
老实说,这个名称非常容易引起误会,以为是我们自己新建的文件夹,其实是FCB的集合。因此,文件目录下的文件目录项就是文件控制块,即FCB。关系本身不复杂,只是名字乱。还不止这些,一个文件目录也可以看作是一个文件,称之为目录文件。
会问,既然目录也是文件,那么它有没有FCB?答案是不一定。有些题可以说不设FCB,组织成链接文件。
我们先看普通文件中FCB存储了什么。
- 基本信息
- 文件名:标识文件的符号名,唯一,用户使用。
- 文件的物理位置:指示文件在外存上的存储位置。包括:存放文件的设备名;文件在外存上的起始盘块号,指示文件所占用的盘块数或字节数的文件长度,
- 文件的逻辑结构–指示文件是流式文件还是记录式文件,记录数等;文件是定长记录还是变长记录。
- 文件的物理结构:指示文件是顺序文件还是链接式文件或索引文件。
- 存取控制信息
- 文件的主存取权限
- 核准用户的存取权限
- 一般用户的存取权限
- 使用信息
- 文件的建立日期和时间
- 上一次修改的日期和时间
- 当前使用信息
- 已经打开该文件的进程数
- 是否被其他进程锁住
- 文件在内存中是否已经被修改但尚未拷贝到磁盘
值得关注的是FCB中含有文件起始盘块号和总共占用的盘块号数。这是计算访问磁盘数目的基础知识。
访问磁盘次数与索引结点的引入
文件目录通常存放在磁盘上。文件很多时文件目录要占用大量的盘块。查找目录的过程是:先将存放目录文件的第一个盘块中的目录调入内存,然后把用户给定的文件名与目录项中的文件名一一比较。若未找到指定文件,则把下一个盘块号中的目录项调入内存。
也就是调入内存是以磁盘块为单位进行。
这简短的一段话就讲明白了访问磁盘数的计算问题。即:主要计算的是FCB占用的盘块数,假设是N块,那么,查找一个目录项的平均需要调入盘块数 N+12 。
注意,这是查找一个文件的FCB,具体什么操作是后序的问题。因为FCB中有文件的起始磁盘块号,以及占用的磁盘块数。这还需要根据存储的物理方式来考虑计算,比如隐式链法,索引法等。具体问题具体分析。
加入一个FCB是64B,盘块大小为1KB;若一个文件目录中有640个FCB,平均查找一个文件需要启动磁盘多少次?
分析:一个盘块1KB,则一个盘块可以存16个FCB,那么640个FCB就需要40个盘块。平均需要 40+12=20.5次 ,也即,21次。
引入索引结点。
在上面的过程中,我们主要比较了文件名,那么用FCB这么完备的信息是有些浪费的,尤其是访问磁盘是很费时的操作。
因此,考虑将文件名与其他FCB中存储的信息分开,二者需要某个东西串在一起,这个东西可以在Unix下是一个2B的指针,文件名是14B。那么剩下的FCB的信息在哪呢?在索引结点。也叫inode。
因此文件目录中存的都是16B的文件目录项,相比64B,减少了四分之三。因此,为了找到文件,启动磁盘的次数减少到了原来的四分之一,这是很大的进步。
感性认识:索引结点存储大部分文件描述信息。
上面的是思想,具体实现时,分为:
- 磁盘索引结点
- 内存索引结点
文件是存在磁盘的。每个文件有唯一的磁盘索引结点。
磁盘索引结点主要包括:
- 文件主标识符
- 文件类型
- 文件存取权限
- 文件物理地址:每一个索引结点含有13个地址项,以直接或间接,或多级间接的方式给出数据文件所在盘块的编号。
- 文件长度:以字节为单位
- 文件的连接计数
文件的存取时间等
内存索引结点:存放在内存的索引结点。
设计缘由:文件被打开时,要将磁盘索引结点拷贝到内存的索引结点中,便于后续访问使用。
此外,还增加了一些内容:索引结点编号–标识内存索引结点。
- 状态:指示i结点是否锁住或被修改。
- 访问计数
- 文件所属文件系统的逻辑设备号
- 链接指针:指向空闲链表或者散列队列的指针。