Transactions-事务

xv6 将每个系统调用(如 sys_write, sys_mkdir)封装为一个事务

接口

  • begin_op(): 事务开始。告诉日志系统“我要开始修改了”。如果日志空间不够,这里会 Sleep。
  • end_op(): 事务结束。告诉日志系统“我改完了”。这不会立即触发磁盘写,而是尝试合并提交。

保证

begin_opend_op 包裹的所有磁盘写操作(log_write),对外表现为原子性。

  • 要么这组写操作全部生效。
  • 要么全部不生效。
  • 绝不会出现部分生效的情况。