文件系统的由来

启蒙篇

文件的由来

  • 磁盘上保存的是一对十六进制的数据,如何切分数据形成不同的文件,也就是如何确定一个文件的起始和终止位置?
  • 将相关数据打包在一起形成一个文件,比如从什么位置开始到什么位置结束,是一张图片、一段文字、一个视频
  • 还需要为每一个打包文件配置一个 FCB,类似PCB
  • FCB保存在磁盘,记录文件的名字、文件的起始位置、文件的终止位置等信息
  • 通过文件的名字  匹配 FCB中符合的文件,通过名字作为检索,查询文件的相关信息,比如文件的存储位置

目录的由来

  • 每个文件 都有 与之对应的FCB  
  • 将FCB的集合重新打包成一个文件,形成目录文件(其他文件的档案袋),其他文件叫做普通文件,比如 图片、视频、文档
  • 操作系统启动的时候,将目录文件读取到内存,就可以使用户看到文件结构

文件管理逻辑图

  • 文件系统由文件和目录两个部分组成
  • 文件:逻辑结构  数据怎么组织?如何打包?
  • 目录:物理结构  组织好的数据如何保存?
  • 数据 打包 形成文件
  • FCB 打包 形成目录
  • 物理结构:组织好的数据如何存储?

闲聊文件系统

  • 操作系统、文件系统和存储器都有很多类型
  • 通常讲win、linux具有那种文件系统的方法和原理
  • 操作系统:unix 、 linux 、 windows 、 android 、 ios  、macos
  • 文件系统:ext 、NTFS(win)  、APFS(MAC)、 FAT 、YFFS、JFFS
  • 存储器:硬盘类 、光盘类 、磁带类、flash类 (固态硬盘、U盘、云盘)
  • 文件系统的基本构成 = 文件 +  目录;使得磁盘数据保存、管理、搜索更加便捷化和人性化

 

基础篇

文件的逻辑结构和物理结构

  • 逻辑结构:文件是由不同的十六进制数据组成的,每个数据都有指定的位置,如果数据的位置打乱了,就不可以表示先前的数据,文件就没有意义。比如删除文件的一部分,使文件损坏。
  • 物理结构:将磁盘进行切割,分成很多块,每一块散列存储在磁盘
  • 使用的时候,将物理结构按照逻辑顺序拼接在一起就形成了正确的逻辑结构,就可以还原原本的文件

文件系统的逻辑结构(数据是如何组织起来的)

文件的逻辑结构

  • 有结构文件:记录式文件:格式多样化(描述信息,比如位置信息等等)、内容多样化(字体的颜色大小)、便于搜索查询
  • 有结构文件 比如excel,即使只记录一个字母,但是需要记录大量的相关信息,因此文件会很大
  • 无结构文件:流式文件 ,比如txt,仅仅可以按照顺序简单记录每一个字符;
  • *并不是所有文件的所有内容都是可视化的
  • 流式文件特征:1,简单顺序,以字节为单位记录每一个数据;2,由于没有结构,搜索的时候只可以穷举搜索,适用性很差;3,适用于对基本信息单位操作(修改操作)不多的文件,比如源代码、目标代码文件、图片

有结构文件的数据组织:

  • 1,数据项:最低级的数据组织形式,文件的细胞,每个的数据项的长度不一样。数据项是最小单元,word的数据单元是单个字,excel的数据单元是单个表格
  • 2,记录:一组有意义的数据项的组合,关键字,唯一标识一个记录,每个记录的长度都可能不一样
  • 3,文件:文件系统中最大的数据单位
  • 知识点准备
  • 1,抽象化 ,以记录为最小单位
  • 2,抽象化后的定长记录(不够标准定长的数据就补长)和变长记录(每个记录的长度不一样)的表示
  • 3,定长(直接访问或者顺序访问)和变长记录(顺序访问)方式的查询(变长需要有一个字节来记录数据的长度)

顺序文件

  • 分为1,串结构(时间排序,往表格里面输入的先后顺序)定长和变长 ;2,顺序结构(关键字排序,按照成绩排序)分为定长和变长
  • 特点:1,对顺序文件的记录做增加删除比较困难,需要移动和重新排序;2,只有顺序文件可以保存在磁带上;3,定长记录的顺序文件比变长记录的顺序文件查找快

