04 文件管理

第4章 文件管理

4.1 文件系统基础

4.1.1 初识文件管理

1.文件的属性

  • 文件名:同一目录下不允许有重名文件
  • 标识符:一个系统内的各文件标识符唯一
  • 类型
  • 位置:文件存放的路径、在外存中的地址(用户不可见)
  • 大小
  • 创建时间、上次修改时间、文件所有者信息
  • 保护信息

2.文件内部的数据应该如何组织(文件的逻辑结构)

在这里插入图片描述

3.文件之间如何组织(目录结构)

  • 文件通过目录将文件一层一层组织起来

在这里插入图片描述

4.操作系统应该向上提供哪些功能

  • 创建文件(create系统调用)
  • 读文件(read系统调用)
  • 写文件(write系统调用)
  • 删除文件(delete系统调用)
  • 打开文件(open系统调用)
  • 关闭文件(close系统调用)

注:以上是基本功能,若想完成更复杂的操作则可以采用几个基本功能实现;读/写文件前需要打开文件,后需要关闭文件

5.从上往下看,文件应如何存放在外存(文件的物理结构)

  • 磁盘块

在这里插入图片描述

在这里插入图片描述

6.其他功能

  • 文件共享
  • 文件保护

7.总结

在这里插入图片描述

4.1.2 文件的逻辑结构

1.逻辑结构 vs 物理结构

  • 逻辑结构:指在用户看来,文件内部的数据应该是如何组织起来的
  • 物理结构:指在操作系统看来,文件的数据是如何存放在外存中

2.无结构文件

  • 文件内部的数据由一系列二进制流或字符流组成,故又称为流式文件,如windows中的txt文件

3.有结构文件

  • 由一组相似的记录组成,又称为记录式文件每条记录由若干个数据项组成。如数据库表文件,一般来说每条记录有一个数据项作为关键字

  • 根据各条记录的长度(所占存储空间)是否相等,又可分为定长记录和可变长记录

  • 逻辑结构:顺序文件、索引文件、索引顺序文件

4.顺序文件

  • 记录可以是定长的或可变长的

  • 顺序存储:逻辑上相邻的记录物理上也相邻(类似于顺序表),可变长不可随机存取,定长可以随机存取

  • 链式存储:逻辑上相邻的记录物理上不一定相邻(类似于链表),无论定长还是不定长都无法实现随机存取

在这里插入图片描述

5.索引文件

  • 索引表本身是定长记录的顺序文件,因此可以快速找到第i个记录对应的索引项
  • 每当增加/删除一个记录时,需要对索引表进行修改
  • 主要用于对信息处理的及时性要求比较高的场合
  • 也可以用不同的数据项建立多个索引表

在这里插入图片描述

6.索引顺序表

在这里插入图片描述

在这里插入图片描述

7.多级索引顺序文件

在这里插入图片描述

8.总结

在这里插入图片描述

4.1.3 文件目录

1.文件控制块(实现文件目录的关键数据结构)

  • 目录文件中的一条记录就是一个文件控制块(FCB),FCB的有序集合称为文件目录,一个FCB就是一个文件目录项,FCB中包含了文件的基本信息,最重要、最基本的是文件名存放的物理地址

  • 对目录进行的操作:搜索、创建文件、删除文件、显示目录、修改目录

2.目录结构——单级目录结构

  • 整个系统中只有一张目录表,实现了按名存取,不允许文件重名
  • 单级目录不适用于多用户操作系统

3.目录结构——两级目录结构

  • 早期的多用户操作系统采用两级目录结构,分为主文件目录(MFD)和用户文件目录(UFD)

  • MFD记录用户名及相应用户文件目录的存放位置,UFD由该用户的文件FCB组成

  • 两级目录结构允许不同用户的文件重名,也可以在目录上实现访问限制,但用户不能对自己的文件进行分类

