OS学习笔记六:文件系统

Posted jiankunking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OS学习笔记六:文件系统相关的知识,希望对你有一定的参考价值。


一、文件与文件系统

1、文件是什么?

  • 文件 是 对磁盘的 抽象
  • 所谓文件 是指 一组带标识(标识即为文件名)的、在逻辑上有完整意义的信息项的序列
  • 信息项:构成文件内容的基本单位(单个字节,或多个字节),各信息项之间具有顺序关系
  • 文件内容的意义:由文件建立者和使用者解释

2、文件系统

  • 操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,并且方便用户使用
  • 统一 管理磁盘空间,实施磁盘空间 的分配与回收
  • 实现文件的按名存取
    名字 空间 映射 磁盘空间
  • 实现文件信息的共享,并提供文件的 保护、保密手段
  • 向 用户提供一个方便 使用、易于维护 的 接口,并向 用户提供 有关统计信息
  • 提高文件系统的性能
  • 提供与I/O 系统的 统一 接口

3、文件分类

按文件性质和用途分类(UNIX ):

  • 普通文件、目录文件、特殊文件( 设备文件) 、管道文件、套接字
  • 普通文件(regular):包含 了用户的信息,一般为ASCII 或二进制文件
  • 目录文件(directory):管理 文件系统的系统文件
  • 特殊文件(special file):
  • 字符 设备文件:和输入输出有关,用于模仿串行I/O设备,例如终端,打印机, 网 卡 等
  • 块 设备文件

二、文件的存储介质

1、物理块(块block 、簇cluster )

  • 信息存储 、传输、 分配的独立单位
  • 存储设备划分为大小相等的物理块,统一编号

2、典型磁盘结构

OS学习笔记六:文件系统_操作系统

任何时刻只有一个磁头处于活动状态:输入输出数据流以位串形式出现

物理地址形式 : 磁头号(盘面号)、磁道号(柱面号)、扇区号

扇区 :标题(10 字节) 、数据(512 字节) 、ECC 纠错信息(12-16 字节)

磁臂带动磁头按照盘片的半径方向移动

盘片中间的轴可以带动盘片旋转,平常所的多少转就是指的这个

3、磁盘的访问

一次访盘请求:

读/ 写,磁盘地址(设备号,柱面号,磁头号,扇区号),内存地址(源/ 目)

完成过程由三个动作组成:

  • 寻道(时间) :磁头移动定位到指定磁道
  • 旋转延迟(时间) :等待指定扇区从磁头下旋转经过
  • 数据传输(时间) :数据在磁盘与内存之间的实际传输

SSD没有前两步

三、磁盘的空间管理

1、有关的数据结构

  • 位图法
  • 用一串二进制位反映磁盘空间中分配使用情况,每个物理块对应一位,分配物理块为0 ,否则为1
  • 申请物理块时,可以在位示图中查找为1 的位,返回对应物理块号
  • 归还时,将对应位 转置1
  • 空闲块表
  • 将 所有空闲块记录在一个表中,即空闲块表
  • 主要两项内容:起始块号,块数
  • 空闲块链表
  • 把所有空闲块链成一个链
  • 扩展:成组链接法

2、磁盘地址与块号的转换

已知块号,则磁盘地址:

柱面号=[ 块号/ (磁头数 × 扇区数)]
磁头号=[ (块号mod (磁头数 × 扇区数))/ 扇区数]
扇区号=(块号mod (磁头数 × 扇区数))mod 扇区数

已知磁盘地址:

块号=柱面号 × (磁头数 × 扇区数)+磁头号 × 扇区数+扇区号

位图计算公式:

已知字号i 、位号j  : 块号=i × 字长+j
已知块号: 字号=[ 块号/ 字长] 位号=块号 mod

位图计算公式:

已知字号i 、位号j : 块号=i × 字长+j

已知块号: 字号=[ 块号/ 字长] 位号=块号 mod 字长

四、文件控制块及文件目录

1、文件属性

  • 文件控制块(File Control Block )
    为管理文件而设置的数据结构, 保存 管理文件所需的所有有关信息(文件属性或元数据)
  • 常用属性
    文件名,文件号 ,文件大小 , 文件地址 , 创建时间,最后修改时间,最后访问时间, 保护,口令,创建者,当前拥有者,文件类型,共享计数,各种标志( 只读、隐藏、系统、归档、ASCII/ 二进制、顺序/ 随机访问、临时文件、锁)

2、文件目录、目录文件、目录项

  • 文件目录
  • 统一 管理每个文件 的元数据,以支持文件名到文件物理地址的转换
  • 将所有文件的管理信息组织在一起,即构成文件目录
  • 目录文件
  • 将文件目录以文件的形式存放在磁盘上
  • 目录项
  • 构成文件目录的基本单元
  • 目录项 可以 是FCB , 目录是 文件控制 块的有序集合

