Jump to content 日本-日本語

製品 >  ソフトウェア >  HP- UX Developer Edge

HP-UXメモリ管理 ホワイト・ペーパー バージョン1.4

物理メモリの役割
HP-UX/Integrityサーバー お問い合せ
コンテンツに進む

物理メモリの役割


メモリは、データを記憶するための「入れ物(container)」です。高速データ記憶のための汎用的な保管場所がCPUの近くにあり、これらはランダム・アクセス・メモリ(RAM)または「メイン・メモリ(main memory)」と呼ばれています。CPUがプロセスを実行するためには、プロセスで参照されるコードとデータがRAMに存在していなければなりません。RAMは、すべてのプロセスで共有されます。

システム内のメイン・メモリが多いほど、頻繁にページングや非アクティブ化を行うことなく、システムでより多くのデータにアクセスでき、より多くの(または、より大きな)プロセスを保持して実行することができます。なお、メモリ常駐リソース(ページ・テーブルなど)もメイン・メモリ内のスペースを消費します。このため、アプリケーションで使用可能なスペースは減少します。

システムの起動時にHP-UXがディスクからRAMにロードされ、システムがシャットダウンするまでメモリに常駐します。

ユーザー・プログラムとコマンドもディスクからRAMにロードされますが、このような小さな部分は必要な時点でロードされます。プログラムが終了すると、プロセスで使用されたメモリがオペレーティング・システムによって解放されます。

ディスク・アクセスは、RAMアクセスに比較すると遅くなります。過度なディスク・アクセスは待ち時間の増加やスループットの低下を引き起こすことがあるため、ディスク・アクセスがシステムのボトルネックになることがあります。これを防止するには、ある程度のバッファリングを行う必要があります。バッファリング、ページング、および非アクティブ化の各アルゴリズムによって、ディスク・アクセスが最適化され、現在実行されているプログラムのデータとコードをRAMからディスクに戻すタイミングが決められます。ユーザー・プログラムまたはシステム・プログラムによってデータがディスクに書き込まれる際、そのデータはプログラムのRAMから直接書き込まれるか(たとえば、"raw"デバイスへの書き込み)、バッファ・キャッシュにバッファリングされて、比較的大きなチャンク(かたまり)でディスクに書き込まれます。また、プログラムがファイルとデータベース構造をディスクからRAMに読み込むことがあります。システムをシャットダウンする前にsyncコマンドを発行すると、バッファ・キャッシュで変更されたバッファすべてがディスクにフラッシュされます(書き出されます)。

各プロセッサーには、レジスタとキャッシュも搭載されています。これらは、メイン・メモリよりも高速です。実際のプログラム実行はレジスタ内で行われ、レジスタがキャッシュおよび別のレジスタからデータを取得します。キャッシュには、メイン・メモリの一部の現在の作業コピーが入っています。メモリ管理についての以降の説明では、ほとんどの場合、キャッシュとレジスタを完全に無視し、メイン・メモリから直接データと命令にアクセスするものとして扱います。

注記:キャッシュとレジスタは実際にはメモリの一種ですが、本書では後述の「プロセッサーのメモリ関連部分」で取り上げます。

ここからは、しばらく「メイン・メモリ」についてのみ説明します。

図1 プロセスで使用可能な物理メモリ

プロセスで使用可能な物理メモリ

使用可能メモリ


メイン・メモリのうち、カーネル用に予約されていない部分を、使用可能メモリと呼びます。使用可能メモリは、ユーザー・プロセスの実行のためにシステムで使用されます。

すべての物理メモリがユーザー・プロセスで使用可能だとは限りません。カーネル・テキストと初期化済みデータが約10MBのRAMを占有します。さらに、カーネルbss(未初期化データ)と(特に)カーネル・ブート時に割り当てられるさまざまな構造によって、さらにメモリが使用されます。これらの構造の多くは、非常に大きい場合があります。一部の構造のサイズはカーネル調整パラメータによって決められますが、多くの構造のサイズはシステム内の物理メモリ量を基準に決められます。たとえば、このような構造が、物理メモリの4096バイト・ページそれぞれで96バイトのエントリを1つ持つ場合があります。

HP-UXカーネルは、システム初期化時にデータ構造すべてを割り当てるのではなく、正常な動作時にシステムの必要に応じて一部のカーネル構造を動的に割り当て、解除します。この割り当ては、使用可能なメモリ・プールから行われます。このため、任意の時点で、使用可能メモリの一部をカーネルが使用し、残りのメモリをユーザー・プログラムで使用できます。

物理アドレス空間はハードウェアで使用されるアドレスの範囲全体であり(32ビット(ナロー・モード)カーネルでは4GB)、メモリ・アドレス空間、プロセッサー依存コード(PDC: processor-dependent code)アドレス空間、およびI/Oアドレス空間に分割されます。次の図は、計算に使用できる大量のメモリを示しています。メモリ・アドレス空間はシステム・アドレス空間の15/16を占めますが、PDCとI/Oに割り当てられるアドレス空間は比較的小さい範囲のアドレスです。