索引文件

  • 原因,变长文件查询比较麻烦,只可以使用顺序查找的方式进行查询。对变长记录的顺序文件进行改进,使其可以直接访问/顺序访问(索引表)
  • 索引表 是定长的,利用直接访问的优势
  • 索引表:索引号(排序的位号) 、 记录长度(配合第三个参数) 和记录指针     索引表是附文件,将索引表拼接在主文件(变长顺序存储)的前面,就形成了索引文件
  • 特点:1,通过索引表查询记录很快;2,索引表会导致文件大小的增加,因为拼接了索引表

索引顺序文件

  • 分组 ,索引表记录键值和逻辑地址,逻辑地址是指向不同分组的第一个逻辑地址
  • N个记录分为根号N 组,平均查询根号N次
  • 增加索引表多占了空间,但是提高了存取速度
  • 组间索引 组内顺序
  • 同组无序,组间有序

Hash文件

  • 直接文件 = 散列文件 = HASH文件 = 哈希文件
  • 散列文件存取文件的速度很快,但是会引发冲突 -> 数据结构 Hash查找
  • Hash(记录) = 记录应该保存的位置(物理位置) 
  • 好的hash函数会减少冲突的次数,但是冲突不会避免

目录文件的逻辑结构(PCB是如何组织起来的?)

文件控制FCB

  • FCB保存在磁盘上 ,记录文件的相关信息
  • FCB 记录 文件名、逻辑结构、物理结构、文件类型(目录类型还是普通文件)、文件大小、磁盘位置(物理位置)、控制信号(文件保护,文件的权限)、计数信息(文件共享)
  • 多个FCB排列组合变成了目录结构
  • FCB数量有限,文件的数量有限

索引节点inode

  • 过程:将FCB分解,目录文件只保留文件的名字,除了文件名字之外的信息打包形成的块,简称inode
  • 拆解的原因:原版的FCB太大,导致目录文件的很大,电脑查询文件的时候,需要将目录文件调入内存,导致内存的消耗变大。其次,读取大的目录文件的时候,磁盘访问次数也会变多,导致文件查询速度很慢,瘦身之后的FCB就克服了这个缺点
  • 节点表 记录所有inode,查询的时候,需要通过文件名字查询FCB,找到对应的inode,再到节点表查询inode里面查询物理位置
  • 节点表保存在磁盘,瘦身版FCB(文件名+inode号)时读入内存,不用的时候存储在磁盘
  • 索引节点:编号递增且唯一。每个索引节点唯一关联一个目录文件或者普通文件(inode代替先前的原版PCB成为文件的档案袋)
  • inode数量有限,操作系统安装的时候就已经确定了
  • 这种方式适用于Unix系统

目录结构

单级目录结构

  • FCB连续,每个FCB对应一个文件,没有文件夹的概念
  • 目录基本操作
  • 1,检索文件
  • 2,创建文件,先申请FCB,再分配内存空间
  • 3,删除文件,先回收磁盘块,再删除FCB
  • 4,移动文件,(没有目录层级的概念,复制剪贴)
  • 特点
  • 1,实现按名存取,但是不可以重名
  • 2,检索文件很慢
  • 3,不适用于多用户操作系统,(用户空间隔离,彼此文件不可见)
  • 4,没有文件夹

两级目录结构

  • 针对单级目录的优化
  • 实现了多用户,但是灵活性不够,不可以对文件进行分类管理
  • 相关FCB都相联,比如不同用户的FCB相联,同一用户的不同文件的FCB相联
  • 区分了用户,但是用户进入自己的文件夹下,和单级目录结构一致,只有文件,没有层级结构

多级目录结构

  • 改进两级目录,解决不可以对文件进行分类的问题
  • 特点
  • 1,更好的对文件进行分类管理,树形目录层次清晰、分类清晰
  • 2,磁盘启动次数多 因为按照树形结构,从上到下,每一级分别读入内存进行查询(按块读取)(一块就启动一次)

