Logging-Flow-四步曲
当用户调用 write() 时,底层的数据流向:
- Log Writes (内存中):
log_write(): 进程修改 Buffer Cache 中的块。- 该块被标记为 Dirty,且被 Pin 住(不能驱逐回磁盘)。
- Commit (写日志):
write_log(): 将内存中被修改的块,写入磁盘的 Log Data 区域。write_head(): 关键! 将 Header Block 写入磁盘。这标志着事务提交。
- Install (写原本位置):
install_trans(): 读取 Log Data,将其写入磁盘的 Home Location (Inode区, 数据区等)。
- Clean (清理):
write_head(): 将 Header 中的n置为 0。表示当前日志已处理完,可以复用空间了。