> 文档中心 > 操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

操作系统----文件管理 参考王道操作系统与小林coding图解操作系统


前置:简单的个人学习笔记上传,仅供参考,想要md文档的可以评论留言

参考内容

CSDN博主 BitHachi的博文 《王道操作系统》学习笔记总目录+思维导图

CSDN博主 小林coding的图解操作系统

4 文件管理

4.1 文件管理与文件系统概述

4.1.1 文件管理主要内容

  • 文件系统的层次机结构

  • 文件的内部组织,即文件的逻辑机构

  • 文件的外部组织,即目录机构

  • 文件的存放,文件的分配方式,即文件的物理结构

  • 空闲磁盘的管理

  • 操作系统提供的对文件的基本操作

  • 操作系统提供的额外功能:文件共享与问价加密

4.1.2 文件系统的层次

操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

4.1.3 文件的逻辑结构

  • 无结构文件

    • 文件内部的数据就是一系列二进制流或者字符流组成,没有明显的结构特性,又称“流式文件”。
  • 有结构文件:由一组相似的记录组成,又称“记录式文件”

    • 按照记录的长度是否相等进行分类

      记录:参考数据库表的行记录,一行记录又由若干个数据项(列)组成

      每个记录一般还会有一个数据项作为关键字,标识每条记录(主键)

      • 定长记录
      • 可变长记录
    • 根据记录的逻辑组织方式分类

      • 顺序文件:逻辑上是连续存储的
        • 物理存储方式
          • 顺序存储,类似于顺序表,物理上连续
          • 链式存储,类似于链表,物理上不一定连续
        • 记录的存放顺序
          • 串结构:按照记录存放的时间顺序链接
          • 顺序结构:按照关键字的顺序进行排序
      • 索引文件
        • 通过建立索引表,记录索引与记录之间的关系(参考数据库索引)
      • 索引顺序文件
        • 一个索引对应一组记录
        • 每组记录是一个顺序文件
      • 多级索引顺序文件按
        • 顶级索引
        • 低级索引
        • 顺序表

4.1.4 文件的目录结构

  • 文件目录的实现
    • 目录项(文件控制块/FCB)
      • 用来存放文件的文件名和索引节点的指针
      • 以及其它目录项的层级关联关系
    • 索引节点(inode)
      • 用来记录文件的元信息
        • 文件大小
        • 访问权限
        • 创建,修改时间
        • 数据在磁盘的位置
  • 目录的结构
    • 单级目录结构
      • 整个系统建立一张目录表,每个文件占一个目录项
    • 两级目录结构
      • 主文件目录
        • 记录用户名及响应的用户文件目录的存放位置
      • 用户文件目录
        • 存放用户的文件,由用户的文件FCB组成
    • 多级目录结构(树形目录结构)
      • 绝对路径
      • 当前目录和相对路径
        • 可以减少磁盘I/O的次数
    • 有向无环图目录结构
      • 在树形目录结构的基础上,增加了一些指向同一节点的有向边,使整个目录成为一个有向无环图,可以利用不同的文件名指向同一个文件,方便文件共享。

4.1.5 文件的物理结构(物理存储分配)

  • 文件块,物理块

    • 与内存相似,物理磁盘也被分为大小相等的块(物理块),文件的逻辑地址也被分成了大小相等的文件块。
    • 操作系统为文件分配存储空间都是以块为单位的
    • 通过(逻辑块号,块内地址)得到(物理块号,块内地址)
  • 分配方式

    • 连续分配

      • 每个文件在磁盘上占有一组连续的块
      • 索引节点记录文件的起始块号和块的个数
      • 优缺点
        • 文件的顺序读写快
        • 不方便扩展,容易产生磁盘碎片
    • 非连续分配:链式分配和索引分配

      • 链式分配:隐式链接和显式链接

        • 隐式链接

          • 索引节点记录文件存放的起始块号和结束块号

          • 除了结束块号,每个块都要存放指向下一个块的指针

          • 优缺点

            • 不支持随机访问,只能顺序访问,指针存储也要消耗空间
            • 可以解决碎片问题,方便文件扩展
        • 显式链接

          • 只需记录文件的起始块号
          • 把用于链接文件各物理块的指针显示的存放在一张表中,即文件分配表(File Allocation Table,FAT)
          • FAT存放在内存中并且常驻内存
          • 优缺点
            • 解决了碎片问题,而且支持随机访问
            • 不适用于大磁盘,大磁盘的FAT会占用太多内存
      • 索引分配:为每个文件都建立索引表,索引表记录文件的逻辑块对应的物理块,索引节点记录索引块(即记录索引表所在的物理块)

        操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

        • 链式索引块:

          操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

          • 索引表太大,一个索引块装不下,可以将多个索引块链接起来
          • 只能顺序访问多个索引块,而且指针受损会损坏文件
        • 多级索引:

          操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

          • 建立多层索引,第一层的索引块指向第二层的索引块
          • 各层的索引表的大小不能超过一个物理块的大小
          • 各级索引表未调入内存的情况下,访问一个数据块需要 k+1 次磁盘I/O
          • 优缺点
            • 对小文件而言,也要进行 k+1 次磁盘I/O
        • 混合索引

          操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

          • 多种索引方式结合,既包含含直接索引,又包含一级间接索引,还包含多级间接索引