无环图目录结构

  • 树形目录结构 + 有向边 = 无环图目录
  • 被多条有向边指向的目录文件,就是被共享的文件
  • 设计的目的是为了共享 
  • 有向边 由硬链接/软连接 实现

文件共享

  • 文件共享 的原因:1,单机  节约空间,只保留一个副本(缺点,牵一发动全身,个人修改对别人影响很大);2,联网  互联网发展的必然性 C/S 模型 ,不同用户访问同一文件

硬链接共享

  • 云盘共享数据 ,接收别人共享的文件,保存到我的云盘,本质是添加inode号,使得多个用户关联同一份文件,inode号指向文件
  • 需要添加计数信息参数,删除文件,就是删除关联inode的信息,同时减少计数
  • 只有当文件的计数为0,代表这个文件不再被使用,删除文件,回收inode
  • inode通过物理地址直接找到文件的存储位置,速度很快

软连接共享

  • link类型文件,文件内 存有共享文件的路径,因此会增加磁盘访问的次数
  • 可能引起错误(新的文件和旧的文件同名的时候)
  • linux的软连接模式 和 windows的创建快捷方式相似
  • 软连接,通过文件的层级目录找到文件,仅仅依靠目录层级和文件的名字作为索引

文件保护

  • 文件保护是通过索引节点inode和文件控制块FCB一起使用实现的
  • 文件保护的原因 ,防止共享文件被未经过批准的用户随意修改和破坏
  • 文件保护的方式
  • 1,口令:FCB添加口令,口令匹配才可以通过,防止随意存取
  • 2,加密:对文件的数据进行加密,即使获取文件,也无法解密数据;缺点:需要使用对应的加解密文件,需要耗费时间
  • 3,访问控制:不同角色拥有不同的权限,设置访问控制表。这个一般Unix使用比较多,对文件分为拥有者、组、其他,分别对应读、写、执行三种权限
  • 口令和访问控制,都是在FCB的控制信息里面添加内容

文件系统的物理结构

文件的实现(物理结构)

文件物理结构学习逻辑图

  • 文件保存到磁盘 -> 最小单位为块(4kb、1kb)块设备
  • 问题
  • 1,存在哪?文件的分配方式
  • 2,哪可存?磁盘存储空间的管理

文件的分配方式

  • 连续分配
  • 思想:文件分配一组连续的磁盘块
  • 特点:
  • 1,顺序访问  直接访问(起始地址 + 每一块的大小 * 数据块数)
  • 2,外部碎片多,内部碎片少
  • 3,适合长度固定的文件的(比如图片、视频)
  • 磁盘块的顺序很重要,需要从指定位置读取指定大小的文件内容;存文件的时候,也需要顺序存放
  • FCB表格 : 文件的名字、存储的起始位置、文件的长度

  • 链接分配 分为 隐式链接分配 和 显式链接分配;解决内部碎片的问题
  • 隐式链接分配 
  • 思想:顺藤摸瓜 / 做记号;  像链表一样,把不连续的空间碎片,链接在一起;每一个块的后面记录下一个存储的位置信息
  • 特点:可以顺序访问,不可以直接访问;稳定性不好(如果中间数据损坏,就无法衔接下一个文件,造成文件的损坏)
  • FCB里边的物理结构,会确定文件的类型是连续分配、隐式链接分配、显式链接分配等,按照对应的规则,读取目录文件
  • FCB  隐式链接分配的目录文件记录 文件的名字、起始位置和结束位置
  • 因为有链接的存在,假设链接占据2b,每个块存储(4kb - 2b)大小的内存

  • 显式链接分配
  • 解决隐式链接分配不稳定的问题(中间断裂)
  • 思想:先存再读,整个磁盘设置一张表,记录每个磁盘块的分配情况,该表叫做FAT
  • 查询FAT,防止中间层数据断裂
  • 特点:FAT表占用空间比较大,磁盘无所谓,但是内存卡会浪费很大的空间

 单级索引分配

  • 思想:为每个文件都建立一个索引表,记录该文件的磁盘块分配顺序
  • 将索引表记录在一个磁盘块,FCB的索引填写 索引表的存储磁盘号
  • 索引表:文件的名字、索引(索引表记录磁盘块的分配顺序,索引记录索引表所在的磁盘位置)
  • 文件读取的时候,现根据文件的名字,读取索引表的;将索引表读入内存之后,根据索引表依次读取文件
  • FCB的物理结构会记录 模式  单级索引
  • 特点:可以直接访问,但是索引表占据了磁盘的空间,文件很大,需要的索引表也会很多

