操作系统文件管理

文件管理

文件的逻辑结构

无结构文件

一系列二进制流或字符流组成

有结构文件

由一组相似的记录组成

  1. 顺序文件
    文件中的记录一个接一个排序,可以是定长也可以是可变长。各个记录在物理上可以是顺序储存或链式储存
    分为串结构和顺序结构,串结构记录之间的顺序和关键字无关,顺序有关
  2. 索引文件
    建立索引表指向逻辑文件。索引表固定长度,定长顺序文件,可以随机访问
  3. 索引顺序文件
    索引表里面的项指向顺序文件的第一个
    顺序文件和索引文件的结合

文件目录

文件控制块

目录文件记录了目录下所有文件的属性,包括文件名、类型、物理地址等。目录文件中的每一条记录就是一个文件控制块FCB
FCB实现了文件名和文件之间的映射。
操作
搜索
创建
删除
显示目录
修改目录

目录结构

  1. 单级目录结构
    系统中只有一张目录表,不允许重名
  2. 两级目录结构
    分主文件目录和用户文件目录
    不同用户的文件运行重名
  3. 多级目录结构
    结构像一个树,目录是内节点,非目录文件是子节点
    相对路径和绝对路径、
  4. 无环图目录结构
    可以用不同的文件名指向同一个文件
    实现共享文件。

索引结点

为了减少目录文件的大小,PCB里面只储存文件名和一个索引结点的指针。索引结点里面储存了除文件名外其他的信息

文件的物理结构

文件的逻辑地址空间被分成了一个一个文件的块

连续分配

每个文件在磁盘上占据一组连续的块
文件目录中记录文件名和起始块号(其实就是地址)
优点:

  1. 支持顺序访问和随机访问
  2. 连续分配的文件在顺序读写时速度最快

缺点:

  1. 文件拓展不方便
  2. 存储空间利用率低,容易产生碎片

链接分配

采取离散分配的方式,可以为文件分配离散的磁盘块。分为显式链接和隐式链接

隐式链接

目录文件中记录了起始和结束块号。每个目录项中保存了指向下一个块的指针。
只支持顺序访问,不支持随机访问
文件拓展方便

显式链接

目录文件中记录文件名和起始块号等信息。用一个文件分配表FAT记录所有的块的下一个块。每个磁盘只需要一张FAT
方便拓展,不会产生碎片,支持随机访问,访问效率高。
需要一定的存储空间来存放FAT

索引分配

允许文件离散地分配在磁盘块中,系统会为每个文件创建一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。索引表存放的磁盘叫索引块,文件数据存放的磁盘块叫数据块。目录文件里面储存了文件名和索引块的地址。
支持随机访问,容易拓展
如果索引表太大,可以用隐式链接等方法链接多个索引表(超长情况下搜索花费也很大)或者多层索引(这个比较快)或者混合索引(一个文件索引表中既包含直接地址索引,也包含一级间接索引和多级间接索引)

文件储存空间管理

存储空间划分与初始化

磁盘分区:将物理磁盘划分为一个个文件卷
每一个文件卷分为目录区和文件区

存储空间管理

  1. 空闲表法:将所有连续存储空间的第一个磁盘块号储存起来,并记录该储存空间有多少个磁盘块。磁盘块分配也是由首次适应、最近适应等算法进行分配。回收磁盘块时需要更新空闲盘块表的数据。
  2. 空闲链表法
    1. 空闲盘块链:操作系统储存链头和链尾的磁盘块的指针,每个磁盘块有一个指针指向下一个磁盘块。分配空间时按照链表的顺序一个个磁盘块分配
    2. 空闲盘区链:操作系统储存链头和链尾指针,每个盘区头部有指针指向下一个盘区的头部。分配跟空闲表法一样
  3. 位示图法
    每个二进制位对应一个盘快。0表示空闲,1表示已分配
  4. 成组链接法
    文件卷的目录区中储存一个超级块,当系统启动时需要将超级块读入内存,并且保证内存与外存的超级块数据一致。超级快储存了下一组空闲盘块数以及每一个空闲块号。每一个盘快号又储存下一个空闲盘块。

