操作系统学习笔记(5. 文件管理)

个人用书:操作系统教程 第五版 费翔林
学习视频: 王道计算机考研 操作系统.

文件管理

文件的属性

  • 文件名:由创建的用户决定文件名,同一目录下不允许有重名文件。
  • 标识符:一个系统内的各文件标识符唯一,用户不可读。
  • 类型:指明文件的类型。
  • 位置:文件存放的路径(用户使用)。外存的地址(OS使用,用户不可见)
  • 创建时间,上次修改时间,文件所有者信息
  • 保护信息:对文件进行保护的访问控制信息。

文件的逻辑结构

逻辑结构:用户看来文件内部的数据是如何组织的。

物理结构:OS看来,数据是怎么存放在外存忠的。

无结构文件

文件的内部的数据是一系列二进制流或字符流。eg:txt文件

有结构文件

由一组相似的记录组成。每条记录若干个数据项组成。eg:数据库表文件

  • 顺序文件

文件忠的记录一个接一个的排列(逻辑上)。记录可以是定长或可变长的。各个记录在物理上可以顺序存储或链式存储。

如果使用链式存储,无论定长还是可变长,每次都只能从第一个记录开始依次往后查找。

如果使用顺序存储,如果是可变长记录,无法实现随机存取。每次只能从第一个记录开始往后查找。如果是定长记录,可实现随机存取。如果使用串结构(不按关键字排序)则无法快速找到关键字对应记录。如果使用顺序结构,可以快速找到某关键字对应的记录。

  • 索引文件

对于可变长的记录文件,要找到第i个记录,必须先找到第i-1个记录。

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

  • 索引顺序文件

索引文件的缺点:如果每一个记录对应一个表项,索引表会很大。为了解决这个问题,一组记录对应一个索引表项。

可以先查找分组,再查找组内记录。

文件的物理结构!!!(文件分配方式)

OS需要对磁盘进行哪些管理:对非空闲磁盘块的管理,对空闲磁盘块的管理。

文件的物理结构

文件块:类似于内存的分页,磁盘的存储单元也会被分为一个个“块/磁盘块/物理块”

  • 连续分配

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

逻辑地址到物理地址映射:(逻辑块号,块内地址)->(物理块号,块内地址)只需要转换块号,块内地址保持不变

文件目录中记录存放的起始块号和长度。

优点:连续分配支持顺序访问和直接访问(随机访问)。

补充:读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需的时间越长。

结论:连续分配的文件在顺序读写的时候速度最快。

缺点:如果文件A要拓展,需要增加磁盘块,必须把整个文件全部移动。如果需要创建新的文件,离散的块难以利用。
  • 链接分配

隐式链接:只记录了起始块号。用户访问i,从目录中将0读入内存,再找1,2,3…i。一共要读取i+1次。

优点:方便文件拓展。
缺点:只支持顺序访问,不支持随机访问。

显示链接:用于链接文件的指针显示的存放在一张表(FAT)中。FAT读入后常驻内存。

优点:支持顺序和随机访问。不会产生外部碎片。
缺点:文件分配表需要一定的空间。
  • 索引分配

文件离散分配在各个磁盘块中,系统为每个文件建立索引表。索引表记录了文件的各个逻辑块对应的物理块。索引表存放的磁盘块称为索引块,文件数据存放的磁盘块称为数据块。

如果一个磁盘块装不下整张索引表:

  1. 链接方案:可以将多个索引块链接起来存放。想找到i索引块,需要先找到0-i-1号索引块。
  2. 多层索引:类似多级页表,第一层索引块可以索引第二层索引块。k层索引,访问数据块需要读k+1次。
  3. 混合索引:多种索引分配方式混合,一层索引表可以包含一级索引表,同时可以包含多层索引表。

考点:根据多层索引,混合索引的结构计算文件的最大长度。能分析访问某个数据块所需要的读磁盘次数。

文件存储空间管理

存储空间的划分与初始化

安装windows OS的时候会把磁盘分区。CDE盘等。每个文件卷分为目录区和文件区。

目录区:存放FCB,磁盘存储空间管理的信息。
文件区:存放文件数据。

存储空间管理

空闲表法

如何分配磁盘块:与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间。

如何回收磁盘块:注意回收区前后是否空闲,注意表项的合并问题。

空闲链表法

分为 空闲盘块链 和 空闲盘区链。 (多个连续的空闲或者占用的盘块可以作为一个盘区)

