動的ロード

UNIX の場合、通常、呼び出されるすべてのプログラムの名前と、呼び出されるプログラム自体の両方をリンク時に用意する必要があります。ただし、プログラムやサブプログラムは動的にロード可能なプログラムとして作成することで、リンクせずに実行することができます。

COBOL システムでは、プログラムの各呼び出しをプログラムに直接リンクするか (リンク時にプログラムが使用可能な場合)、動的ローダにリンクすることができます。動的ローダはランタイムで指定のプログラムを検索し、必要に応じてそのプログラムを動的にロードします。

動的にロード可能な実行可能ファイルは呼び出し可能共有オブジェクトです。呼び出し可能共有オブジェクトでは、どのタイプのプログラムやサブプログラム (COBOL、C、C++ など) も動的にロードできます。

動的にロード可能なファイルではリンクは必要ありませんが、システム実行可能ファイル cobrun (マルチスレッド・アプリケーションの場合は cobrun_t) がトリガとして必要になります。

プログラム名は、リテラルまたはデータ項目の値として動的ローダに提供できます。動的ローダは、次の場所で指定のプログラムを検索します。

  1. メモリ内のリンクされるプログラム、サブプログラム、ルーチンのリスト。リストは、プログラム、サブプログラム、ルーチンの状態も記録します。次の状態があります。
    • アクティブ - プログラムまたはルーチン(再帰的であること) はまだ呼び出しスタック状態です。
    • インアクティブ - プログラムまたはルーチンが呼び出され、制御は呼び出しプログラムに戻りましたが、呼び出されたプログラムやルーチンはキャンセルされていません。
    • 初期化 - プログラムやルーチンはシステム実行可能ファイル、共有ライブラリ、またはロードされる呼び出し可能共有オブジェクト内にありますが、既に呼び出されています。
    • 論理的にキャンセル - プログラムまたはルーチンは呼び出されてキャンセルされましたが、メモリからパージされていません (default_cancel_mode ランタイム調整可能変数を参照)。
  2. プログラムに対して動的にロード可能なファイルのファイル・システム。

cob コマンドへのフラグを使用し、リンクして直接参照するプログラムと、動的にロードするプログラムを明示的に指定できます。明示的な指示がない場合、cob は、COBOL ソースでプログラムをどのように呼び出すかに応じてデフォルトのアクションを取得します。