文件系统基础
文件的基本概念
- 文件
- 文件系统
- 文件的结构(自低向高)
- 数据项
- 基本数据项
- 组合数据项
- 记录
- 文件
- 数据项
文件控制块和索引结点
- 文件的属性
- 名称
- 类型
- 创建者
- 所有者
- 位置
- 大小
- 保护
- 创建时间
- FCB
- 用来存放控制文件需要的各种信息的数据结构
- FCB的有序集合称为文件目录,一个FCB就是一个文件目录项
- 包含信息
- 基本信息
- 存取控制信息
- 使用信息
- 索引结点
- 概念
- 磁盘索引结点
- 内存索引结点
文件的操作
- 基本操作
- 创建
- 写
- 读
- 重新定位
- 删除
- 截断
- 文件的打开与关闭
- open 提供文件名,其他的不用,只需提供编号?
- 打开文件表
- 整个系统表
- FCB的副本及其他信息
- 打开计数器
- 文件名不必需
- 文件描述符(文件句柄)
- 文件磁盘位置
- 每个进程表
- 指向系统表中适当条目的指针
- 文件指针(读写位置)
- 访问权限
- 整个系统表
文件保护
- 访问类型
- 读
- 写
- 执行
- 添加
- 删除
- 列表清单(列出文件名和文件属性)
- 访问控制
- 访问控制列表ACL(在PCB中)
- 优点
- 缺点
- 精简的ACL
- 拥有者
- 组
- 其他
- 口令
- 密码(密钥)
- 访问控制列表ACL(在PCB中)
文件的逻辑结构
- 无结构文件(流式文件)
- 有结构文件(记录式文件)
- 顺序文件(默认顺序存储)
- 索引文件
- 索引顺序文件
- 直接文件/散列文件(hash file)
⭐文件的物理结构
- 连续分配
- 特点
- 顺序访问
- 直接访问
- 优点
- 实现简单
- 存取速度快
- 缺点
- 文件长度不宜动态增加
- 外部碎片
- 特点
- 链接分配(消除了外部碎片;动态)
- 隐式链接(手拉手)
- 缺点
- 只适合顺序访问
- 稳定性
- 簇为结点的方法(增加了内部碎片哦)
- 缺点
- 显式链接
- 文件分配表(FAT)
- 整个磁盘只有一张FAT
- 系统启动时读入FAT
- 查找是在内存中进行的显著提高速度
- 隐式链接(手拉手)
- 索引分配
- 链接分配的问题
- 除FAT,不能直接访问
- FAT很大
- 索引块(表),每个文件都来上一个
- 索引块大小限制了文件大小
- 解决方案
- 链接方案(索引块之间的手拉手游戏)
- 多层索引(索引的索引的索引的索引…(套娃ing))
- 混合索引(Linux YYDS!)
- 解决方案
- 链接分配的问题
- 混合索引分配
- 直接地址
- 一次间接地址
- 多次间接地址
文件系统
文件系统布局
- FS在磁盘中的结构

- MBR
- 引导块
- 超级块
- 分区有多少磁盘块
- 块的大小
- 空闲块的数量和指针
- 空闲的FCB数量
- FCB指针
- 空闲块信息
- FS在内存中的结构(存储在内存中的内核区)
- 安装表(挂载表)
- 目录结构的缓存
- 整个系统的打开文件表
- 每个进程的打开文件表
外存空闲空间管理
- 卷
- 逻辑概念
- FCB区(目录区)和数据区(文件区)
- 空闲表法
- 表项
- 序号
- 第一个空闲盘块号
- 空闲盘块数
- 表项
- 空闲链表法
- 空闲盘块链
- 空闲盘区链
- 位示图法
- ❗成组链接法
- 成组链块
- n多个指向空闲盘块的指针
- 1个指向下一个链块的指针
- 盘块的分配
- 盘块的回收
- 成组链块
虚拟文件系统
- 透明化——提供统一接口
- 对象化——面向对象的思想
- 超级块对象
- 索引结点对象
- 目录项对象
- 文件对象
分区和安装
目录
目录的基本概念
目录结构
- 单级目录结构
- 两级目录结构
- 树形目录结构
- 无环图目录结构
目录的操作
- 搜索
- 创建文件
- 删除文件
- 创建目录
- 删除目录
- 移动目录
- 显示目录
- 修改目录
文件共享
- 静态共享方法
- 硬链接
- 软链接
- 硬链接比软链接查找速度更快
- 动态共享方法
磁盘和固态硬盘
磁盘
- 磁盘
- 磁道
- 扇区
- 盘块
- 磁盘组
- 柱面
- 磁盘地址
- [驱动器号] 柱面号 盘面号 扇区号
- 固定头磁盘
- 活动头磁盘
- 固定盘磁盘
- 可换盘磁盘
磁盘的管理
- 初始化
- 分区
- 引导块
- 坏块
磁盘调度算法
- 一次磁盘读写时间
- 寻道时间(占比最长)
- 跨越数条磁道
- 磁头启动
- 旋转延迟时间
- 转半圈的时间
- 传输时间
- 取决于转速、数据量和扇区数
- 寻道时间(占比最长)
- 调度算法
- FCFS
- SSTF
- SCAN
- C-SCAN
- LOOK
固态硬盘
- 特性
- 磨损均衡
FCB和inode(索引结点)
- 二者在功能定位上大致是相同的
- FCB主要用于Windows
- indoe主要用于Linux