4.1.6 空闲磁盘的管理算法

  • 空闲表法

    操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

    • 适用于连续分配方式
    • 为所有的空闲空间建立一张表,表中包含空闲空间的第一个块号和空闲块的个数
  • 空闲链表法

    操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

    • 空闲盘块链:以盘块为单位组成一条空闲链
    • 空闲盘区链:以盘区为单位组成一条空闲链 (连续的空闲盘块组成空闲盘区)
  • 位示图法

    • 利用二进制的一位表示磁盘的使用情况,每个盘块都有一个二进制位与其对应
    • 值为0表示对应的盘块空闲,值为1表示盘块已经分配
  • 成组链接法

操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

4.1.7 文件的基本操作

  • 创建文件(create系统调用)

    • 在外存找到空闲空间
    • 在对应路径的目录表中创建目录项
  • 删除文件(delete系统调用)

    • 找到文件名对应的目录项和索引节点
    • 回收磁盘
    • 删除目录项和索引节点
  • 打开文件(open)

    • 根据文件名找到目录项和索引节点,确定当前用户的权限

    • 在当前文件的相关信息放入当前进程和系统的打开文件表中

    • 根据打开文件表的编号进行后续的操作

      每个进程有一个打开文件表,每条记录都有一个编号,此外还有文件名,读写指针,访问权限,系统打开文件表中对应的索引号

      整个系统只有一个打开文件表,记录文件名,外存地址,打开计数器等

  • 关闭文件(close)

    • 删除进程的打开文件表中对应的表项
    • 回收分配给该文件的内存空间等资源
    • 系统的打开文件表的打开计数器count - 1,若count =0,则删除对应的表项
  • 读文件(read)

    • 根据读指针将数据从外存读到内存
  • 写文件(write)

    • 根据写指针将指定大小的数据写回外存

4.1.8 文件的共享 软链接和硬链接

  • 硬链接

    操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

    • 多个目录项的索引节点指针指向同一个索引节点(inode)
  • 软链接

    操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

    • 相当于重新建立了一个文件,这个文件有独立的索引节点,但是文件的内容是另一个文件的路径(类似于windows中的快捷方式),访问软链接时相当于访问到了另外一个文件。

4.1.9 文件的保护

  • 口令保护
    • 为文件设置一个访问口令,访问文件时必须提供正确的口令
  • 加密保护
    • 通过加密算法对文件进行加密
  • 访问控制
    • 增加访问控制权限列表,记录每个用户对该文件的执行权限

4.2 磁盘组织与管理

4.2.1 磁盘的结构

操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

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

  • 磁道:磁盘的盘面被划分为一个个磁道,每一圈都称为磁道

  • 扇区:磁道被分为一个个扇区,每个扇区就是一个磁盘块

    • 最内侧磁道上的扇区面积最小,因此数据密度最大
  • 盘面:一个盘片可能会有正反两个盘面

  • 柱面:所有盘面中 相对位置相同的磁道组成柱面

  • 磁盘的分类

    • 按磁头能够移动

      • 活动头磁盘:磁臂来回伸缩带动磁头定位磁道
      • 固定头磁盘:每个磁盘的每个磁道都有一个磁头
    • 按照盘片能否更换

      • 可换盘磁盘
      • 固定盘磁盘
  • 磁盘的读写

    • 需要把磁头移动到想要读写的扇区所在的磁道,磁盘转起来,让目标扇区从磁头下面划过,才能完成对扇区的读写操纵
    • 一次磁盘读写需要花费的时间
      • 寻道时间:磁头移动到指定磁道花费的时间
        • 启动磁头臂的时间
        • 移动磁头的时间
      • 延迟时间:旋转磁盘使磁头定位到目标扇区所需要的时间
      • 传输时间:磁盘读出或者写入磁盘的时间
    • 减少延迟时间的方法
      • 交替编号:让编号相邻的扇区在物理上不相邻
      • 错位命名:让相邻盘面的扇区编号“错位”
      • 使用(柱面号,盘面号,扇区号)的磁盘地址结构
        • 在读取地址连续的磁盘块时,可以减少磁头的移动

4.2.2 磁盘调度算法

图片说明:假定进程的请求顺序为:55,58,39,18,90,160,150,38,184号磁道,磁头的初始位置为100号磁道

  • 先来先服务(FCFS)

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

    操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

  • 最短寻找时间优先算法(SSTF)

    • 优先处理与当前磁头所在磁道最近的磁道,可以保证当前最短,不能保证总的最短(贪心)
      • 可能产生“饥饿”现象:磁头在一个小区域内来回移动

