Transactions-事务
xv6 将每个系统调用(如 sys_write, sys_mkdir)封装为一个事务。
接口
begin_op(): 事务开始。告诉日志系统“我要开始修改了”。如果日志空间不够,这里会 Sleep。end_op(): 事务结束。告诉日志系统“我改完了”。这不会立即触发磁盘写,而是尝试合并提交。
保证
被 begin_op 和 end_op 包裹的所有磁盘写操作(log_write),对外表现为原子性。
- 要么这组写操作全部生效。
- 要么全部不生效。
- 绝不会出现部分生效的情况。