プログラムの性質:4つの「再」
概要と特徴
再入可能 (Reentrant)
複数のタスクが同時に同一のプログラムを実行可能な性質。 内部に状態を保持せず、局所変数のみを使用する設計。
再使用可能 (Reusable)
一度実行が終わったプログラムを、ロードし直さずに再度実行可能な性質。 実行開始時に変数を初期化する設計。
再帰的 (Recursive)
実行中のプログラムが、自分自身を呼び出し可能な性質。 スタック領域を用いて戻り先や変数を管理する設計。
再配置可能 (Relocatable)
主記憶装置(メモリ)上のどの番地に配置しても実行可能な性質。 アドレス指定を相対アドレスで行う設計。
分類
メモリ管理と実行制御
- 再入可能:並列処理・マルチスレッド用。
- 再使用可能:プログラムの再利用性。
- 再帰的:アルゴリズムの構造。
- 再配置可能:OSによる動的メモリ配置。
上位概念・下位概念
プログラム属性 (Program Attributes)
- 上位概念:計算機科学、ソフトウェア工学、メモリアドレス変換。
- 下位概念:スレッドセーフ、共有ライブラリ、動的リンク、ベースレジスタ。
メリット
効率的な資源利用
- 再入可能:メモリ消費の抑制(コード共有)。
- 再配置可能:メモリの断片化(フラグメンテーション)の解消。
- 再帰的:複雑な処理(階層構造など)の簡潔な記述。
デメリット
実装の複雑化
- 再入可能:グローバル変数の使用制限。
- 再帰的:スタックオーバーフローのリスク。
- 再配置可能:アドレス変換によるオーバーヘッドの発生。
既存との比較
逐次実行プログラムとの差
- 従来型:一度実行すると内部状態が変化し、再ロードが必要。
- 再属性保持型:連続実行や同時実行を前提とした高度な管理。
競合
排他制御 (Mutual Exclusion)
再入可能でないプログラムを複数タスクで共有する場合、セマフォなどの排他制御が必要。
導入ポイント
システム設計時の選定
- マルチタスクOS:再入可能と再配置可能が必須。
- ライブラリ:再使用可能性の確保。
注意点
スタック容量の確保
再帰的プログラムの使用時は、呼び出し回数に応じたスタックメモリの消費に注意。
今後
仮想化技術との親和性
コンテナ技術やサーバーレスアーキテクチャにおいて、これらの性質はインスタンスの高速起動や効率的な実行に直結。
関連キーワード
- マルチスレッド (Multi-thread)
- スレッドセーフ (Thread-safe)
- フラグメンテーション (Fragmentation)
- スタック (Stack)
- ベースレジスタ (Base Register)