【计算机考研408强化-操作系统】4.文件管理

4 文件管理

4.1 文件系统基础

文件的定义

文件是以计算机硬盘为载体的存储在计算机上的信息集合,文件可以是文本文档、图片、程序等。

【注意】在系统运行时,计算机以【进程】为基本单位进行【资源的调度和分配】;而在用户进行输入、输出时,则以文件为基本单位。

文件的结构主要分为:

  • 数据项:系统文件中最低级的数据组织形式

    • 基本数据项:用于表述一个对象的某种属性的一个值,比如姓名、日期等,是数据中可命名的最小逻辑数据单位,即原子数据。
    • 组合数据项:由多个基本数据项组成。
  • 记录:是一组相关数据项的集合

  • 文件:是指创建者所定义的一组相关信息的集合。逻辑上分为【有结构文件】和【无结构文件】。在【有结构文件】中,文件是由一组相似的记录组成的,比如excel表等,又称【记录式文件】;【无结构文件】则被视为一个字符流,比如一个二进制文件,又称【流式文件】。

文件的属性有:名称、标志符、类型、位置、大小、保护时间日期和用户标志等。

文件的基本操作:创建文件、写文件、读文件、文件重定位、删除文件、截断文件(文件属性不变,删除文件内容)

文件控制块FCB:基本信息、存取控制信息(存取权限)、实用信息

文件的打开与关闭

每个打开文件有:文件指针、文件打开计数、文件磁盘位置、访问权限。

文件的逻辑结构

无结构文件

将数据按顺序组织成记录并积累保存,也称为【流式文件】。文件内部的数据就是一系列二进制或字符流组成,是最简单的文件组成。

有结构文件

1.顺序文件

在顺序文件中,文件的记录是一个接一个的顺序排列,记录通常是定长的,可以顺序存储或链式存储。当每次要读或写一大批记录时,顺序文件的效率是所有逻辑文件中最高的,但顺序文件对查找、修改、增加或删除单调记录的操作是比较困难的。

  • 串结构:记录之间的顺序与关键字无关,由时间决定
  • 顺序结构:记录之间的顺序与关键字有关

2.索引文件

为长文件建立索引表,提高查找速度。但索引表本身是定长的顺序文件。

在这里插入图片描述

3.索引顺序文件

顺序文件和索引文件的结合,用空间来换时间。将顺序文件中的所有记录分为若干组,为顺序文件建立一张索引表,在索引表中为每组中的第一条记录建立一个索引项,其中含有该记录的关键字值和指向该记录的指针。

  • 索引文件:索引号+长度m+指针(索引表)---->逻辑文件(逻辑文件)
  • 索引顺序文件:键+逻辑地址(索引表)----->键+其他属性(逻辑文件)

在这里插入图片描述

直接文件

通过哈希函数直接决定记录地址,具有很高的存储速度,但是会发生冲突

目录结构

文件控制块FCB:用来存放控制文件需要的各种信息的数据结构,以实现"按名存取"

索引节点:在检索目录文件的过程中,只用到了文件名,仅当找到一个目录项时,才需要从该目录项(目录项结构:{文件名:索引节点编号})中,读出该文件的物理地址。

单级目录结构

全部文件都在一个目录下 ,这使得文件之间不允许有重名

在这里插入图片描述

两级目录结构

在目录下分出【主文件目录】和【用户文件目录】。【主文件目录项】记录用户名及相应用户文件目录所在的存储位置。【用户文件目录项】记录该用户文件的FCB信息。

在这里插入图片描述

多级目录结构

将两级结构加以推广,采用树形结构。

  • 绝对路径:从根目录出发到所找文件
  • 相对路径:进程对个文件的访问都是相对于当前目录进行的

在这里插入图片描述

无环图目录结构

在树形结构上加入一些有向边,便于共享。设置一个计数器count,当count=0时,才能删除。

在这里插入图片描述

文件共享

文件共享是指不同进程共同使用同一个文件。对于共享的文件,各进程可以进行读或写,整个系统只有一张【系统打开文件表】,文件F在【系统打开文件表】中仅有一个表项,同一个文件打开多次只需要改变【引用计数】。各进程的用户打开文件表中关于F的表项内容不一定相同。

基于索引节点(硬链接)

硬链接是指将【文件名】与【索引节点】进行链接。一个文件在物理存储器上有一个索引链接号,可以有多个文件名指向同一个【索引节点】。共享文件指向同一个索引节点,其特点就是速度很快