空闲盘块:OS保存着链头,链尾指针。

如何分配:文件申请K个盘块,从链头依次摘下K个盘块分配。

如何回收:回收的盘块依次挂到链尾,并修改空闲链的链尾指针。

空闲盘区:OS保存着链头,链尾指针。

如何分配:需要采用首次适应,最佳适应等算法,找到符合要求的空闲盘区。也可以将不同的盘区分给一个文件,需要修改相应的链指针,盘区大小等数据。

如何回收:若回收区和某个空闲盘区相邻,需要将回收区和空闲区合并作为一个单独的盘区挂到链尾。

位示图法

每个二进制位对应一个盘块。在本例中“0”代表盘块空闲。“1”代表已分配。

!!!需要自己推出盘块号与(字号,位号)转换的公式。注意题目的盘块号,字号,位号是从0还是1开始。

(字号,位号) = (i , j)的二进制对应的盘块号 b = ni + j。

成组链接法

空闲表法,空闲链表法不适用于大型文件系统。

文件卷的目录区中专门用一个磁盘块作为“超级块”,系统启动时需要将超级块读入内存。并且要保证内存与外存的“超级块”数据一致。

超级块:需要记录下一组空虚盘块数,空闲块号。

文件的基本操作

创建文件

进行Create系统调用时,需要提供的几个参数:

  1. 所需的外存空间大小(如:一个盘块,1kb)
  2. 文件存放路径(“D:/Demo”)
  3. 文件名(这个地方默认为“新建文本文档.txt”)

OS在处理Create系统调用时,主要做了两件事:

  1. 在外存中找到文件所需的空间。
  2. 根据文件存放路径的信息找到该目录对应的目录文件。在目录中创建该文件的目录项。

删除文件

进行Delete系统调用,需要提供几个参数:

  1. 文件存放路径。
  2. 文件名称。

OS处理Delete:

  1. 根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项。
  2. 根据目录项记录的文件在外存的存放位置。
  3. 从目录表删除文件的目录项

打开文件

在很多OS中,需要open系统调用,参数:

  1. 文件存放路径
  2. 文件名
  3. 需要的操作类型

OS处理open:

  1. 根据路径找到目录文件,从目录找到目录项,检查用户是否有权限
  2. 将目录项复制到打开文件表。将对应的表目标号返回用户,用户使用打开文件表的编号指明要操作的文件。

这之后用户进程操作文件就不需要查目录了,加快文件访问速度。

一共有两种打开文件表。(用户进程的打开文件表,系统打开文件表)
系统的打开文件表会记录某个文件被打开了多少次,当需要删除的时候如果文件被占用则不能删除。

读,写文件

读写文件之前,都需要把文件先打开。

  • 读文件时,指明读多少数据,存放位置。OS的读指针指向外存,把用户需要的数据读入内存。
  • 写文件时,指明写多少数据,存放位置。OS把内存中数据存入外存。

文件共享

注意:多个用户共享同一个文件,意味着系统中只有一份文件,一个用户修改,别的用户可见。与复制相区分
###基于索引结点的共享方式
索引结点:检索文件只需要文件名,可以把文件名之外的其他信息放入索引结点。目录项只包含文件名,索引结点指针。

索引结点中设置一个链接计数变量count,表示链接到本索引结点上的用户目录项数。若count = 2 说明有两个用户在共享这个文件。若count > 0 说明有用户在使用,文件不能删除。

基于符号链的共享方式

文件2是一个LINK类型的文件,这个文件会根据其中记录的文件存放路径,OS根据路径找到该文件。(快捷方式)

文件保护

口令保护

为文件设置一个口令,用户访问该文件必须提供口令。

优点:保存口令开销不多,验证口令的时间开销很小。
缺点:正确的口令存放在系统中,不安全

###加密保护
可以用某个密码加密,访问文件需要提供正确的密码才能正确解析文件。

eg:简单的加密算法——异或加密。

优点:保密性强,不需要系统存放密码。
缺点:加密解密需要花费时间

访问控制

系统在FCB中增加访问控制表,表记录用户的权限。

有的计算机可能用户很多,导致访问控制表很长,可以使用精简访问控制表:以组为单位,标记各组可以进行的操作。

磁盘的结构

磁盘,磁道,扇区

  • 磁盘:磁盘表面有一些磁性物质组成,用这些磁性物质记录二进制数据。
  • 磁道:磁盘的盘面上有一圈圈的环状磁道。
  • 扇区:一个磁道被划分为多个扇区