4.目录结构——多级目录结构(树形目录结构)

  • 各级目录之间用/隔开
  • 从根目录出发的路径称为绝对路径,绝对目录需要一层一层的从外存读取目录表,效率低
  • 从当前目录出发的路径称为相对路径,在Liunx中,.表示当前目录
  • 树形目录结构优点是方便对文件分类,层次结构清晰,能够有效地进行文件地管理和保护;缺点是不便于实现文件地共享,因此提出了无环图目录结构

5.目录结构——无环图目录结构

  • 在树形目录结构的基础上,增加一些指向同一节点的有向边,使整个目录称为一个有向无环图,可以实现多个用户之间的共享
  • 可以用不同的文件名指向同一文件
  • 需要为每个共享节点设置共享计数器
  • 共享文件不等于复制文件

在这里插入图片描述

6.索引节点(FCB改进)

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

7.总结

在这里插入图片描述

4.1.4 文件的物理结构(文件分配方式,对非空闲磁盘块的管理)——上

  • 文件数据怎样存放在外存中

1.文件块、磁盘块

  • 类似于内存分页,磁盘中的存储单元也会被分为一个个**“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同,内存与磁盘之间的数据交换都是以“块”为单位进行的**

  • 在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为一个个的块,因此文件的逻辑地址可以表示为(逻辑块号,块内地址),操作系统为文件分配存储空间都是以块为单位

  • 用户通过逻辑地址来操作自己的文件,操作系统负责实现从逻辑地址到物理地址的映射

2.文件分配方式——连续分配

  • 每个文件在磁盘上占有一组连续的块,文件目录中需要记录存放的起始块号和长度(总共占用几个块)
  • 物理块号 = 起始块号 + 逻辑块号
  • 优点:该方式可以直接算出逻辑块号对应的物理块号,因此连续分配支持顺序访问和直接访问(随机访问);读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需时间就越长。而连续分配的文件在顺序读/写时速度最快
  • 缺点:不方便文件拓展;空间利用率低,会产生磁盘碎片

在这里插入图片描述

3.链接分配——隐式链接(链接分配默认为隐式链接分配)

  • 目录中记录了文件存放的起始块号和结束块号。除了文件的最后一个磁盘块之外,每个磁盘块中都会保存指向下一个盘块的指针这些指针对用户是透明的
  • 缺点:只支持顺序访问,不支持随机访问,查找效率低;指向下一个盘块的指针也需要耗费少量的存储空间
  • 优点:很方便文件拓展,不会有碎片问题,外存利用率高
    在这里插入图片描述

4.链接分配——显示链接

  • 把用于链接文件各物理块的指针显示地放入一张表中,即文件分配表(FAT)

  • 目录中只需记录文件的起始块号

  • 注:一个磁盘仅设置一张FAT。开机时,将FAT读入内存并常驻内存。由于FAT各个表项在物理上连续存储,且每个表项的长度相同,因此“物理块号”字段是隐含的,所以逻辑块号转换成物理块号的过程不需要读磁盘操作

  • 优点:方便文件拓展,不会产生碎片,外存利用率高,并且支持随机访问。相比于隐式链接来说,地址转换不需要访问磁盘,因此文件的访问效率很高

  • 缺点:文件分配表FAT占内存

在这里插入图片描述

4.1.4 文件的物理结构(文件分配方式,对非空闲磁盘块的管理)——下

1.文件分配方式——索引分配

  • 系统为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(类似于页表,但不同于文件分配表,因为文件分配表是一张磁盘对应一个表),索引表存放的磁盘块称为索引块,文件数据存放的磁盘块称为数据块
  • 目录中需要记录文件的索引块是几号磁盘块
  • 优点:支持随机访问,文件拓展容易实现
  • 缺点:索引表占外存空间
  • 一个索引表大小如果超过了一个磁盘大小,有三种解决方案:链接方案、多层索引、混合索引

在这里插入图片描述

2.索引分配——链接方案

  • 多个索引块链接起来存放

在这里插入图片描述

3.索引分配——多层索引

  • 类似于多级页表

在这里插入图片描述

4.索引分配——混合索引

  • 多种索引分配的结合

在这里插入图片描述

