MIT6.828_HW11_xv6 log

本文通过分析MIT6.828_HW11_xv6日志作业,探讨了如何创建文件系统崩溃的问题,并展示了如何修复xv6的日志系统。在修复过程中,解释了文件系统在崩溃前后各步骤的数据状态,以及为什么在提交前从缓冲区删除块33是错误的。最后提出了优化commit()函数以避免不必要的日志读取的方法。
摘要由CSDN通过智能技术生成

Homework: xv6 log

本节中我们将在两个部分探索xv6的日志系统,首先我们要人为地创建一个crash来说明为什么需要日志,第二,我们要删除xv6日志系统中一个效率低的部分。建议先结合源码阅读xv6讲义中file system的部分:XV6中文文档XV6源码

Creating a Problem

xv6日志的要点是使所有可能产生崩溃的文件系统操作都是原子的(日志实际上是对一系列写操作后被修改数据的备份,提交日志后才会发生真正的对文件物理块的写入,如果崩溃发生在提交日志后,真正写入时,那么系统重启后会根据日志再次执行一系列写操作,确保不会发生部分写入的情况,如果崩溃发生在提交日志前,那么重启后会忽视日志,等于所有写操作都没有发生)。 例如,文件创建涉及向目录添加新条目以及将新文件的inode标记为使用中。 如果没有日志,则在重新启动后,在一个之后但在另一个之前发生的崩溃将使文件系统处于不正确的状态。
以下步骤将破坏日志记录代码,使文件部分创建。

首先,使用以下代码替换log.c中的commit():

#include “mmu.h”
#include “proc.h”
void
commit(void)
{
int pid = myproc()->pid;
if (log.lh.n > 0) {

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值