需要把磁头移动到想读写的磁道,磁盘转起来,让目标扇区从磁头下面划过,才能完成读写。

磁盘是多层的,每层一个盘面,一个磁头。磁头是被固定在一起的,只能共进退。

(柱面号,盘面号,扇区号)来定位任意一个“磁盘块”。可以根据该地址读取一个块。

磁盘的分类

磁头:

  • 磁头可以移动的称为活动头磁盘。磁臂可以来回伸缩。
  • 磁头不可移动称为固定头磁盘。

盘面:

  • 盘片可更换
  • 盘片不可更换

磁盘调度算法

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

  • 寻找时间Ts:在读写数据前,需要移动磁头。启动磁头臂所需要时间s,移动磁头(假设均匀移动)每跨越一个磁道需要m,总n磁道。Ts = s + m*n
  • 延迟时间Tr:旋转磁盘,磁头定位到扇区需要时间。转速为r(单位:转/秒。转/分)平均所需的延迟时间TR = (1/2)*(1/r) = 1/2r
  • 传输时间Tt:从磁盘读写数据所需要的时间,假设转速r,读写字节数目b,每个磁道字节数N。 Tt = (1/r)*(b/N) = b/(rN)

总时间 Ta = Ts + 1/2r + b/(rN)唯一可以影响的时间是寻找时间。

先来先服务算法FCFS

根据访问磁盘的先后顺序进行调度。

优点:公平,先到先服务,如果访问的磁道集中,算法性能还行。
缺点:大量进程使用磁盘,请求访问的磁道分散,FCFS性能上很差。

最短寻找时间优先SSTF

会优先处理与当前磁头最近的磁道。保证每次的寻道时间最短,但是不能保证总的寻道时间最短。

优点:性能较号,平均寻道时间短。
缺点:可能产生“饥饿”现象。磁头可能在小区域内来去移动。

扫描算法SCAN

磁头只有到达最外层才能往内移动,到达最内侧才能往外移动。

优点:性能较好,平均寻道时间较短,不会产生饥饿现象。
缺点:只有到达磁道边才能改变方向。SCAN对于各个位置磁道的响应频率并不平均。

LOOK调度算法(改进的SCAN)

如果磁头移动方向已经没有别的请求可以立即改变方向。

优点:比起传统SCAN扫描时间缩短

循环扫描算法C-SCAN(改进的SCAN)

磁头只有朝某个方向移动方式才处理请求,返回的时候快速返回起始端。

优点:比起SCAN对各个磁道的响应频率平均
缺点:只有到达边上才能改变磁道方向,比起SCAN算法,平均寻道时间长。

C-LOOK调度算法

比起C-SCAN只需要返回到有请求的位置

优点:比传统的LOOK使寻道时间进一步缩短。

减少延迟时间的方法

假设磁头要读取2,3,4扇区,读完2后磁头要时间处理,此时经过3不能读取,需要磁盘下一次转到3。导致读入几个连续的扇区需要很长的延迟时间。

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

若采用交替编号策略,即让逻辑上相邻的扇区有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小。

磁盘地址结构的设计

磁盘的物理地址是(柱面号,盘面号,扇区号)。

这样设计可以读完一个柱上所有扇区后再移动磁头。

错位命名

让相邻盘面的扇区编号错位

磁盘的管理

磁盘初始化

磁盘初始化:

  1. 进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区可以分为头,数据区域,尾三个部分组成。管理扇区所需要的各种数据结构一般放在头尾。包括扇区校验码,循环冗余校验码。
  2. 将磁盘分区,每个分区有若干柱组成。
  3. 进行逻辑格式化,创建文件系统。包括创建文件系统根目录,初始化存储空间管理所用的数据结构。

引导块

计算机开机时需要进行一系列的初始化工作。这些初始化工作是通过执行初始化程序完成的。

完整的自举程序放在磁盘的启动块上,启动块位于磁盘的固定位置。

ROM:初始化程序放在ROM(只读)存放自举装入程序。

拥有启动分区的磁盘叫做系统盘(C:)

坏块的管理

坏了,无法正常使用的扇区是“坏块”。OS是不能修复的,应该将坏块标记出来,以免错误的使用。

对于简单的磁盘,可以再逻辑格式化的时候,对整个磁盘进行坏块检查,标明哪些是坏扇区。

对于复杂的磁盘,磁盘控制器维护一个坏块链表,再磁盘出场前低级格式化时将坏块链进行初始化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值