第 3 章 関連研究
4.2 設計および実装
4.2.7 CPU 状態の保存
CPUの状態を保存中に電源切断が生じた場合,復元すべきCPUの状態が書き 潰されてしまうため,CPUの状態を保存するための領域は2つ設ける.また4.2.1 節で述べたように,CPUの状態保存が終了したかどうかによってリカバリされる 時点が切り替わる.このとき「主記憶についてリカバリされる時点」と「どちら のCPU状態を用いてリカバリを行うか」という2つの独立な事象を原子的に切替 えることができなければならない.このため,CPU保存領域を示す2つのポイン タ,currentとnextを設ける.通常実行時にはnextとcurrentはそれぞれ別々の CPU保存領域を指す.これらのポインタの動作は次節で述べる.
recover memory
recover CPU save
memory alternate current
normal execution
save CPU
next=current
save memory
alternate current recovery operation
checkpointing
power failure normal transition
図 4.6: 状態遷移図
4.2.8 チェックポインティングとリカバリ
チェックポインティングは以下のように行う.
¶ ³
nextが示す領域へCPUの状態を保存;
next = current;
ページ操作ログの破棄;
スタックの保存;
オブジェクトの処理;
current = 以前のnext;
µ ´
「オブジェクトの処理」は,動的割り当て手法では保存領域の破棄とフラグのクリ アであり,静的割り当て手法ではオブジェクトの保存とフラグのクリアである.
currentとnextのポインタの切り替えによる,システムの状態遷移を図4.6に示 す.破線矢印は,電源切断が生じたときの状態遷移である.実線四角内にcurrent とnextへの操作を記した.
通常実行時およびCPUの状態保存が完了する前までは,4.2.1節での議論より一 つ前のチェックポイントでの状態を復元しなければならない.このときcurrentと nextの値は異なる.一方チェックポインティング中CPUの状態保存が完了した後 では,そのチェックポイント時の状態を復元する.このときcurrentとnextの値 は同一となる.
リカバリ処理のフローチャートを図4.7に示す.リカバリ時には,まずcurrentと nextの値を比較する.currentとnextの値が異なる場合には,ログによるページ
current == next
undo
( )
current CPU
! "
# $
( )
current =
% &
CPU# $ ' (
next CPU
No Yes
) * + , - . , /
0 1
図 4.7: リカバリ処理のフローチャート
操作のundoを行い,オブジェクトとスタックの状態を復元する.そして,current が指す領域には一つ前のチェックポイントでのCPU状態が存在するため,これを 用いてシステムを復元すれば良い.
currentとnextの値が同一の場合には,チェックポインティングでの処理(CPU 状態の保存以外)を再び行う.そして,currentをnextとは逆の領域にセットし た後,nextが指すCPUの状態を用いてシステムを復元すれば,電源切断が生じた チェックポイントの状態を復元することができる.
ポインタの操作はCPUのストア命令一つで実行が可能なため,このようにする ことで前述の2つの独立した事象を原子的に切替えることが可能となる.
リカバリで行われる作業は,ログを用いたページ操作のundoおよびオブジェク トとスタックの状態の保存/復元であり,巾等に行うことが可能な処理である.リ カバリ作業中電源切断が生じた場合,再びcurrentとnext の値が比較され同一の 処理が行われることとなるが,処理の巾等性より保存状態を損なうことなく適切に システムの状態の復元が可能である.currentとnextが同一でありcurrentポイ ンタが変更された後にシステムの電源切断が生じた場合,復元時にはcurrentと nextが異なっていると判断される.しかしフラグのクリアやログの破棄はすでに
表 4.1: 実装環境
CPU モトローラ社MPC860 50MHz I-cache 4Kbyte
D-cache 4Kbyte(Write Through) ボード モトローラ社 MPC860FADS プログラム領域 MPC860FADS付属FlashROM
サイクルタイム140nsec
(実行時70ns EDORAM領域にコピー) データ領域 ラムトロン社FeRAM FM1808-70
サイクルタイム140nsec
なされているため,行われる処理はcurrentが示すCPU状態を用いて復元するの みとなる.このため適切にシステムを復元させることが可能である.