闭卷重建文件抽象与打开文件表的对象、状态、事件、不变量与一个失败反例。
操作系统与系统实验 · 小纸条
选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。
闭卷重建目录、路径解析与链接的对象、状态、事件、不变量与一个失败反例。
闭卷重建文件分配与索引结构的对象、状态、事件、不变量与一个失败反例。
闭卷重建空闲空间与块布局的对象、状态、事件、不变量与一个失败反例。
闭卷重建页缓存、写回与一致性的对象、状态、事件、不变量与一个失败反例。
闭卷重建实验:inode索引容量的对象、状态、事件、不变量与一个失败反例。
闭卷重建实验:崩溃写序列判定的对象、状态、事件、不变量与一个失败反例。
核心机制:路径逐分量查目录项到inode;硬链接共享inode,符号链接保存另一条路径;实验入口:创建a、a的硬链接b和符号链接c,执行rename与unlink后逐项判断可访问性;边界:硬链接计数不等于打开引用数;符号链接可跨文件系统也可能形成环。
核心机制:文件描述符索引进程表项,系统打开文件项保存偏移与状态,并引用内存inode/vnode;实验入口:同一文件先open两次再dup一次,推演三描述符是否共享偏移和引用计数;边界:路径名不是打开后的唯一身份;unlink后已有打开引用仍可继续访问。
核心机制:位图适合批量找连续块,空闲链简单却不利于连续分配;局部性影响后续I/O;实验入口:对32块位图执行分配释放并输出最长连续空闲区,比较只看空闲总数的错误;边界:元数据本身也要持久化与校验;位图更新和数据写入顺序影响崩溃状态。
核心机制:连续、链式和索引分配在随机访问、扩展、碎片与元数据开销之间权衡;实验入口:用直接、一级间接和二级间接指针计算给定块大小下最大文件和访问次数;边界:索引块容量要扣除指针宽度与格式开销;稀疏文件的逻辑大小不等于占用块数。
核心机制:按块大小、指针宽度和直接/间接层数计算可寻址数据块与最大文件字节数;实验入口:输入块大小、指针字节、直接指针数和间接级数,输出最大数据块数;边界:每级间接是扇出乘法,索引块自身不计入文件数据块但占存储空间。
核心机制:读写通常先命中页缓存,脏页异步写回;fsync只在具体对象和设备语义下提供持久化边界;实验入口:模拟写临时文件、fsync文件、rename、fsync目录的原子替换序列,逐崩溃点判断可能结果;边界:write成功通常只表示数据进入内核缓存,不等于已经稳定落盘。
核心机制:用有限状态机枚举数据块、inode、目录项和日志提交的持久化顺序;实验入口:输入若干写入事件与崩溃位置,输出文件OLD、NEW、MISSING或INCONSISTENT;边界:模型必须声明缓存与写屏障假设;真实设备可能重排,不能靠源码顺序推断落盘顺序。