遅延および早期ページング・スペース割り当ての比較

オペレーティング・システムは、PSALLOC 環境変数を使用して、メモリーおよびページング・スペース割り当てに使用するメカニズムを決定します。

PSALLOC 環境変数を設定しない場合、またはこの変数を null に設定したり早期以外の値に設定したりした場合、システムは、デフォルトの遅延割り当てアルゴリズムを使用します。

遅延割り当てアルゴリズムは、ディスク・リソースの有効使用を支援し、リソース管理に疎割り当てアルゴリズムを優先的に使用するアプリケーションをサポートします。このアルゴリズムでは、メモリー要求が出された時点ではページング・スペースの予約を行いません。ページング・スペースのディスク・ブロック割り当ては、要求されたページのページアウトが必要になるまで遅延されます。 一部のプログラムでは、大量の仮想メモリーを割り当ててから、 そのメモリーのほんの一部分だけを使用します。 このようなプログラムの例には、データ構造として疎ベクトルや疎マトリックスを使用する技術アプリケーションがあります。 遅延割り当てアルゴリズムは、オペレーティング・システム内のカーネルのようなリアルタイムの要求時ページング・カーネルの場合にも非常に効果的です。

このページング・スペースは、特に、ページングがほとんど行われない大きな実メモリーをもつシステムではまったく使用されない場合があります。遅延アルゴリズムでは、要求されたページのページアウトが必要になるまでページング・スペースの割り当てを遅らせます。その結果、無駄なページング・スペース割り当てはなくなります。この遅延割り当てにより、遅延アルゴリズムがシステムで使用可能なスペースより多くのページング・スペースを割り当てようとする状況が生じる場合があります。 この状況をページング・スペースのオーバーコミットメントと呼びます。

オーバーコミットメントのシナリオ (ページング・スペースが使い尽くされ、ページをページアウトするためのページング・スペース・ディスク・ブロックの割り当てが試みられる状況) では、結果的に障害が発生します。 オペレーティング・システムは、ページング・スペースのオーバーコミットの影響を受けるプロセスを強制終了することによって、全面的なシステム障害の発生を回避します。 フリーのページング・スペースの量が不足していることをプロセスに通知するために、SIGDANGER シグナルが送信されます。 ページング・スペース状態がさらに危険な状態になると、SIGDANGER シグナルを受信していないプロセスが選択され、SIGKILL シグナルが送信されます。

PSALLOC 環境変数を使用して、早期割り当てアルゴリズムに切り替えられます。このアルゴリズムでは、実行中のプロセスへのページング・スペースの割り当ては、メモリーが要求された時点で行われます。 要求時に使用できるページング・スペースが不足していると、早期割り当てメカニズムは、メモリー要求に応じることができません。

PSALLOC 環境変数を早期に設定すると、その環境内でその時点で開始されたプログラムは (現在実行中のプロセスを除いて) すべて、早期割り当て環境内で実行します。 早期割り当て環境では、要求が出された時点で十分なページング・スペースを予約することができなかった場合、malloc サブルーチンや brk サブルーチンなどのインターフェースは失敗します。

ページング・スペースの不足条件が発生しても、早期割り当て環境モードで実行されるプロセスには SIGKILL シグナルは送信されません。

PSALLOC 環境変数を早期に変更する方法は、変更を適用する範囲の広さによって異なります。

早期割り当て環境に切り替えると、以下のメモリー割り当てインターフェース・サブルーチンが影響を受けます。

  • malloc
  • free
  • calloc
  • realloc
  • brk
  • sbrk
  • shmget
  • shmctl