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) {