user1---->索引结点<----user2

基于符号链(软链接)

保存共享文件的路径名,需要多次I/O

ccc(user3)—>bbb(user2)—>aaa(user1)—>索引结点1—>文件

【注意】当建立符号链接时,引用数值不会增大;而在建立硬链接时,引用数值+1。

比如设文件F1当前的引用数值是1,先建立F1的符号链接文件F2(此时,F1和F2的引用数值均为1),再建立F1的硬链接文件F3(此时,F1和F3的引用数值均为2,因为有两个硬链接),然后删除F1(此时F3的引用数值为1,因为硬链接只有1个;F2的引用数值为1,保持不变,因为软链接只有1个)

文件保护

口令保护

通过口令访问文件。这种文件保护方式由于口令直接存在系统内部,不安全;但是时空开销不大。

加密保护

对文件进行加密处理。这种文件保护方式保密性强,但花时间。

控制访问

根据访问者的身份进行限制。比如可以通过分组来设置访问权限。

比如说用二进制位串表示不同类别用户对一个文件的访问权限,用户类型有4类,访问权限有5种,问描述文件权限的位数至少是多少。可以将这个过程抽象成一个矩阵,行和列分别表示用户和访问权限。也上述问题就是一个5行4列的矩阵,共20个二进制位。

4.2 文件系统实现

文件系统层次结构

用户调用接口:为用户提供与文件及目录有关的调用(发出命令)

文件目录系统:管理文件目录(找到文件下的索引信息或FCB)

存取控制验证:实现文件保护(查看文件FCB上的信息)

逻辑文件系统与文件信息缓冲区:将用户要读写的逻辑记录放到文件逻辑结构内到相应块号(得到逻辑地址)

物理文件系统:把逻辑记录所在块号放到实际的物理地址(得到物理地址)

辅助分配模块:辅助管理辅存空间(释放空间等),上层是物理文件系统

设备管理程序模块:分配设备和设备读写等(输入输出),上层是物理文件系统

设备:I/O设备

在这里插入图片描述

目录实现

线性列表

  • 有序列表:查找文件较快,创建文件较慢
  • 无序列表:查找文件较慢,创建文件较快

哈希表:查找、创建文件都快,但要处理冲突

在文件卷中,文件数据信息的空间(文件区)和存放文件控制信息FCB的空间(目录区)是分开的

超级块:有下一组空闲盘块的数量和盘块号。

文件实现(对非空闲区的管理)

连续分配

连续分配:在磁盘上连续存放文件

连续分配支持顺序访问和随机访问。

连续分配的优点是:实现简单;存取速度快。

连续分配的缺点是:文件长度不宜动态增加;反复增删文件会产生大量的外部碎片。

在这里插入图片描述

链接分配(离散)

【链接分配】解决了连续分配的外部碎片和文件大小管理问题

  • 显式链接分配:把隐式文件中的指针单独抽离出来

    • 介绍:把用于链接文件到各物理块的的指针现实的存放在一张表中,即【文件分配表FAT】。一个磁盘只会建立一张【文件分配表FAT】。开机时,文件分配表放入内存并常驻内存
    • 优点:方便文件拓展;不会有碎片化问题;外存利用率高;支持随机访问;相比隐式,显式在转换地址时不需要访问磁盘,访问率超高
    • 缺点:占用一定存储空间

在这里插入图片描述

  • 隐式链接分配:采用类似链表的结构

    • 介绍:除文件最后一个盘块外,每个盘块中都会存有一个指向下一个盘快的指针,文件目录包括文件第一块的指针和最后一块的指针(像链表的结点)
    • 优点:方便文件拖长;不会有碎片化问题;外存利用率高
    • 缺点:只支持顺序访问,不支持随机访问,查找效率低;指向下一个盘块的指针也需要耗费销量的存储空闲。

在这里插入图片描述

链接分配的优点是:消除了外部碎片,提高了利用率;无须事先知道文件大小;对文件内容的增、删、改操作也非常方便

链接分配的缺点是:不能随机存取。

索引分配

索引分配:每个文件所有的盘号都集中存放,建立索引表。

【索引分配】支持直接访问且没有碎片问题,但是增加了存储系统的开销。

在这里插入图片描述

但是在以【索引分配】的方式中,索引块的大小是需要选择的。索引块太小,无法支持大文件。解决方法有

  1. 链接方案
  2. 多层索引
  3. 混合索引

