我正在深入研究ext4和JBD2源代码,我不清楚如何在提交事务后立即执行读取操作。
这就是我理解阅读源代码:
我想知道在第3步和第4步之间,内核是否需要从某种原因释放内存,根据我的理解,释放这些 buffer_head 是安全的,因为我们可以将磁盘上的日志区域中的事务读回到内存中。
Q1)我想知道在检查点之前是否可以解除 buffer_head 的这种情况,或者 buffer_head 在内存中被锁定,直到检查点逐出它为止。
Q2)此外,我不确定第3步,我无法确定检查点是否需要一段时间才能执行。
答案 0 :(得分:0)
Q1) buffer_head
在执行检查点之前不会被释放,因为释放缓冲区然后将其从磁盘加载到内存而不是保留{更加昂贵{1}}在内存中以短的 delta 时间检查点。
Q2)由于磁盘上的日志区域中没有空闲块,因此可以在提交之前延迟或执行检查点,因此检查点将启动以释放即将进行的提交将使用的块。 / p>