五、文件的物理结构

1、文件的物理结构

  • 文件 在存储介质 上的存放方式
  • 主要解决两个问题:
  • 假设一个文件被划分成N 块,这N 块在磁盘上是怎么存放的?
  • 其地址( 块号或簇号) 在FCB

2、Unix的三级索引结构

UNIX 文件系统采用的是多级索引结构( 综合模式)

  • 每个文件的索引表有15 个索引项,每项2 个字节
  • 前12 项直接存放文件的物理块号(直接寻址)
  • 如果文件大于12 块,则利用第13 项指向一个物理块,在该块中存放文件物理块的块号(一级索引表)假设扇区大小为512 字节,物理块等于扇区块大小,一级索引表可以存放256 个物理块号
  • 对于更大的文件还可利用第14 和第15 项作为二级和三级索引表

试问:采用这种结构,一个文件最大可达到 ? 个物理块

OS学习笔记六:文件系统_管理_02

六、文件系统的实现

1、概述

  • 实现文件系统需要考虑
    磁盘上 与 内存中 的 内容 布局
  • 磁盘上
  • 如何启动操作系统?
  • 磁盘是怎样管理的?怎样获取磁盘的有关信息?
  • 目录文件在磁盘上怎么存放?普通文件在磁盘上怎么存放?
  • 内存中
  • 当进程 使用文件时 ,操作系统是如何支持的?
  • 文件系统的内存数据结构

2、相关术语

  • 磁盘分区(partition) :
    把 一个 物理磁盘 的存储空间划分为几个相互独立的部分,称为 分区
  • 文件卷(volume) :磁盘上的逻辑分区,由一个或多 个物理块( 簇) 组成
  • 一个文件卷 可以是整个磁盘 或 部分磁盘 或 跨盘(RAID )
  • 同 一个文件卷中 使用同一份管理数据 进行文件 分配和磁盘空闲空间管理 ,不同 的文件卷 中的 管理 数据是相互独立的
  • 一个文件 卷上:包括文件系统 信息、一组文件(用户文件、目录文件)、未分配空间
  • 块 (Block )或 簇 (Cluster ) : 一 个或多个(2 的幂)连续的 扇区,可 寻址数据块
  • 格式化(format) :在一个文件卷上建立文件系统,即建立并初始化 用于文件 分配和磁盘空闲空间管理的 管理数据

3、磁盘上的内容

  • 引导 区
    包括 了 从该卷引导操作系统所需要的信息每个卷(分区)一个,通常为第一个扇区
  • 卷(分区)信息
    包括该卷(分区)的块(簇)数、 块(簇)大小 、空闲 块(簇)数量 和指针、空闲FCB 数量和指针……
  • 目录文件( 根目录文件及其他目录文件)
  • 用户文件

4、内存中需要的数据结构–以UNIX为例

OS学习笔记六:文件系统_文件系统_03

七、文件系统实例–UNIX

1、文件目录检索

OS学习笔记六:文件系统_操作系统_04

2、目录文件实现时改进

  • 提问:如何加快目录检索?
  • 一种解决方案:
    目录项分解法:即把FCB 分成两部分
  • 符号目录顶
    文件名,文件 号
  • 基本目录项
    除 文件名 外的所有 字段

例子:UNIX 的I 节点(索引节点 或 inode)

3、改进后的好处

OS学习笔记六:文件系统_存储_05

4、UNIX文件系统

  • FCB = 目录项 + i 节点
  • 目录项:文件名 + i 节点号
  • 目录 文件由目录项构成
  • i 节点 :描述文件的相关 信息
  • 每个文件由一个目录项、一个i 节点和若干磁盘块构成

八、文件系统实例——FAT

1、文件分配表FAT

  • 可以把文件分配表 看成 是 一个整数数组 ,每个 整数 代表 磁盘分 区 的一个簇 号
  • 状态
    未使用、坏簇、系统保留、被文件占用(下一簇簇号)、最后一簇(0xFFFF )
  • 簇 号从0 开始编号,簇0 和簇1 是保留的

OS学习笔记六:文件系统_文件系统_06

3、FAT32文件系统

OS学习笔记六:文件系统_文件系统_07

九、文件系统的管理

1、文件系统一致性

  • 问题的产生:
    磁盘块 → 内存 → 写回磁盘块
    若在写回之前,系统崩溃,则文件系统出现不一致(这里的一不一致指的是:元数据,比如FCB什么的,而不是某个文件的内容)
  • 解决方案:
    设计一个实用程序,当系统再次启动时,运行该程序,检查磁盘块和目录系统

2、磁盘块的一致性检查

OS学习笔记六:文件系统_数据_08

  1. 如果空闲块中值为0,而使用块中的记录为1,则修改空闲块中的记录为1
  2. 如果空闲块中值为1,而使用块中的记录为0,则修改空闲块中的记录为0
  3. 如果空闲块中值为0,而使用块中的记录为2,则需要重新分配一个空闲块来存储多出来的那份使用块,并修改之前使用块记录为1