多级索引分配

  • 解决索引块长度不一致,使索引表变成一个变长文件,不利于直接访问的问题,再次构建索引表
  • 8M文件占据多少空间? 8Mb + 3* 4kb

 

混合索引

  • 直接索引、单级索引、二级索引、三级索引等同时使用
  • 条件:盘块4kb大小、盘块号4B大小
  • 问:混合索引最大支持的文件大小?4TB + 4GB + 4MB + 4kb
  • 3GB文件实际需要占用多大的空间? 好复杂 
  • 一个盘块可存 4kb/4B = 1k 个盘块号
  • 直接索引:4kb
  • 单级索引:1k * 4kb = 4MB
  • 二级索引:1k *1k * 4kb = 4GB
  • 三级索引:1k * 1k *1k *4kb = 4TB
  • 文件的索引顺序 依次是 直接、单级、二级、三级

存储空间管理

空闲表法

  • 解决哪里可以存?
  • 空闲盘块表:序号 、 第一个空闲的盘块号、 空闲数量;主要用于连续分配
  •  分配:分配算法,如首次适应、最佳适应、最坏适应、邻临适应、循环首次适应
  • 回收:合并问题,(删除)
  • 存在哪里?

空闲链表法

  • 空闲盘块链:盘块号+下一节点指针
  • 空闲盘区链:首个盘块号 盘区大小 下一个盘区指针
  • 数据结构里面的链表,还是单链表

位示图法

  • 由0和1 组成,1代表存储数据,0代表没有存储数据

成组链表法

  • 一组一组形成链表,就是成组链表法
  • 并不详细  回收和分配

目录的实现(物理结构)

线性链表

  • 目录文件 依次查询(线性链表)
  • 例题
  • 有一个文件系统,根目录常驻内存,如图所示,文件目录采用链接结构,每个目录下最多放80个目录或者文件(称为下级文件),每个磁盘块最多放10个文件目录项,如果下级目录是目录文件,则上级目录指向该目录文件的第一块磁盘。假设目录结构中第一块文件按照从左向右的顺序排列,... 表示有其他文件或者目录
  • 问题:k文件 最少 或者 最多 查询几次磁盘
  • 文件 文件夹 都是文件
  • 最多查询 8 次,采用链接表的方式存储,需要根据头结点 到 尾节点 依次查询
  • 每次 读取数据 都需要启动磁盘

哈希表

  • 考的少
  • 利用文件的名字进行哈希运算,得到文件的存储位置

层次结构

为什么要分层?

  • 每一层各司其职(下层为上层服务)
  • 高内聚 低耦合
  • 利于修改代码。推行版本的更新 和 便于移植

具体内容

  • 从下往上
  • 设备(硬件):磁盘、flash、光盘等等
  • 设备管理模块(软件):驱动程序 (读写控制磁盘等)
  • 物理文件系统:存在哪里?物理结构,文件的分配方式
  • 辅助分配模块:哪里可存?磁盘存储空间管理
  • 逻辑文件系统:文件以及目录的逻辑构成
  • 存取控制模块:文件的保护
  • 文件目录系统:根据文件的名字来搜索FCB
  • 用户接口:GUI、命令行、系统调用(API)
  • 用户 普通用户 程序员

磁盘的组织和管理

磁盘的结构

  • 扇区,一圈扇区围成的同心圆环叫一条磁道
  • 圆环就是磁道从外往里命名
  • 盘面  圆形的物理结构
  • 多个圆形的盘面 相垂直的部分 构成 柱面,柱面号 和 磁道号 一致
  • 约靠近扇区的圆心,扇区的密度越大
  • 通过柱面号 盘面号和扇区号唯一确定一个扇区

磁盘的读写

  • 相关概念:
  • n:跨越的磁道数
  • m:磁盘的固定参数,是常数;移动一条磁道的耗时
  • s:磁臂启动时间,也是常数
  • r:转速;单位 转/秒 
  • b:扇区字节数
  • N:一条磁道字节数

