文件管理
文件
定义
- 一组有意义信息的集合
属性
文件名
标识符
类型
位置
大小
保护信息
操作
- 增删查改
文件逻辑结构
无结构文件
- 文件的内容是二进制流或者字符流
(txt文件)
有结构文件
由相似的数据组成
(excel表)顺序文件
链式存储
- 不能实现随机存储
顺序存储
串结构
- 不按照关键字排列
顺序结构
按照关键字排列
定长记录
- 能够实现随机存储
不定长记录
- 一个一个顺序查找
索引文件
为文件建立索引,这样文件就可以离散存储,根据索引查找文件
索引表本身是定长记录的顺序文件
索引顺序文件
当索引表比文件本身还大时,索引表中的一项会对应文件的一组内容(如:以a开头的文件)
多级索引顺序文件
文件目录
文件控制块(FCB)
- 一个FCB就是一个目录项
目录结构
单级
一个系统一张目录表
文件不允许重名
两级
系统和用户的目录表分开
不同用户文件可以重名
多级(树形)
不同目录下的文件可以重名
绝对路径 & 相对路径
无环图目录结构
如果多个用户之间使用了同一个文件,就让他们的文件指针都指向这个文件
有利于文件的共享
索引节点
是对于目录表的一次 “瘦身”
存放除了 文件名 的所有文件信息
目录表中只需要使用一个索引节点指针就能够找到文件的信息
当有用户删除这个文件的时候,只会删除这个文件结点上的计数器,只有计数器为0才会删除文件
文件存储
连续分配
- FCB中记录 起始 和 长度 即可
链式分配
显式
有一张 FAT 表进行记录每个块后面的块是谁
可以实现随机存取
隐式
每个物理块中自己存储自己的下一块是谁
只能顺序读取
索引分配
索引表
为每个文件都建立一张索引表,用于存放这个文件使用到了哪些物理块
索引表 < 块大小
方案
链接方案
- 如果一个文件拥有的块一个索引表放不下,那么就让这些索引表链接起来(在最后一张项上写傻上下一张表的地址)
多层索引
像建立多级页表一样,对于索引表进行分割
如果有k级索引,那么就需要k+1次访存
缺点
- 对于一个小文件也需要访问k+1次
混合索引
- 顶级索引表中有:
1.直接索引
2.一级间接索引
3.二级间接索引
- FCB中存有 顶级索引表 的地址
文件共享
硬链接
不创建新文件
就是索引结点
软链接
创建新文件(link类型)
对应的文件本体被删除,软链接仍然还在,只是找不到对应的资源
访问文件的时候有多次磁盘 I/O,所以比 硬链接慢
文件保护
口令保护
- 需要输入密码才能访问
加密保护
- 对原来的数据进行加密,需要使用密钥解锁(http加密)
访问控制
- 对用户对于文件的访问权限阶梯控制
磁盘
”机械硬盘“
结构
盘片
盘面
- 磁盘的一个切面
磁道
- 盘面上的一个轨道
柱面
- 竖着的所有同一位置的磁道组成的柱体
扇区
- 磁道切出来的一个扇形
地址
(柱面号,扇面号,扇区号)
为什么不是(扇面号,柱面号,扇区号)?
1.所有磁头是 “共进退” 的
2.存储的时候如果按照先往相同的柱面存储,那就不需要移动磁头,只有这个柱面上的所有磁道都存满之后才需要移动磁头,减少了磁头的移动时间
一次读写时间
寻道时间
延迟时间
减少延迟的办法
交替编号
- 1.因为每次磁头读完一个扇区的磁道都有反应时间,所以如果数据是连续每个磁道存放,那么磁头就需要停着等待。
2.如果是隔着道存,那就能用移动的时间避开这个 “反应时间”
- 错位命名
- 对于每个扇区也 “交替编号”,原理同交替编号
- 寻址结构设计
- 使用先确定柱面,后确定扇面;
而不是反过来(减少磁头的移动)
- 传输时间
调度算法
先来先服务(FCFS)
优点
- 公平
缺点
- 若访问的磁道分散,性能很差
最短寻找时间优先(SSTF)
访问离目前磁头所在位置最近的磁道
优点
- 性能好,寻道时间短
缺点
- 产生饥饿
扫描算法(SCAN、电梯算法)
只有到达磁盘最外道,才能向内走
优点
- 不会产生饥饿
缺点
1.如果进程访问到的最外道 不是磁盘的最外道,那就有白白浪费的寻道
2.对于每个磁道的处理时间不均匀
LOOK调度算法
- 对于扫描算法的改进,只要到达了进程访问的最外道/最内道,就更改方向
循环-扫描算法(C-SCAN)
单向处理每个磁道,像循环链表一样
C-LOOK算法
- 不再从磁盘的0磁道一直到最外道;
从进程访问的最内道单向访问到进程访问的最外道
- 不再从磁盘的0磁道一直到最外道;
磁盘管理
初始化
低级初始化(分扇区)
逻辑初始化(创建文件系统)
引导块
- 计算机启动时,需要有一个 “自举程序”(初始化程序、开机加载的程序),来初始化CPU、寄存器、设备控制器、内存、然后启动操作系统
坏块
- 随着磁头滑动,磁道会有损坏,这时会由 “备用扇区” 对其进行逻辑替代