在这次作业中,我们将探索xv6的log功能。主要就是创建1个crash,然后观察recover的过程。
xv6的log重点是将文件系统所有的磁盘更新操作原子化,比如在创建1个文件时涉及到在目录中添加新入口,并标记新文件的inode为使用中。如果没有log的话,在两次操作之间发送1个crash会导致重启后文件系统处于不正确状态。
第1步修改log.c如下:
#include "mmu.h"
#include "proc.h"
void
commit(void)
{
if (log.lh.n > 0) {
write_log()
write_head();
if(proc->pid > 1) // AAA
log.lh.block[0] = 0; // BBB
install_trans();