操作系统笔记:文件管理

操作系统需要向上提供最基本功能:

  1. 创建文件(create系统调用)
  2. 删除文件(delete系统调用)
  3. 读文件(read系统调用)
  4. 写文件(write系统调用)
  5. 打开文件(open系统调用)
  6. 关闭文件(close系统调用)

在这里插入图片描述

属性

文件名:由创建文件的用户决定文件名,主要是方便用户找到文件,同一目录下不允许有重名文件

标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性,因此标识符只是操作系统用于区分各个文件的一种内部标志

类型:知名文件的类型

内存:文件存放的路径(让用户使用)、在外存中的地址(操作系统使用,对用户不可见)

大小:指明文件大小

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

其他:创建时间、上次修改时间、文件所有者信息

文件逻辑结构

无结构文件

无结构文件:由一系列二进制或字符串组成

有结构文件

有一组相似的记录组成:记录 - 数据项

根据各条记录的长度是否相等,又可分为定长记录和可变长记录两种

  1. 顺序文件

    是否排序:

    串结构:记录之间的顺序与关键字无关

    顺序结构:记录之间的顺序按关键字顺序排列

    是否随机存取:

    链式存储:无论是定长/可变长记录,都无法实现随机存取,每次只能从第一个记录开始往后依次查找

    顺序储存:

    1. 可变长记录:无法实现随机存取,每次只能从第一个记录开始往后依次查找

    2. 定长记录(可实现随机存取):

      1)采用串结构:无法快速找到某关键字对应的记录

      2)采用顺序结构:可以快速找到某关键字对应的记录

  2. 索引文件

    建立一张索引表以加快文件检索速度,每条记录对应一个索引项

在这里插入图片描述

索引表本身是定长记录的顺序文件,因此可以支持随机存取

  1. 索引顺序文件

    索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但是并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项

文件目录

文件控制块

目录文件中的一条记录就是一个文件控制块(FCB)

FCB的有序集合称为”文件目录“,一个FCB就是一个文件目录项

FCB实现文件名和文件之间的映射,使用户(用户程序)可以实现”按名存取”

FCB中包含:

  1. 文件的基本信息(文件名、物理地址、逻辑结构、物理结构等)
  2. 文件的存取控制信息(是否可读可写,禁止访问的用户名单等)
  3. 文件的使用信息(文件建立时间、修改时间等)
目录结构
  1. 单级目录:按名存取,不允许文件重名

  2. 两级目录: 主文件目录(记录用户名和相应用户文件目录的存放位置)、

    ​ 用户文件目录(由该用户的文件FCB组成)

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

    ​ 很方便对文件进行分类,层次结构清晰,但是不利于文件的共享

  4. 无环图目录结构:在树形目录结构的基础上,增加一些指向同一结点的有向边,使整个目录成为一个有向无环图,更方便的实现多个用户间的文件共享

索引结点

本质上是对FCB的改进
在这里插入图片描述

文件物理结构

  1. 对非空闲磁盘块的管理(存放了文件数据的磁盘块)
  2. 对空闲磁盘块的管理
文件分配方式

在这里插入图片描述

映射:文件块号 -> 物理地址

  1. 连续分配

    每个文件在磁盘上占有一组连续的块

    物理块号 = 起始块号 + 逻辑块号

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 链接分配

在这里插入图片描述

1)隐式链接

在这里插入图片描述

2)显示链接

在这里插入图片描述

  1. 索引分配

在这里插入图片描述

​ 1)链接方案:如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放

​ 2)多层索引:建立多层索引,原理类似于多级页表(各层索引表大小不能超过一个磁盘块)

​ 3)混合索引:多种索引方式的结合。eg:一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表),还包括两级简介索引(指向两层索引表)

文件储存空间管理
储存空间的划分与初始化

划分:将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)

初始化:将各个文件卷划分为目录区、文件区

文件卷

就是磁盘划分的区,也称为逻辑卷、逻辑盘

目录区与文件区

目录区:主要存放文件目录信息(FCB)、用于磁盘储存空间管理的信息

文件区:用于存放文件数据

管理方法
  1. 空闲表法

    适用于连续分配方式

在这里插入图片描述

  1. 空闲链表法

    1)空闲盘符链:以盘块为单位组成一条空闲链

    2)空闲盘区链:以盘区为单位组成一条空闲链

在这里插入图片描述

  1. 位示图法

在这里插入图片描述

  1. 成组链接法

    超级块:文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时需要将超级块读入内存,并且要保持内存与外存中的“超级块”数据一致。实质就是起了一个链表表头的作用。

在这里插入图片描述

文件基本操作

进程的”打开文件表“(每个进程有一张)

在这里插入图片描述

系统的“打开文件表“(整个系统只有一张)

在这里插入图片描述

创建文件
  1. 在外存中找到文件所需的空间
  2. 在目录中创建该文件对应的目录项
删除文件
  1. 找到文件对应的目录项
  2. 回收文件占有的磁盘块
  3. 从目录表中删除文件对应的目录项
打开文件

并不是直接把文件数据读入内存

  1. 从目录中找到文件名对应的文件项,并检查该用户是否有指定的操作权限
  2. 将目录项复制到内存中的打开文件表中,并将对应表中的编号返回给用户。之后用户使用打开文件表的编号来指明要操作的文件
