next up previous contents index
Next: REDUCE/SUSPEND ポートのトレースのきっかけ Up: トレースの制御と情報入手 Previous: 擬似ゴールの構造

CALL ポートのトレースのきっかけ

 

先にも延べたように、トレースのきっかけは擬似ゴールで関数として 指定されているmodule関数 trace_trigger_routineが実行されることにより行なわれる。 この関数の起動は、通常のKL1がコンパイルされて生成された module関数と同じ方法にて行なわれる。 よって、 この方式では、 トレース対象かどうかの条件判断が不要で、 通常の実行の効率 に影響を与えることなく、 必要な時にだけトレースできる。

トレース用の実行時ライブラリでは、トレース用のフラグ(-t)が指定された時には、 実行の開始 (runtime/kmain.c)にあたって初期ゴール (main:main) を作る際に、 トレースを行うように加工している。 すべての トレースはこれをきっかけに始まる。

このようにトレース化されたゴールがスケジュールされると、 trace_trigger_routine() が本来のモジュール関数と同様に 実行される。その結果:

その結果、次のリダクションが終了したときに、割り込みが検出され (klic_interrupt() runtime/intrpt.c)、 trace_flagがONであることより、trace_after()が呼びだされる。



Sekita Daigo
1998-05-18