848操作系统(四) 文件管理

2020-10-04
4 min read

#文件管理

文件系统概念

心态崩了,一大节笔记没保存。不写这节了。

文件系统实现

上一节内容讨论的是逻辑结构的话,这节内容主要是在讨论存储结构

文件系统层次结构

一般可以分成:“用户调用接口-文件目录系统-存取控制验证模块(软件验证合法性)- 逻辑文件系统与文件信息缓冲区(逻辑记录转逻辑块号)- 物理文件系统(逻辑块转物理地址)- 辅助分配模块(管理空闲空间和回收辅存) - 设备管理程序模块(分配设备等)”

目录实现

目录的实现就是为了查找,因此可分为两种目录实现方式:线性列表和哈希表,分别对应线性查找和散列查找。

线性列表

使用存储文件名和数据块的线性表。 优点:实现简单 缺点:查找费时

哈希表

根据文件名得到一个值,并返回指向相信列表中元素的指针。 优点:查找快速,插入删除简单。 缺点:哈希表长度固定,拓展性差

文件实现

文件分配方式

注意和逻辑结构区分

连续分配

连续分配要求每个文件在磁盘上占有一组连续的块。这种方式访问磁盘时所需要的寻道数和寻道时间最小。 优点:简单,存取速度快 缺点:文件长度不易拓展,容易产生外部碎片

链接分配

采取离散分配的方式,显著提高了磁盘利用率。除了最后一个盘块,每个盘块都有指向下一个盘块的指针,这些指针对于用户透明,目录中包括了第一块的指针和最后一块的指针。 优点:无外部碎片,磁盘利用率高 缺点:只能顺序访问,并且稳定性不高,指针也会消耗空间。

上述是隐式链接分配法,为了解决上述问题,使用显示链接分配法。显示存放各物理块指针,将他们都放到了一个叫做FAT的表中,每个表项存放下一块的指针。FAT表不仅记录了各块的先后关系,还记录了空闲的块位置。FAT表系统启动时会读入内存,这样也同时减少了访问磁盘的次数。

索引分配

索引分配主要提供了直接访问的功能。他把所有的盘块号都放在了一个索引块中。每个文件都有索引块,索引块的第i个条目对应文件第i个块的指针。索引分配无外部碎片。 索引块的大小适应个严重的问题,太小的索引块无法存放文件所有块指针,但过大会浪费空间。因此可以采用以下机制解决:

  1. 链接方案 一个索引块为一个硬盘块,为了处理大文件,可以把多个索引块链接起来。
  2. 多层索引 学习多级页表好榜样。
  3. 混合索引 把多种索引分配方法结合,比如系统采用直接地址,又采用单级索引或两级索引。(多重套娃)

文件存储空间管理

空闲表法

类似于内存管理中的动态分配方式,同样也有最佳适应算法、循环首次适应算法等。

空闲链表法

把所有空闲盘曲拉成一条空闲链。 优点:分配回收简单 缺点:分配需要多次

位示图法

用一个二位图来表示表示磁盘中每一块的使用情况。 标号从1开始,i行,j列,n表示一行的数量,b表示块号 盘块分配公式:$b=n(i-1)+j$ 盘块回收公式:$i = (b-1)DIV n+1\quad j=(b-1)MOD n +1$

标号从0开始 盘块分配:$b=n*i+j$ 盘块回收:$i=b DIV n \quad j = b MOD n$

成组链接法

前两者不适合用于大文件系统,因此unix使用成组链接法。大概方法就是一个扇区大部分空间都用作与存储数据,留一个存储另一个扇区的地址,如此循环 套娃。

Linux虚拟文件系统四大对象:

  1. 超级块(super block)
  2. 索引节点(inode)
  3. 目录项(dentry)
  4. 文件对象(file)

一个超级块对于一个独立的文件系统。保存文件系统的类型、大小、状态等等。

磁盘组织与管理

磁盘的结构

多个扇区围成一个圆,形成磁道,多个磁道和成一个圆面,形成盘片,多个圆面形成一个柱体。每个横切面称为柱面

磁盘调度算法

  • 寻找时间$T_S$,读写信息时移动到相应磁道所需时间。包括了跨越n条磁道时间外,还包括启动磁臂时间s。后者耗时较长。
  • 延迟时间$T_r$,磁头定位到某扇区所需要时间。旋转速度r,则$T_r=\frac{1}{2r}$。
  • 传输时间$T_t$,每次读写字数b,每秒转速r,磁道上字节数N $T_t=\frac{b}{rN}$

常见的算法有以下几种:

先来先服务

具有公平性。若有大量进程竞争使用,效率近似于随即调度。

最短寻找时间

优先处理与当前所在磁道最近的磁道。会产生饥饿现象

SCAN算法

电梯调度,循环进行。局部性性能不如前两者。

C-SCAN

到尾部后回到首部重新开始,不像scan算法还是从尾部循环到首部。避免了偏向于处理最里或最外的请求。

两种scan算法都可以用look算法优化,即如果前方没有要处理的请求,则立马回头是岸。

为了减少寻道时间,可以采用交替编号的方法。

磁盘的管理

磁盘初始化

  • 低级格式化(物理分区) 也就是分磁道 扇区啥的
  • 分区 也就是分我们所谓的cde盘
  • 逻辑格式化 创建文件系统

引导快

计算机启动需要初始化程序,一般存在ROM中,为了避免代码需要修改,所以rom只存放很小的程序,完整功能程序放在了启动块上。

坏块

系统可以标记坏块,不再使用,但不能修复坏块。

易错点

  1. 读取数据时间中,影响最大的时寻找时间
  2. 校验码的确定是低级格式化完成的
  3. 磁臂黏着:总是访问某个磁道而不响应其他磁道请求 FCFS不会导致这种现象