3、文件系统的写入策略

  • 通 写(write-through )
    内存 中的修改立即写到磁盘
    缺点 :速度性能差
    例 : FAT 文件系统
  • 延迟 写(lazy-write )
    利用回 写(write back )缓存 的方法得到高速
    可恢复性 差
  • 可 恢复写(transaction log )
    采用 事务日志来实现文件系统的写入
    既 考虑安全性,又考虑速度性能
    例 :NTFS

4、UNIX的文件访问控制

OS学习笔记六:文件系统_操作系统_09

十、文件系统的性能

1、文件系统的性能问题

  • 磁盘服务
    → 速度成为系统性能的主要瓶颈之一
  • 设计文件系统应尽可能减少磁盘访问次数
  • 提高文件系统性能的方法:
    目录 项(FCB) 分解 、当前目录、磁盘 碎片 整理块高速缓存 、磁盘调度、提前读取、合理分配磁
    盘空间、信息的优化分布、RAID 技术… …

2、块高速缓存(BLOCK CACHE)

又 称为 文件 缓存 、磁盘高速缓存 、缓冲区高速缓存

是指: 在 内存中为磁盘 块 设置的一个缓冲区, 保存了磁盘 中 某些 块 的副本

  • 检查所有的读请求,看所 需块 是否在块高速缓存 中
  • 如果 在,则可直接进行读操作;否则,先将数据块读入块高速缓存, 再拷贝到所需的地方
  • 由于访问的局部性 原理 ,当一数据块 被 读 入 块 高速缓存 以满足一个I/O 请求时, 很可能 将来还会 再次访问 到 这 一 数据

3、提前预取

  • 思路:每次访问磁盘,多读入一些磁盘块
  • 依据:程序执行的空间局部性原理
  • 开销: 较小( 只有数据传输时间)
  • 具有针对性

4、合理分配磁盘空间

分配 磁盘 块 时,把有可能顺序存取的块放在 一起

→ 尽量 分配在同一柱面上,从而减少磁盘臂的 移动次数和距离

OS学习笔记六:文件系统_数据_10

5、磁盘调度

  • 当 有 多 个访盘 请求等待 时,采用一定的策略,对这些请求的服务顺序调整 安排
    → 降低 平均磁盘服务时间,达到公平、高效
  • 公平:一个I/O 请求在有限时间内满足
  • 高效:减少设备 机械运动带来 的

一次访盘时间 = 寻道时间+ + 旋转延迟时间+ + 传输时间

• 减少寻道时间

• 减少延迟时间

6、磁盘调度算法

  1. 先来先 服务(FCFS)
  2. 最短寻道时间 优先(Shortest Seek Time First)
  3. 扫描 算法SCAN ( 电梯算法)
  4. 单向扫描调度算法C-SCAN
  5. N-step-SCAN 策略
  6. FSCAN 策略
  7. 旋转调度算法

7、RAID技术

  • RAID (独立磁盘冗余阵列)
    (Redundant Arrays of Independent Disks)
    多块磁盘按照一定 要求 构成一 个 独立的 存储设备
  • 目标: 提高 可靠性 和 性能
  • 考虑:磁盘 存储系统 的 速度、容量、容错、数据灾难发生后的数据恢复

8、RAID技术的思想

数据是如何组织的?

  • 通过 把多个磁盘组织在一起,作为一个逻辑卷提供磁盘跨越功能
  • 通过 把数据分成多个数据块, 并行 写入/ 读出多个磁盘,以提高数据传输率( 数据分条stripe )
  • 通过 镜像或校验操作,提供容错能力( 冗余 )

最简单的RAID 组织方式: 镜像

最复杂的RAID 组织方式: 块交错校验

9、RAID 0 –条带化

  • 数据分布 在阵列的所有磁盘上
  • 有数据请求时,同时多个磁盘并行操作
  • 充分利用总线带宽,数据吞吐率提高,驱动器负载均衡

无冗余(即无差错控制)

性能最佳

10、RAID 1 –镜像

  • 最大限度保证数据安全及可恢复性
  • 所有数据同时存在于两块磁盘的相同位置
  • 磁盘利用率50%

数据安性最好

11、RAID 4 –交错块奇偶校验

  • 带奇偶校验
  • 以数据块为单位

个人微信公众号:

OS学习笔记六:文件系统_操作系统_11

作者:jiankunking ​


以上是关于OS学习笔记六:文件系统的主要内容,如果未能解决你的问题,请参考以下文章

学习记录011-磁盘结构和文件系统

MBR修改

Python学习笔记——os模块

Python学习笔记__9.3章 操作文件和目录

OS 学习笔记 操作系统引导

OS 学习笔记 操作系统的发展与分类