清华操作系统课程(向勇、陈渝)笔记——第四章(一)(虚拟文件系统,数据块缓存,打开文件的数据结构,文件分配)

1. 虚拟文件系统

1.1 目的

对所有不同文件系统的抽象。

用户只需要调用文件系统API,上层是虚拟文件系统层,然后底层是特定的文件系统模块。这样用户写出来的程序就可以适用于不同的文件系统。

1. 2 功能

  • 提供相同的文件和文件系统接口
  • 管理所有文件和文件系统关联的数据结构
  • 高效查询例程,遍历文件系统
  • 与特定文件系统模块的交互

1. 3 文件系统数据结构

卷控制块(superblock)
  • 每个文件系统一个
  • 文件系统的详细信息:块、块大小、空余块、计数/指针等
文件控制块(vnode or inode)
  • 每个文件一块
  • 文件详细信息:许可、拥有者、大小、数据库位置等
目录节点(dentry)
  • 每个目录项一个
  • 将目录项数据结构及树形布局编码成树形布局结构
  • 指向文件控制块、父节点、项目列表
当需要时加载进内存
  • 卷控制模块:当文件系统挂载时进入内存
  • 文件控制块:当文件被访问时进入内存
  • 目录节点:在遍历一个文件路径时进入内存

2. 数据块缓存

  • 数据块按需读入内存:提供read()操作。预先读取后面的数据块。
  • 数据块试用后被缓存:假设数据将会再次被使用。写操作可能被缓存和延迟写入。
  • 两种数据块缓存方式:普通缓冲区缓存;页缓存。

3. 打开文件的数据结构

打开文件描述

  • 每个被打开的文件一个
  • 文件状态信息:目录项、当前文件指针、文件操作设置

打开文件表

  • 一个进程一个
  • 一个系统级的
  • 每个卷控制块也会保存一个列表
  • 当一个进程执行打开操作,会返回一个index,index指出进程的打开文件表的表项,基于这个表项找到系统的打开文件表,根据系统的打开文件表的表项找到文件。

4. 文件分配

4. 1 概述

大多数文件都很小

  • 需要对小文件提供强力的支持
  • 块空间不能太大

一些文件非常大

  • 必须支持大文件
  • 大文件访问需要相当高效

如何为一个文件分配数据块

  • 分配方式:连续分配、链式分配、索引分配

  • 指标:高效(如存储利用)、表现(访问速度)

4. 2 连续分配

  • 文件头指定起始块和长度

  • 位置/分配策略:最先匹配,最佳匹配等

  • 优点:文件读取表现好;高效的顺序和随机访问

  • 缺点:碎片;文件增长问题(适合只读的文件,不会有内容的增长)

4. 3 链式分配

  • 文件以数据块链表方式存储
  • 文件头包含了第一块和最后一块的指针
  • 优点:创建、增大、缩小很容易;没有碎片
  • 缺点:不可能进行真正的随机访问(要找第二块必须先找到第一块);可靠性(如果破坏一个节点,就无法访问后面的节点了)

4. 4 索引分配

  • 为每个文件创建了一个名为索引数据块的非数据数据块(到文件数据块的指针列表)
  • 文件头包含了索引数据块
  • 优点:创建、增大、缩小很容易;没有碎片;支持直接访问
  • 缺点:当文件很小时,存储索引的开销较大;如何处理大文件,索引数据块可能不够,需要采用多级索引块/链式索引块。

5. 空闲空间列表

跟踪在存储中的所有未分配的数据块

用位图代表空闲数据块列表

  • 方法:如果i=0表明数据块i是空闲的,反之则已分配

  • 使用简单但是可能会是一个很大的big vector

  • 保证内存和磁盘的位图一致:先在磁盘上设置i=1,再分配block,然后在内存中设置i=1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值