文件管理
文件管理
文件系统基础
文件是具有符号名,由字节序列构成的数据项集合(文件系统的基本数据单位,文件名是文件的标识符号)
- 文件系统的功能
- 分配文件磁盘空间:管理文件块(位置和顺序)、管理空闲空间(位置)、分配算法(策略)
- 管理文件集合:定位(文件及其内容)、命名(通过名字找到文件)、文件系统结构(文件组织方式)
- 数据可靠和安全:安全(多层次保护数据安全)、可靠(持久保存、避免被破坏)
- 文件的属性:名称、类型、位置、大小、保护、创建者、时间、最近创建时间
- 文件头:文件系统元数据中的文件信息
文件的逻辑结构
- 文件大小
- 大多数文件很小:需要对小文件提供很好的支持,块空间不能太大
- 有的文件特别大:必须支持大文件,大文件的访问需要高效
- 文件分配(如何表示分配给一个文件数据块的位置和顺序)
- 分配类型:连续分配、链式分配、索引分配
- 考虑指标:存储效率(连续分配的外部碎片)、读写性能(链式和索引分配访问速度)
- 顺序文件:文件头指定起始块和长度(文件读取的性能好,搞笑顺序和随机访问;有碎片和文件增长无法实现的问题)
- 链式文件:文件以数据块链表方式存储,文件头包含了第一块和最后一块的指针(修改大小容易,没有碎片;无法实现随机访问,可靠性差;破坏一个链,后面的所有文件将会被破坏)
- 索引文件:为每一个文件创建一个索引数据块,文件头包含了索引数据块指针(修改大小容易,没有碎片,可以直接访问,文件小时开销大,大文件需要索引块的索引块)
- 索引顺序文件:总体索引分配方法,索引块之间用顺序分配的方法(UFS)
目录结构
- 文件控制块和索引结点
- 单级目录结构和两级目录结构
- 树型目录结构
- 图型目录结构
文件共享
文件共享可以节省磁盘空间
- 语义一致性:
- 由于网络延迟或者IO设计问题,需要规定多进程如何同时访问共享文件
- UFS语义:允许多用户同事读取和写入,立即显示写入结果
- 会话语义:写入内容只有文件关闭才可见
- 读写锁
文件保护
- 文件访问类型
| 访问类型 | 释义 |
|---|---|
| 顺序访问 | 按字节依次读取 |
| 随机访问 | 从中间读取(虚拟内存将内存页存储在文件中) |
| 索引访问 | 根据数据特征索引读取(如建立DB) |
- 文件访问控制
- 每个用户以何种方式获得哪些文件的哪些权限(r/w/x/d/l)
- 文件访问控制列表(ACL)
- Unix <User/Group/All r/w/x>
- 用户ID(识别用户)
- 组ID(识别用户组)
文件系统的实现
- 文件系统的层次结构
- 目录实现
- 文件实现
磁盘组织和管理
数据块石逻辑存储单位,可能由多个扇区构成。扇区是物理存储单位
- 磁盘的结构
- 寻道时间
- 旋转延时
- 磁头、读写头、盘面、柱面等
- 访问时间 = 等待通道时间 + 寻道时间 + 旋转延时
- 磁盘的调度算法
通过优化磁盘访问顺序提高磁盘访问性能(寻道时间耗时最大;同时会有多个在同一磁盘的IO请求,随机处理磁盘访问请求性能较差)- FIFO 按照顺序处理、性能差、接近随机访问
- SSTF 最短服务时间优先,选择从磁臂当前位置需要移动的最小IO请求,总是选择最短寻道时间
- SCAN 扫描算法,一个方向上移动,访问所有没有完成的请求(电梯算法)
- C-SCAN 循环扫描算法 限制了只在一个方向扫描
- C-LOOK 到达最后一个请求处,立即折返
- N-Step-Scan N步扫描,避免磁头黏着状态,进车行反复请求某一磁道的IO操作;将磁盘请求分为N个子队列,按照FIFO处理所有子队列,队列内部采用扫描算法
- FSCAN N步的简化,只有两个队列;所有的新请求放到一个队列,避免磁头粘着
磁盘的管理
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 xhj的博客!