磁盘的一次读写时间 大概值(期望数值/平均数值)

  • 一次读写时间:期望值/平均值 Ta = 需找时间 Ts + 延迟时间 Tr + 传输时间Tt
  • 寻找时间:磁头跳转磁道的时间,也就是寻找柱面号 (也是磁道号,多块盘的磁道组织在一起构成柱面);m 磁盘的固定参数,是常数,平均移动一条磁道的耗时;s 磁臂启动时间,也是常数,需要给磁臂充电,然后才有能量进行磁道之间的切换
  • 延迟时间:磁道确定之后,磁头还需要等待目标扇区的到来,扇区旋转;期望值,Tr = 1/2r 
  • 延迟时间推导:转速 一般是固定的,一般是7200转/分钟  7200/60=120转/s  每转一圈 1/r 秒,每个扇区用 1/r(x+1)秒;磁头移动之后,定位的第一个扇区是随机的,计为A,该磁道的每一个扇区都可能是目标扇区,成为目标扇区的几率是 p = 1/(x+1)  则,Tr = 1/2r
  • 传输时间:传输时间是在延迟时间的基础上来看的,Tt = b / rN                       
  • 磁头掠过所有的扇区,怎么只读一个扇区?磁头电子开关,如果不开启,读取的数据是无效的
  • 减少Ts:优化寻道顺序 -> 磁盘的调度算法
  • 减少Tr:盘面错位编号 和 扇区交替编号 ;增大转速
  • 减少Tt:增大转速,如果磁盘确定,则无法优化

磁盘调度算法

FCFS算法

  • 先到先服务

SSTF算法 最短寻找时间优先算法:磁头优先向最近的请求磁道移动

  • 坏处  容易造成两边的饥饿
  • 只有左边完成之后,才会到右边

 

SCAN算法 = 电梯算法

  • 根据初 ,优先向当前磁头位置最近的磁道移动,直到遇到边界才可以折返
  • 如果没有指出方向,按照 从小 到 大的次序访问,即一般向右访问
  • 利于两端的磁道的访问请求(折返,相当于接替访问两次)

进化版-> LOOK算法 到最远请求则折返

  • 题目中,没有特别说明是普通SCAN,则默认是改进型SCAN算法(即LOOK算法)
  • 区别在于,不直到遇到边界才折返

CSCAN算法和CLOOK算法  循环扫描算法,从头跑,不折返

  • CSCAN算法 根据初始磁头方向,确定一个单方向,优先向偏离磁头当前位最近的磁道移动,直到遇到边界才重头跑(不是往返跑)
  • 克服了SCAN算法,利于两端磁道请求的问题
  • CSCAN算法

  • CLOOK算法

 

减少延迟时间

  • 交叉编译:同盘扇区交叉编号;不同盘面错位命名
  • 扇区 = 头 + 数据 + 尾;如果按照顺序进行编号,处理第一个头尾的过程中,因为磁盘的转动,会错过第二个扇区,如果想读取第二个扇区的数据,需要循环一周,浪费时间,因此采用交叉编号
  • 通过交叉编号,可以很好衔接 同盘面同磁盘的连续扇区

系统安装的过程

  • 低级格式化 -> 扇区 = 头 + 数据 + 尾
  • 磁盘分区(多个柱面构成一个分区);主分区 C;逻辑分区:D E
  • 第一个0开始的分区 不会分给C盘,而是装载了MBR,主要引导程序和分区表;分区表记录每一个逻辑分区和主分区 的
  • 首先将安装系统的主分区标记位活动分区,在主分区安装OS 同时安装FS,

磁盘的管理

  • 系统安装过程
  • 1,低级格式化 -> 把盘面分成扇区,(分成柱面号、盘面号和扇区号),每个扇区都有头和尾确定扇区的开始和结束
  • 2,磁盘分区,(多个柱面构成一个分区),主分区 装入引导程序 和 分区表(分区表记录不同C盘、D盘等分区的信息),确定活动分区,也就是操作系统安装的盘
  • 3,主分区安装OS操作系统,同时安装文件系统,每个分区可以安装不同的文件系统

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值