文件的基础操作

  1. 创建文件
    调用create系统调用
    传入参数:所需外存大小,路径,文件名
    create系统调用时,操作系统在外存中找到文件所需要的空间,根据文件存放路径找到对应的目录文件,在该目录文件下创建该文件的目录项
  2. 删除文件
    调用delete系统调用
    传入参数:路径,文件名
    delete系统调用时,操作系统根据路径找到目录文件,从目录中找到对应的目录项,根据目录项记录的存放位置,文件大小等回收磁盘块,再从目录表中删除对应文件的目录项
  3. 打开文件
    调用open系统调用
    传入参数:路径,文件名,对应的操作类型
    open系统调用时,操作系统按照路径找到目录文件从中找到目录项,检测用户是否有权限,如果有就将目录项负责到内存中的打开文件表中,将对应表目的编号返回给用户,之后用户使用打开文件表的编号来指明要求操作的文件
  4. 读文件
    调用read系统调用
    read系统调用需要指明打开的文件以及读入的数据和内存中的存放位置。
  5. 写文件
    write系统调用
    跟读文件差不多

文件共享

基于索引结点(硬连接)

索引结点(前面文件目录里面有介绍)中设置一个count,表示链接到本结点上的用户目录项数,当用户删除该数据时只删除相应用户里面的信息并且使count–。若count==0才将索引结点删掉

基于符号链(软连接)

跟索引结点有关联,创建的索引结点指针指向一个索引结点,索引结点指向的文件里面记录了另外一个文件的路径,根据路径再找到相应的文件。就不直接指向数据,而是间接指向一个指向数据的文件。类似快捷方式

文件保护

口令保护

设置口令,保存和验证的开销都很小,但口令存储在文件内部,不够安全

密码保护

密码加密(不是日常理解的密码,上面的口令更接近常用的密码)
将原始数据按照一定的算法跟密码进行计算,使得保存的数据跟源数据不一样。读取时输入密码再按照算法跟加密后的数据进行运算得到源数据
保密性强,但编码译码需要一定的时间

访问控制

每个文件的FCB中增加一个文件控制列表,记录各个用户对本文件的权限

磁盘的结构

磁盘磁道扇区

磁盘:由磁性物质组成,用来记录二进制数据
磁道:磁盘被划分成一个个同心弧(圈),每个轨道就是一个磁道
扇区:磁道被划分为一个个弧,每个扇区就是一个数据块。越靠近圆心的扇区数据就越密集

读写数据

将磁头移动到相应的磁道,磁盘旋转移动到相应的扇区

磁盘调度算法

调度:将磁头移动到相应的磁盘块进行数据处理操作,对于多个请求,设计磁头移动的顺序为调度。

先来先服务FCFS

按照到来的顺序移动磁头
公平,但是性能差,寻道时间长

最短寻找优先SSTF

选择离当前磁道最近的磁道,贪心思想,未必最优
性能较好,但是有可能造成饥饿

扫描算法

磁头只有移动到最外层才能往内移动,只有移动到最内层才能往外移动
性能较好,不会产生饥饿,但响应频率不平均,而且有时候不需要完全移动到最外或者最内,到最外或最内的那个请求即可。

LOOK调度算法

解决扫描算法磁头只有到最外最内才能改变方向的缺点
内容:如果移动方向上已经没有请求了那么就可以改变方向

循环扫描算法

解决扫描算法响应不平均的缺点
只有一个方向的移动才能处理请求,到了末端后移动到开头重新扫描

C- LOOK调度算法

结合上面两个算法就是了

一些减少时延的算法

交替编号

如果要读取同一个磁道上相邻的扇区,因为磁盘一直在旋转,所以无法无缝连接地读下去,而是需要等磁盘再转一圈后才能准备好读取。交替编号的思想就是把逻辑上相邻的数据在磁道上交替编号(也就是中间夹着其他的扇区),给磁头充足的时间去准备读取下一个磁块,这样就能在更少的圈内实现数据读取。

错误命名

各个磁盘扇区的编号不一样。本质上还是给磁头充足的反应去准备读取

磁盘管理

磁盘初始化

  1. 低级格式化,将磁盘的各个磁道划分为扇区
  2. 磁盘分区,每个分区由若干个柱面组成
  3. 逻辑格式化,创建文件系统

引导块

计算机开机时需要执行一系列初始化程序,完整的初始化程序储存在磁盘的固定位置,自举装入程序写在ROM中只执行一小部分的初始化,然后启动磁盘中完整的初始化程序

坏块管理

逻辑格式化时对于坏块进行标记(简单磁盘)
维护坏块链表(复杂的磁盘)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值