5.索引分配总结

在这里插入图片描述

6.总结

在这里插入图片描述

4.1.5 文件存储空间管理(对空闲磁盘块的管理)

1.存储空间的划分与初始化

  • 存储空间划分:将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)

  • 存储空间的初始化:将各个文件卷划分为目录区、文件区,目录区主要存放目录信息(FCB)、用于磁盘存储空间管理的信息,文件区主要用于存放文件数据

  • 有的系统支持超大型文件,可支持由多个物理磁盘组成一个文件卷

在这里插入图片描述

2.存储空间管理——空闲表法

  • 空闲盘块表由第一个空闲盘块号和空闲盘块数组成,适用于连续分配方式
  • 分配磁盘块:同样可以采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间
  • 回收磁盘块:回首时需要注意表项的合并问题

在这里插入图片描述

3.存储空间管理——空间链表法

  • 分为空闲盘块链和空闲盘区链

在这里插入图片描述

  • 空闲盘块链:操作系统保存着链头、链尾指针。分配时从链头摘下K个盘块分配,并修改空闲链的链头指针;回收时回收的盘块依次挂到链尾,并修改空闲链的链尾指针。适用于离散分配的物理结构

在这里插入图片描述

  • 空闲盘区链:操作系统保存着链头、链尾指针

在这里插入图片描述

4.存储空间管理——位示图法

在这里插入图片描述

在这里插入图片描述

5.存储空间管理——成组链接法

  • 空闲表法、空闲链表法不适合大型文件系统,因为空闲表或空闲链表可以过大,UNIX系统采用了成组链接法对磁盘空闲块进行管理。
  • 文件卷的目录区中专门有一个磁盘块作为超级块,当系统启动时需要将超级块读入内存

在这里插入图片描述

6.总结

在这里插入图片描述

4.1.6 文件的基本操作

1.创建文件

  • 调用了Creat系统调用,并做了以下事情:在外存中找到文件所需的空间;在目录总创建该文件对应的目录项

在这里插入图片描述

2.删除文件

  • 调用了delete系统调用,并做了以下事情:从目录中找到文件名对应的目录项;回收文件占用的磁盘块;删除文件对应的目录项

在这里插入图片描述

3.打开文件

  • 调用了open系统调用,并做了以下事情:从目录中找到文件名对应的目录项,并检查该用户是否有指定的操作权限;将目录项复制到内存中的打开文件表中,之后用户使用打开文件表的编号来指明要操作的文件

在这里插入图片描述

  • 打开文件表分为两种,一种是用户进程的打开文件表,另一种是系统的打开文件表(整个系统只有一张)

在这里插入图片描述

4.关闭文件

  • 调用了Close系统调用,并做了以下事情:将进程的打开文件表相应表项删除;回收分配给该文件的内存空间资源;系统打开文件表的打开计数器count减1,若count=0,则删除对应表项

在这里插入图片描述

5.读文件

  • 调用了read系统调用,需要指明哪个文件(打开文件表中的索引号)、读入多少数据和读入数据要放在内存中的什么位置。

在这里插入图片描述

6.写文件

  • 调用了read系统调用,需要指明哪个文件(打开文件表中的索引号)、写入多少数据和写入数据要放在内存中的什么位置。

在这里插入图片描述

7.总结

在这里插入图片描述

4.1.7 文件共享

  • 操作系统允许多个用户共享同一个文件,意味着系统中只有“一份”文件数据。

1.基于索引节点的共享方式(软链接)

  • 将不同用户的索引节点指针指向同一个索引节点

在这里插入图片描述

2.基于符号链的共享方式(软链接)

  • 目录项的索引节点指针不会直接指向目标文件的索引节点,而是创建了一个Link类型文件,该文件记录了目标文件的存放路径(类似于windows中的快捷方式)

在这里插入图片描述

3.总结

在这里插入图片描述

4.1.8 文件保护

