FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

MITのxv6を読もう - 第6章 データのロギング -

ロギングといのは、ディスクへのアクセス中にクラッシュが発生しても回復するための構成。

多くのファイルシステムの操作では、ディスクへの複数回の書き込みが発生し、クラッシュは、ある一部分の書き込みがファイルシステム上のディスクに対して実行された後で発生し、その結果一貫性の無い状態が発生する。 例えば、ディスクの書き込み順番に依存して、ファイル削除中のクラッシュでは解放されたinodeのディレクトリのエントリポイントが消失したり、割り当てはされたものの解放されないinodeが発生したりする。

xv6はこのようなファイルシステム操作中のクラッシュの問題をシンプルなロギングバージョンによって解決している。 xv6のシステムコールは、ディスク上のファイルシステム構造に対して直接的に書き込みを行わない。 その変わりに、全てのディスクへの所望の書き込みは、ディスク上のログとして生成され配置される。 システムコールが全ての書き込みをログすると、特別なコミット記録がディスクに対して書き込まれ、ログの内容が完全な操作として反映される。

システムがクラッシュし再起動すると、ファイルシステムはプロセスを実行する前に以下のような順番でリカバリするコードを実行する。 もしログが完全な操作として記録されていると、リカバリコードはその書き込みをディスク上のファイルシステムに反映させる。 もしログが完全な操作としてマークされていないと、リカバリコードはそのログを無視する。リカバリコードはログを消去して終了する。

ログはクラッシュに関しては操作のアトミックを保つ: 回復の後は、ディスク上の全ての操作は完了しているか、全く実行されていないかのどちらかである。