关闭文件
  1. 将进程打开的文件表相应表项删除
  2. 回收分配给该文件的内存空间等资源
  3. 系统打开文件表的打开计数器count-1,若count=0,则删除对应表项
读文件

真正的将数据读入内存

在支持”打开文件“操作的系统中,只需要调用打开文件操作,提供文件在打开文件索引表中的索引号即可

  1. 指明是哪个文件
  2. 读入多少数据
  3. 指明读入的数据存放在内存的什么位置
写文件

流程与读文件类似

文件共享

硬链接

基于索引结点的共享方式

在这里插入图片描述

软链接

基于符号链的共享反射方式

在这里插入图片描述

文件保护

口令保护

口令一般存放在文件对应的FCB或索引结点中。用户访问文件前需要先输入“口令”,操作系统会将用户提供的口令与FCB中储存的口令进行对比,如果正确,则允许该用户访问文件

优点:保存口令的空间开销不多,验证口令得到时间开销也很小

缺点:正确的“口令”存放在系统内部,不够安全

加密保护

使用某个“密码”对文件进行加密,在访问文件时需要提供正确的“密码”才能对文件进行正确的解密

优点:保密性强,不需要再系统中储存“密码”

缺点“编码/译码(加密/解密)需要花费一定时间

在这里插入图片描述

访问控制

在每个文件的FCB(或者索引结点)中增加一个访问控制列表(access-control list,ACL),该表中记录了各个用户可以对该文件执行哪些操作

用户过多时,可以采用精简的访问列表,给用户分组

在这里插入图片描述

文件系统层次结构

在这里插入图片描述

磁盘的结构

基本概念

磁盘:表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据

磁道:磁盘的盘面被划分为一个个刺刀,这样的一个”圈“就是一个磁道

扇区:一个磁道又被划分成一个个扇区,每个扇区就是一个”磁盘块“,每个扇区存放的数据量相同

读写数据

需要把”磁头“移动到想要读/写的扇区所在的磁道,磁盘会转起来,让目标扇区从磁头下面划过,才能完成对扇区的读/写操作

物理地址

可以用(柱面号,盘面号,扇区号)来定位任意一个”磁盘块“

分类

磁头是否可以移动:活动头磁盘、固定头磁盘

盘片是否可以更换:可换盘磁盘、固定盘磁盘

磁盘调度算法

一次磁盘读/写需要的时间

寻找时间(寻道时间)Ts:在读/写数据前,将磁头移动到指定磁道所花的时间

  1. 启动磁头臂耗时s
  2. 移动磁道耗时:每跨越一个磁道耗时为m,总共需要跨越n条磁道,耗时m*n

Ts=s+m*n

延迟时间Tr:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。设磁盘转速为r,则平均所需的延迟时间Tr=(1/2)*(1/r)=1/2r

传输时间Tt:从磁盘读出或向磁盘写入数据所经历的时间,假设磁盘转速为r,每个磁道可存N字节的数据,此次读/写的字节数为b

Tt=(1/r)*(b/N)=b/(rN)

总的平均存取时间Ta=Ts+Tr+Tt,延迟时间、传输时间难以优化,主要是优化寻道时间

磁盘调度算法
先来先服务算法

根据进程请求访问磁盘的先后顺序进行调度

优点:公平

缺点:如果又大量进程进竞争使用磁盘,请求访问的磁道很分散,则寻道时间长

最短寻找时间优先

优先处理的磁道是与当前磁头最短的磁道,可以保证每次的寻道时间最短,但是不能保证总的寻道时间最短(即贪心算法的思想,只是选择眼前最优,但是未必总体最优)

优点:性能较好,平均寻道时间短

缺点:可能产生”饥饿“现象

扫描算法(SCAN算法)

只有磁头移动到最外层磁道的时候才能向内移动,移动到最内侧磁道的时候才能向外移动

优点:性能较好,平均寻道时间较短,不会产生饥饿现象

缺点:只有到达最边上的磁道时才能改变磁头移动方向;算法对于各个位置磁道的响应频率不平均

LOOK算法

在扫描算法的基础上改善:如果在磁盘移动方向上已经没有别的请求,就可以立即改变磁头移动方向,边移动边观察

循环扫描算法(C-SCAN算法)

在这里插入图片描述

C-LOOK调度算法

在这里插入图片描述

磁盘管理

磁盘初始化
  1. 进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域、尾三个部分组成。管理扇区所需的各种数据结构一般存放在头、尾两个部分。包括扇区校验码(如奇偶校验、CRC循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)

  2. 将磁盘分区,每个分区由若干柱面组成在这里插入图片描述

  3. 进行逻辑格式化,创建文件系统,包括创建文件系统的根目录、初始化储存空间管理所用的数据结构(如位示图、空闲分区表)

引导块

计算机开机时,需要进行一系列初始化的工作,这些初始化工作是通过初始化程序(自举程序)完成的。初始化程序可以放在ROM(只读存储器)中。ROM中数据在出厂时就写入了,并且以后不能再修改。ROM一般是出厂时就集成在主板上的

为了解决自举程序更新问题,目前采用的解决方案:ROM中只存放很小的”自举装入程序“,完整的自举程序放在磁盘的启动块(即引导块/启动分区上),启动块位于磁盘的固定位置

坏块的管理

坏了、无法正常使用的扇区就是“坏块”。这属于硬件故障,操作系统是无法修复的。应该将坏块标记出来,以免错误的使用到它

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值