存储空间管理(对空闲区的管理)

空闲表

空闲表:把所有空闲块组织成表(连续分配的方式)

在这里插入图片描述在这里插入图片描述

空闲链表法

空闲链表法:把所有空闲块组织成链表

在一个盘区内,使用【空闲盘块链】,将空闲盘块用链表依次连接,在使用时,取链表头部的盘块;归还时,把盘块放在链表的尾部

在盘区之间,使用【空闲盘区链】,采用首次适应的算法,链接多个盘区

在这里插入图片描述

位示图

位示图:利用二进制位的每一位记录空闲块

若代表某一盘块的二进制位为0,则表示该盘块空闲;若二进制位为1,则表示该盘块被使用

在这里插入图片描述

成组链接:空闲表和空闲链表的结合,适合大的文件系统

4.3 磁盘的组织和管理

磁盘地址结构:柱面号、盘面号、扇区号(磁盘读写的最小单位)

引入【簇】系统是以【簇】为单位进行盘块分配的,比如一个【簇】大小为1KB,磁盘扇区大小为512B,所以一个簇内有两个扇区。现在有一个文件大小1026B,问需要磁盘空间大小多少。毫无疑问,1026B大于1KB,也就是1个簇,而小于2KB,也就是2个簇。所以需要2个簇,共计2048B

磁盘格式化

磁盘逻辑格式化时,系统将为【磁盘】建立新的文件根目录,并且对保存空闲磁盘块信息的【数据结构】进行格式化。

磁盘物理格式化时,系统会对【磁盘】重新分区,并且确定【磁盘扇区校验码】所占位数

读写时间

寻道时间:将磁头移动到指定磁道的时间

公式计算: T s = m ∗ n + s T_s=m*n+s Ts=mn+s —— 跨过一条磁道的时间是m,共跨过n条,s为启动磁臂的时间

延迟时间:磁头定位到某一磁道的扇区所需要的时间

公式计算: T r = 1 / 2 r T_r=1/2 r Tr=1/2r —— 1/r为磁盘装懂一周的时间,需要的扇区可能在开始也可能在结束,所以需要乘1/2

传输时间:从磁盘读出或向磁盘写入数据所经历的时间

公式计算: T t = b / ( r N ) T_t=b/(rN) Tt=b/(rN) —— 读写一个磁道需要1/r,需要b/N个磁道,N是每个磁道的承载数据数,b为所传送的数据数

启动时间:(一般忽略)控制器的启动时间

一次磁盘操作需要= T s + 1 / 2 r + b / ( r N ) T_s+1/2r+b/(rN) Ts+1/2r+b/(rN)

调度算法

先来先服务算法:根据进程请求访问磁盘的先后顺序进行调度。

  • 优点:简单;公平;不会发生磁壁黏着
  • 缺点:平均寻道距离大,仅应用在磁盘IO较少的场合

最短寻找时间优先:选择当前磁头所在磁道距离最近的请求。

  • 优点:性能比FCFS好
  • 缺点:不能保证平均寻道时间短;可能出现"饥饿"现象;可能会发生磁壁黏着

扫描算法:在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求(头撞南墙后原路返回)

  • 优点:寻道性能较好;可以避免"饥饿"现象
  • 缺点:不利于远离磁头一端的访问请求;可能会发生磁壁黏着

循环扫描:在扫描算法的基础上规定磁头单向移动来提供服务。

  • 优点:消除了对两端磁道请求的不公平
  • 缺点:可能会发生磁壁黏着

磁盘管理

初始化:对磁盘进行低级格式化和逻辑格式化

引导块:存放自举程序——存在ROM中,位于磁盘固定位置

近的请求。

  • 优点:性能比FCFS好
  • 缺点:不能保证平均寻道时间短;可能出现"饥饿"现象;可能会发生磁壁黏着

扫描算法:在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求(头撞南墙后原路返回)

  • 优点:寻道性能较好;可以避免"饥饿"现象
  • 缺点:不利于远离磁头一端的访问请求;可能会发生磁壁黏着

循环扫描:在扫描算法的基础上规定磁头单向移动来提供服务。

  • 优点:消除了对两端磁道请求的不公平
  • 缺点:可能会发生磁壁黏着

磁盘管理

初始化:对磁盘进行低级格式化和逻辑格式化

引导块:存放自举程序——存在ROM中,位于磁盘固定位置

坏块:对于损坏扇区的管理,在FAT表上标明——OS不能修复

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_之桐_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值