チェーンローディングとは、コンピュータプログラムが現在実行中のプログラムを新しいプログラムに置き換える際に 使用する手法で、共通のデータ領域を用いて現在のプログラムから新しいプログラムへ情報を渡す。これはコンピュータの様々な分野で用いられている。
チェーンローディングはオーバーレイの使用に似ています。ただし、オーバーレイとは異なり、チェーンローディングは現在実行中のプログラム全体を置き換えます。オーバーレイは通常、実行中のプログラムの一部のみを置き換えます。オーバーレイの使用と同様に、チェーンローディングを使用するとアプリケーションのI/O負荷が増加します。
オペレーティングシステムのブートマネージャプログラムでは、チェーンローディングを使用してブートマネージャからブートセクタに制御を移します。ターゲットのブートセクタはディスクからロードされ、ブートマネージャ自体がブートストラップされたメモリ上のブートセクタを置き換えて実行されます。
Unix(およびUnixライクなオペレーティングシステム)では、 exec()システムコールを使用してチェーンローディングを実行します。現在のプロセスのプログラムイメージは、まったく新しいイメージに置き換えられ、現在のスレッドはそのイメージの実行を開始します。共通データ領域には、プロセスの環境変数が含まれており、これらはシステムコールをまたいで保持されます。
Linuxは、exec()プロセスレベルのチェーンローディングに加えて、kexec ()システムコールを使用してオペレーティングシステムカーネル全体を別のバージョンに置き換えることもサポートしています。新しいカーネルは、電源投入時から起動したかのように動作し、実行中のプロセスは保持されません。
BASICプログラムでは、チェーン ローディングはCHAINステートメント (またはCommodore BASICではステートメント)の管轄でありLOAD、これにより現在のプログラムが終了し、チェーンされたプログラムがロードされ、呼び出されます (これをサポートする BASIC の方言では、新しいプログラムの最初の行というデフォルトではなく、実行を開始する行番号を指定するオプションのパラメータがあります)。共通データ領域は、使用されている特定の BASIC の方言によって異なります。たとえば、BBC BASICCOMでは、すべての変数の特定のサブセットのみが CHAIN 間で保持されます。他の BASIC では、ステートメント[ 1 ]をと組み合わせて使用してCHAIN、チェーン操作全体で共通データとして保持する変数を指定できます。
チェーンローディングにより、BASICプログラムは利用可能なプログラムメモリや可変メモリに収まる以上のプログラムコードを実行できます。そのため、BASICで記述されたアプリケーションは、CHAINアプリケーション全体のプログラムフローの中で相互に連携する一連のプログラムによって、ワーキングメモリのサイズをはるかに超える規模にすることが可能になります。
Fortranの多くのバージョンには、共通ストレージの内容を保持しながらチェーンロードを実行するステートメントCALL CHAINが含まれています。[ 2 ]これは、 GNU Fortranの無関係なサブルーチンとは異なります。[ 3 ]CALL LINKLINK
OS/360とその後継OSでは、チェーンロードに(「転送制御」用の)マクロを使用しますXCTL。オペレーティングシステムのメモリ管理の都合上、これによりメモリ内の呼び出し元プログラムのコードが置き換えられる場合と置き換えられない場合があります。