操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

  • 扫描算法(SCAN)
    • 规定只有磁头移动到最外侧磁道时才能往内移动,移动到最内侧此道的时候才能往外移动,返回时可以响应
    • 优缺点
      • 不会产生饥饿
      • 中间部分的磁道会比较占便宜,中间部分比其他部分响应频率比较多,每个磁道的响应频率存在差异

操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

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

    • 只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动到起始端而不处理任何请求

      操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

  • LOOK算法

    • 磁头仅在每个方向上移动到最远的请求位置,然后立即反向移动,不需要移动到磁盘的最末端,在反向移动的途中会响应请求

操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

  • C-LOOK算法
    • 磁头移动到最大磁道的请求位置就返回,返回的途中不响应请求

操作系统----文件管理 参考王道操作系统与小林coding图解操作系统

4.2.3 磁盘的管理

  • 磁盘初始化

    1. 进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域(如512B大小)、尾三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分,包括扇区校验码(如奇偶校验、CRC循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)
    2. 将磁盘分区,每个分区由若干柱面组成(即分为我们熟悉的C盘、D盘、E盘)
    3. 进行逻辑格式化,创建文件系统。包括创建文件系统的根目录、初始化存储空间管理所用的数据结构(如位示图、空闲分区表)
  • 引导块

    • 计算机开机时需要进行一系列的初始化工作,这些初始化工作通过执行初始化程序(自举程序)完成
    • 初始化程序可以放到主板继承的只读存储器(ROM)中,但是修改不方便,可以将“自举装入程序”放入ROM,通过执行该程序找到引导块,引导块中存放完整的自举程序。
  • 坏块的管理

    • 对于简单的磁盘,可以在逻辑格式化时(建立文件系统时)对整个磁盘进行坏块检查,标明哪些扇区是坏扇区,比如:在FAT表上标明。(在这种方式中,坏块对操作系统不透明)
    • 对于复杂的磁盘,磁盘控制器(磁盘设备内部的一个硬件部件)会维护一个坏块链表。在磁盘出厂前进行低级格式化(物理格式化)时就将坏块链进行初始化。
      会保留一些“备用扇区”,用于替换坏块。这种方案称为扇区备用。且这种处理方式中,坏块对操作系统透明。
      片转存中…(img-PUkO4Sfy-1650618330704)]
  • 最短寻找时间优先算法(SSTF)

    • 优先处理与当前磁头所在磁道最近的磁道,可以保证当前最短,不能保证总的最短(贪心)
      • 可能产生“饥饿”现象:磁头在一个小区域内来回移动

​ [外链图片转存中…(img-zbgSeqhc-1650618330704)]

  • 扫描算法(SCAN)
    • 规定只有磁头移动到最外侧磁道时才能往内移动,移动到最内侧此道的时候才能往外移动,返回时可以响应
    • 优缺点
      • 不会产生饥饿
      • 中间部分的磁道会比较占便宜,中间部分比其他部分响应频率比较多,每个磁道的响应频率存在差异

[外链图片转存中…(img-X4ESx4qX-1650618330705)]

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

    • 只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动到起始端而不处理任何请求

      [外链图片转存中…(img-OX7C1ZaE-1650618330705)]

  • LOOK算法

    • 磁头仅在每个方向上移动到最远的请求位置,然后立即反向移动,不需要移动到磁盘的最末端,在反向移动的途中会响应请求

[外链图片转存中…(img-mh1Wdw0m-1650618330705)]

  • C-LOOK算法
    • 磁头移动到最大磁道的请求位置就返回,返回的途中不响应请求

[外链图片转存中…(img-Hz2CCUSo-1650618330705)]

4.2.3 磁盘的管理

  • 磁盘初始化
    1. 进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域(如512B大小)、尾三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分,包括扇区校验码(如奇偶校验、CRC循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)
    2. 将磁盘分区,每个分区由若干柱面组成(即分为我们熟悉的C盘、D盘、E盘)
    3. 进行逻辑格式化,创建文件系统。包括创建文件系统的根目录、初始化存储空间管理所用的数据结构(如位示图、空闲分区表)
  • 引导块
    • 计算机开机时需要进行一系列的初始化工作,这些初始化工作通过执行初始化程序(自举程序)完成
    • 初始化程序可以放到主板继承的只读存储器(ROM)中,但是修改不方便,可以将“自举装入程序”放入ROM,通过执行该程序找到引导块,引导块中存放完整的自举程序。
  • 坏块的管理
    • 对于简单的磁盘,可以在逻辑格式化时(建立文件系统时)对整个磁盘进行坏块检查,标明哪些扇区是坏扇区,比如:在FAT表上标明。(在这种方式中,坏块对操作系统不透明)
    • 对于复杂的磁盘,磁盘控制器(磁盘设备内部的一个硬件部件)会维护一个坏块链表。在磁盘出厂前进行低级格式化(物理格式化)时就将坏块链进行初始化。
      会保留一些“备用扇区”,用于替换坏块。这种方案称为扇区备用。且这种处理方式中,坏块对操作系统透明。