図2 システム・アドレス空間の主要セクション(32ビット・カーネルの場合)

図2 システム・アドレス空間の主要セクション(32ビット・カーネルの場合)

図3 システム・アドレス空間の主要セクション(64ビット・カーネルの場合)

図3 システム・アドレス空間の主要セクション(64ビット・カーネルの場合)

ロック可能メモリ


プロセスが存続している間、システム・コール(mlock、plock、shmctlなど)によってメモリ内に保持されるページを、ロック済みメモリと呼びます。ロック済みメモリをページングすることはできず、ロック済みメモリを持つプロセスを非アクティブ化することもできません。一般に、ロック済みメモリには、頻繁にアクセスされるプログラムやデータ構造(アプリケーション・コードの重要な部分など)が存在します。これらをメモリに常駐することで、アプリケーションのパフォーマンスが向上します。

ロック可能なメモリ量を追跡する変数がlockable_memです。

使用可能メモリは物理メモリの一部であり、カーネルとそのデータ構造にとって必要な量を差し引いたものです。lockable_memの初期値は、起動後にシステム上で使用可能なメモリからシステム・パラメータunlockable_memの値を差し引いた値です。

ロック可能メモリの値は、次の要因によって決まります。

  • インタフェース・カードの数と調整パラメータの値によって変わるカーネルのサイズ。
  • システムによって異なる使用可能メモリ。
  • システム・パラメータunlockable_memは、カーネル調整パラメータであり、unlockable_memの値が変わると、lockable_memの初期値も変わる。
HP-UXでは、ユーザーがロックできる使用可能メモリの量に明確な限度はありませんが、ロックできないメモリ量については制限があります。

メモリを使用する他のカーネル・リソース(動的バッファ・キャッシュなど)によって、次の変化が起こることがあります。

  • メモリが使用されると、ロックできるメモリ量が減る。
  • メモリが解放されると、ロックできるメモリ量が増える。
ロック済みのメモリ量が増えるにつれて、ますます少なくなる使用可能メモリ・プールをめぐって既存のプロセス間で競合が起こります。この残りのメモリ・プール内のページ数がページングしきい値(lotsfree)を下回ると、システムで一般に使用される適度なメモリを維持するために、vhandをスケジュールすることでページング・メカニズムが有効になります。

プロセスの進行に十分なスペースを確保するよう、注意が必要です。十分なスペースがない場合、適度な空きメモリを確保するために、システムが頻繁にページングと非アクティブ化の処理を実行しなければならなくなります。

二次記憶領域


システムのメイン・メモリが不足すると、データが二次記憶領域に移されます。アクティブなプロセス用のメモリを確保するために、このデータは通常、システム・バスまたはネットワークを介してアクセス可能なディスクに保存されます。

元来スワップとは、プロセス全体をメイン・メモリと二次記憶領域との間で移動させる物理メモリ管理方式(以前のUNIX)を意味します。最近の仮想メモリ・システムではプロセス全体がスワップされることはなく、ページング方式が採用されています。この方式では、データと命令の個々のページを必要に応じて二次記憶領域からページインしたり、別の用途でメモリを解放するために再びページアウトすることができます。ページ方式を補助するのが非アクティブ化方式です。非アクティブ化方式では、システムのメモリ不足が深刻になった場合にプロセス全体を追い出すことができます。このように元来の方式とは異なりますが、旧称のなごりを残す形で、ページアウトされたデータの保存専用の二次記憶領域は、現在でも「スワップ・スペース(swap space)」と呼ばれています。

デバイス・スワップは、ディスク全体またはディスクのLVM(1)論理ボリュームの形をとることができます。スワップ用の空きスペースを確保するようにファイル・システムを構成できます。これをファイル・システム・スワップと呼びます。さらに多くのスワップ・スペースが必要な場合は、デバイス・スワップまたはファイル・システム・スワップのいずれかとして、実行中のシステムにスワップ・スペースを動的に追加できます。ディスク・スペースまたはファイル・システム内のディレクトリをスワップ用に割り当てる場合は、swaponコマンドを使用します。

(1)論理ボリューム・マネージャ(LVM)は、従来のディスク・パーティションよりも柔軟にディスク記憶領域リソースを処理できる基本ソフトウェア、およびコマンド群で構成されています。
最初のページへ 前のページへ 次のページへ

お問い合わせ

ご購入前のお問い合わせ


ご購入後のお問い合わせ

オンラインサポート
製品の標準保証でご利用いただける無償のサービスです。

ショールーム

ショールーム 導入をご検討のお客様へ
業務アプリケーションの継続・標準化・開発性とシステム担当者様、システム開発者様が抱える悩み・疑問に対する解決策実体験して頂けます。
印刷用画面へ
プライバシー ご利用条件・免責事項