1.口令保护

  • 为文件设置一个口令(如:aaa),用户请求访问该文件时必须提供“口令”。口令一般存放在文件对应的FCB或索引节点中
  • 优点:保存口令的空间开销小,验证口令的时间开销也小
  • 缺点:口令存在系统内部,不安全

2.加密保护

  • 使用某个密码对文件进行加密,在访问文件时需要提供正确的密码才能对文件进行正确的解密,如异或加密
  • 优点:保密性强,不需要在系统中存储密码
  • 缺点:编码/译码(加密/解密)花费时间长

在这里插入图片描述

3.访问控制

  • 在每个文件的FCB(或索引节点)中增加一个访问控制表,该表中记录了各个用户的权限
  • 精简的访问列表:以组为单位,标记各组用户可以对文件执行哪些操作

在这里插入图片描述

在这里插入图片描述

4.Windows的访问控制

5.总结

在这里插入图片描述

4.1.9 文件系统的层次结构

  • 从上到下依次是第6节-第3节-第8节-第2节-第4节-第5节学习的内容,而设别管理模块将在磁盘学习

在这里插入图片描述

在这里插入图片描述

4.2 磁盘

4.2.1 磁盘的结构

1.磁盘、磁道、扇区

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

  • 磁道:磁盘的盘面被划分为一个个磁道,一个圈就是一个磁道

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

在这里插入图片描述

2.如何在磁盘中读写

  • 先将磁头放到要读写的扇区,然后磁盘转动进而读写

3.磁盘的物理结构

  • 磁盘块可以用柱面号、盘面号、扇区号来定位

在这里插入图片描述

4.磁盘的分类

  • 磁头是否移动:活动头磁盘(每个盘面只有一个磁头)和固定头磁盘(每个磁道有一个磁头)
  • 盘片是否更换:可换盘磁盘和固定盘磁盘

5.总结

在这里插入图片描述

4.2.2 磁盘的调度算法

1.一次磁盘读写操作需要的时间

  • 寻找时间(寻道时间)Ts:启动磁头臂的时间+移动磁头时间
  • 延迟时间Tr:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。磁盘转速越块,延迟时间越短
  • 传输时间:从磁盘读出或向磁盘写入数据所经历的时间

在这里插入图片描述

2.先来先服务(FCFS)

  • 根据进程请求访问磁盘的先后顺序进行调度
  • 优点:公平,如果请求访问的磁盘比较集中,则算法性能还可以
  • 缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长

在这里插入图片描述

3.最短寻找时间优先(SSTF)

  • 优先处理的磁道是与当前磁头最近的磁道
  • 优点:性能较好,平均寻道时间短
  • 缺点:可能会产生饥饿现象

在这里插入图片描述

4.扫描算法(SCAN),又称为电梯算法

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

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

  • 缺点:只有达到最边时才会改变磁头方向;各个位置磁道的响应频率不平均

在这里插入图片描述

5.LOOK调度算法

  • 如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向,解决了SCAN算法的第一个缺点

在这里插入图片描述

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

  • 返回时直接快速移动到起始端而不处理任何请求,解决了SCAN算法的第二个缺点

在这里插入图片描述

7.C-LOOK算法

在这里插入图片描述

8.总结

在这里插入图片描述

4.2.3 减少磁盘延迟时间的方法

  • 延迟时间:将目标扇区转到磁头下面所花的时间
  • 磁头读入一个扇区数据后需要一小段时间处理,如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的延迟时间

1.减少延迟时间的方法:交替编号

  • 让逻辑上相邻的扇区在物理上有一定的间隔

在这里插入图片描述

2.磁盘地址结构的设计

在这里插入图片描述

3.减少延迟时间的方法:错位命名

在这里插入图片描述

4.总结

在这里插入图片描述

4.2.4 磁盘管理

1.磁盘初始化

  • step1:进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区通常可以分为头、数据区域、尾三个部分组成
  • step2:磁盘分区
  • step3:逻辑格式化

在这里插入图片描述

2.引导块(用于存放自举程序)

在这里插入图片描述

3.坏块的管理

  • 磁盘控制器

在这里插入图片描述

4.总结

在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值