IBM i のメインメモリ管理について説明します。
IBM i のプール
IBM i はメインメモリをプール(Storage Pool)という論理エリアに分割して使用します。サブシステム起動時にどのプールを使用するかが指定されます。各々のジョブは実行するサブシステムが割りふりされているプール(論理的なメモリ領域)を使用して実行されます。
・上記はシステム値QCTLSBSDがQCTLの場合の例です。デフォルトで4つのプールが作成され(メインメモリが論理的に4つに分割され)、それぞれをサブシステムがSBSDの記述に従って使用します。
※QCTLSBSDがQBASEの場合は、デフォルトで2つのプールだったと思います。
プールの特徴
・1つのプールは複数のサブシステムから共用することもできますし(上記ではベースプール)、専用とすることもできます(プール4, プール5)。デフォルト4に加えユーザーが新たにユーザー作成プールを定義して、それを使用するサブシステムを作成することもできます。
・1つのサブシステムに1~10個のプールを使用させることが出来ます。
以下はサブシステム記述作成画面(CRTSBSDコマンド)の例です、記憶域プールのパラメーターに必要なプール数とそれぞれのサイズ、活動レベル(同時実行可能な最大スレッド数)を指定しています。このようにして最大10個のプールを定義できます。
・サブシステムが複数個のプールを持つ場合、ジョブは経路指定項目の設定に従って、実行されるプールが選択されます。
・ベースプールを除いて、複数のサブシステムが一つのプールを共有することはできません。
・プールは定義されただけではメインメモリ上に確保されません。サブシステムを起動した際にプールが活動化され、メインメモリ上に確保されます。
・ユーザー作成のプールを持つサブシステムを開始・終了する毎に該当のユーザー作成プールの領域は作成・消去されます。従って左記にしたがってベースプールのサイズも減少・拡大することになります。
・活動化されるプール(活動プール:Active Pool)はシステム全体で同時に16まで
マシンプールは特殊なプール
マシンプールはIBM i システムが使用し、ユーザーが直接使用することはありません。
マシンプールはSLIC(マイクロコード)やIBM i OSの使用するデータベース、通信などのI/Oが使用します。
マシンプールのサイズはそのIBM i システムに接続されている端末数や実行ジョブ数、実行ジョブの負荷が多いほどより多くのマシンプールを必要とします。マシンプールのサイズは システム値QMCHPOOL で指定できます。システム値 QPFRADJ が 1/2/3の場合は、実際のマシンプールのサイズ=システム値QMCHPOOLはシステムによって可変し、最適な値に調整されます。
ベースプールはOSの基本的な処理を実行する+α
ベースプールはIBM i OSのメッセージ処理やスプール等の基本機能が実行されます。それ以外にもバッチジョブや対話型ジョブもベースプールを使用します。
システム値 QBASPOOLはベースプールの最小値を指定します。実際のベースプールのサイズはマシンプールのサイズの増減やプール3,4、ユーザー作成プールのサイズが増減した際に変動します。上述のシステム値 QPFRADJの自動調整によってもプールサイズが変化します。