Jump to content 日本-日本語

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

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

仮想メモリの構造
HP-UX/Integrityサーバー お問い合せ
コンテンツに進む

仮想メモリの構造


図15 メモリ管理構造
図15 メモリ管理構造

プロセス管理では、pregionまでのカーネル構造を使用してプロセスのスレッドが実行されます。uarea、proc構造、vas、およびpregionはプロセスごとのリソースです。つまり、複数のプロセス間で共有されず、これらの構造の重複しないコピーを各プロセスがもちます。

pregionより下のレベルは、システム全体のリソースです。これらの構造は、複数のプロセス間で共有されます(ただし、必ず共有する必要があるわけではありません)。

メモリ管理カーネル構造によりpregionが物理メモリにマッピングされ、仮想アドレスを物理メモリに変換するプロセッサー機能がサポートされます。次の表は、メモリ管理にかかわるカーネル構造を示しています。詳細については、後に説明します。

表6 主要なメモリ管理カーネル構造

カーネル構造 目的
vas メモリ内のプロセスに関連する構造要素を追跡。プロセスごとに1つのvasを維持。
pregion プロセスごとのリソースで、プロセスに付加された領域を記述。
region プロセス間で共有できるメモリ常駐システム・リソース。プロセスのB-tree、vnode、pregionを指す。
B-tree ページ索引とチャンク・アドレスを保存する平衡型ツリー(Balanced tree)。VFD(Virtual Frame Descriptors:仮想フレーム記述子)とDBD(Disk Block Descriptor:ディスク・ブロック記述子)のB-treeのルートにstruct brootがある。
hpde 仮想から物理への変換(つまり、VFDから物理メモリへの変換)のための情報。

仮想アドレス空間(vas)


vasはプロセスの仮想アドレス空間を表し、プロセス領域データ構造(pregion)の二重リンク・リストの先頭の役割を果たします。vasデータ構造はメモリ常駐です。

プロセスの作成時、システムによりvas構造が割り当てられ、そのアドレスがproc構造のフィールドp_vasに入れられます。

プロセスの仮想アドレス空間は、事実上隣接したページの論理チャンクに分割されます(vasエントリの表については、ホワイト・ペーパー 『 HP-UX Process Management 』を参照してください)。

pregionの仮想メモリ要素


各pregionは、プロセスの側からみた仮想アドレス空間の特定部分と、これらのページに到達するための情報を表します。pregionは、メモリまたは二次記憶領域内のページの物理的位置を示すregionデータ構造を指し示します。またpregionには、プロセスのページがマッピングされる仮想アドレス、ページ使用状況(テキスト、データ、スタックなど)、およびページ保護(読み取り、書き込み、実行など)も含まれます。

図16 pregionの仮想メモリ要素
図16 pregionの仮想メモリ要素

プロセスごとのpregion構造の以下の要素が、仮想メモリ・サブシステムにとって重要です。

表7 struct pregionの主要な要素

要素 目的
p_type pregionの種類。
*p_reg pregionにより付加される領域へのポインタ。
p_space, p_vaddr pregionの仮想アドレスで、仮想スペースと仮想オフセットから構成される。
p_off regionへのオフセットで、ページ内で指定される。
p_count pregionによりマッピングされるページの数。
p_ageremain、p_agescan、p_stealscan、p_bestnice メモリ・ページのエージングとスチール(流用)を行うためにvhandアルゴリズムで使用。
*p_vas pregionのリンク先のvasへのポインタ。
p_forw, p_back アクティブなpregionをウォークするためにvhandで使用される二重リンク・リスト。
p_deactsleep 非アクティブ化されたプロセスが休眠状態にあるアドレス。
p_pagein データをメモリに移すタイミングをスケジュールするために使用されるI/Oサイズ。
p_strength、p_nextfault 順次フォールトとランダム・フォールトとの比率の追跡に使用。p_pageinの調整に使用される。

システム・リソースの領域


領域は、ページ・グループを特定のプロセスに関連付けるシステム全体にわたるカーネル・データ構造です。領域には、専用(単一のプロセスで使用)と共有(複数のプロセスで使用可能)の2種類があります。必要に応じて、領域データ構造用のスペースが割り当てられます。領域構造はスワップ・デバイスに決して書き込まれませんが、領域構造のB-treeは書き込まれることがあります。

プロセスごとのリソースpregionが領域を指し示します。領域は、メモリ内に存在しないデータ・ブロックが存在するvnodeを指し示します。

表8 領域(struct region)

要素 目的
r_flags 領域フラグ(すぐ後で列挙)。
r_type
  • RT_PRIVATE:複数プロセスで領域を共有できない。PT_DATAとPT_STACKpregionがRT_PRIVATE領域を指し示す。
  • RT_SHARED:複数プロセスで領域を共有できる。PT_SHMEMとほとんどのPT_TEXT pregionがRT_SHARED領域を指し示す。
r_pgsz ページ内の領域のサイズ(現在メモリ内にあるページだけではない)。
r_nvalid 領域内の有効ページの数。これは、B-treeまたはb_chunk内の有効なvfdの数と同じ。
r_dnvalid スワップされる領域内のページ数。システムによりプロセス全体がスワップされる場合、r_nvalidの値がここにコピーされ、後に再びフォールトインする際に、プロセスに必要なページ数の計算に使用される。この情報は、再アクティブ化するプロセスの決定に使用される。
r_swalloc スワップ・デバイス上のこの領域用に予約され割り当てられるページ総数。vfd/dbdペア用に割り当てられるスワップ・スペースは計算に入れられない。
r_swapmem、r_vfd_swapmem 擬似スワップまたはvfd用に予約されるメモリ。
r_lockmem vfd/dbdペア用に割り当てられたロック可能メモリを含め、ロック可能メモリ用の領域に現在割り当てられているページ数。
r_pswapf、r_pswapb 擬似スワップ・ページ(pswaplist)を使用する領域リストへの順方向ポインタと逆方向ポインタ。
r_refcnt 領域で参照しているpregionの数。
r_zomb 変更されたテキストを示すために設定。リモート・システム上で実行中のa.outファイルが変更されている場合、プロセッサーのキャッシュからページがフラッシュされて、次回のアクセスの試行がフォールトになる。フォールト・ハンドラがr_zombがゼロでないことを認識し、メッセージPid %d killed due to text modificationまたはpage I/O errorを出力し、プロセスにSIGKILLを送信。
r_off ページ境界に整列したvnodeへのオフセット(ページ単位)。RF_UNALIGNEDが設定されていない場合のみ有効。vnodeのページr_offは、領域のB-treeの第1チャンクの第1エントリから参照。
r_incore 関連するプロセスでSLOADフラグが設定されている領域を共有するpregionの数。
r_dbd スワップ・デバイスに書き込まれるB-treeページ用のディスク・ブロック記述子。これにより、最初のページの位置を指定。ページは、スワップ・スペースの隣接エリアにまとめて保存される。
r_fstore、r_bstore ブロックの転送元と転送先のvnodeへのポインタ。このデータは、領域より上のpregionの種類によって異なる。一般に、r_bstoreはページ方式vnode(システム起動時に初期化されるグローバルswapdev_vp)に設定される。
r_forw、r_back アクティブなregionすべてのリンク・リストへのポインタ。
r_lock 領域構造変更用の読み取りロックまたは読み取り/書き込みロックを取得するために使用される領域ロック構造。
r_mlock この領域上でmlock操作をシリアライズ(直列化)するためのロック。
r_poip 実行中のページI/Oの数。
r_root B-treeのルート。複数のチャンクを参照する場合、r_keyがDONTUSE_IDXに設定される。
r_key、r_chunk vfddbdのチャンクが1つのみ必要な(32ビット・カーネル上で32以下のページ、または64ビット・カーネル上で64以下のページを参照する)場合に、 B-tree検索(r_root)の代わりに使用。
r_next、r_prev vnodeを共有するすべての領域の循環リンク・リスト。
r_preg_un 領域を指し示すpregion(1つまたは複数)。
r_excproc プロセスのr_flagsがRF_EXCLUSIVEに設定されている場合の、procテーブル・エントリへのポインタ。
r_excproc プロセスのr_flagsがRF_EXCLUSIVEに設定されている場合の、procテーブル・エントリへのポインタ。
r_lchain メモリ・ロック範囲のリンク・リスト。
r_mlockswap ロックを扱うために予約されているスワップ。
r_pgszhint ページ・サイズのヒント情報。
r_hdl ハードウェア依存の階層構造。

非整列ページのサポート(a.out)


ほとんどの実行可能ファイルのテキストとデータは、4KBのページ境界上で始まります。ファイル内のページがメモリ内のページに直接マッピングするため、HP-UXでは、これらのファイルをメモリ・マップ・ファイルとして扱うことができます。

上記のフィールドに加え、struct regionには、テキストとデータが(4KB)ページ境界上で整列しない古いバージョンのHP-UXでコンパイルされた実行可能ファイルをサポートするフィールドも含まれます。これらの実行可能ファイルは、r_flagsがRF_UNALIGNEDに設定されている領域によって参照されます。

表9 領域によりサポートされる非整列a.out

要素 目的
r_byte、r_bytelen a.outファイルへのオフセットとそのテキストの長さ。
r_hchain 非整列領域のハッシュ・リスト。

領域フラグ


領域の状態を示すさまざまなインジケータがr_flagsで指定されます。指定可能なフラグ値の一部を以下に示します。

表10 領域フラグ

領域フラグ 意味
RF_ALLOC HP-UX領域の割り当てと解放は必要に応じて行われるため、常に設定される。空きリストはない。
RF_UNALIGNED 実行可能ファイルのテキストがページ境界上で始まらない場合に設定される。この場合、整列するためにテキストがバッファ・キャッシュによって読み取られ、vfdがバッファ・キャッシュ・ページで指し示される。
RF_WANTLOCK スレッドがこの領域のvfdのロック(ページ上のI/Oのために)を求めたが、すでにロックされていることがわかって休眠状態になった場合に設定される。vfdのロック解除後、このフラグにより、wakeup()が呼び出されて待機中のスレッド(1つまたは複数)を続行できることが保証される。
RF_HASHED テキストが非整列であり(RF_UNALIGNED)、ハッシュ・チェーン上にある。領域はr_fstoreとr_byteでハッシュされる。各ハッシュ・チェーンの先頭は、texts[]内にある。RF_UNALIGNEDフラグをRF_HASHEDフラグなしで設定できるが(システムがハッシュされた領域の取得を試みたのに、その領域がロックされていた場合、システムは専用領域を作成)、RF_HASHEDフラグはRF_UNALIGNEDフラグなしでは設定されない。
RF_EVERSWP、RF_NOWSWP B-treeがこれまでスワップ・デバイスに書き込まれたことがあるか、現在書き込まれている場合に設定される。これらのフラグは、デバッギングに使用される。
RF_IOMAP この領域はiomap()システム・コールで作成されたため、exit()の呼び出し時に特別な処理が必要。
RF_LOCAL リモート・ファイルでローカル・スワップ・スペースが使用されている。
RF_EXCLUSIVE マッピング・プロセスが領域への排他的アクセスを許可されている。このフラグが設定されている場合、r_excprocがprocテーブル・ポインタに設定される。
RF_STATIC_ PREDICT コンパイラを最適化するために、テキスト・オブジェクトで静的分岐予測が利用されている。
RF_ALL_MLOCKED 領域全体がメモリにロックされている。
RF_SWAPMEM 領域で擬似スワップが使用されている。つまり、メモリの一部がスワップ用に保持されている。
RF_LOCKED_ LARGE ラージ・ページを使用して、領域がロックされている。
RF_SUPERPAGE_ TEXT テキスト領域でラージ・ページが使用されている。
RF_FLIPPER_ DISABLE カーネルの補助予測が無効になる。パフォーマンス・プロファイリングに使用されるフラグ。
RF_MPROTECTED 領域の一部が、メモリ・マップ・ファイル上で実行されるシステム・コールmprotectの対象になる。

領域のページの検索


領域フィールドr_key、r_chunk、およびr_rootを使用して、regionの個別のページに関する情報を検索します。

各ページは、vfd(メモリ内に存在する場合)またはdbd(ディスク上に存在する場合)で表されます。

それぞれのページごとに、vfdとdbdがstruct vfddbdにグループ化されます。定義では、vfdのpg_vビットが設定されている場合、vfdが使用され、pg_vビットが設定されていない場合、dbdが使用されます。

一般に(個別のページでなく)ページのグループに関する情報が必要なため、ページはチャンクにまとめられます。1つのチャンクに、仮想フレーム記述子(VFD)とディスク・ブロック記述子(DBD)の32または64のペアが含まれます。

仮想フレーム記述子(vfd)


仮想フレーム記述子と呼ばれる1ワードの構造により、プロセスがメモリ・ページを参照できます。vfdは、プロセスがメモリ内に存在する場合に、pfdatテーブル( 後述のpfdat_ptr[])に記述されている物理メモリのページを参照するために使用できます。

図17 仮想フレーム記述子(vfd)
図17 仮想フレーム記述子(vfd)

表11 仮想フレーム記述子(struct vfd)

要素 意味
pg_v 有効なフラグ。設定されている場合、メモリのこのページに有効なデータが含まれ、pg_pfnumが有効になります。設定されていない場合、このページの有効なデータはスワップ・デバイス上に存在します。
pg_cw 「書き込み時コピー(copy-on-write)」フラグ。設定されている場合、ページへの書き込みにより、データ保護フォールトが発生し、その時点でシステムによりページがコピーされます。
pg_lock ロック・フラグ。設定されている場合、このページでraw入出力が発生している。データがページとディスクの間で転送されているか、2つのメモリ間で転送されている。このページに対する次のraw入出力を開始する前に、カーネルは入出力の完了を待機して休眠状態になる。ディスクに書き込み中のページを読み出すことはできない。
pg_mlock 設定されている場合、ページがメモリ内でロックされており、ページ・アウトできない。
pg_pfnum(pg_pfnのエイリアス) ページ・フレーム番号。この番号から、このページの正しいpfdatにアクセスできる。

ディスク・ブロック記述子(dbd)


vfdのpg_vビットが設定されていない場合、vfdが無効であり、データのページがメモリ内でなくディスク上に存在します。この場合、ディスク・ブロック記述子(dbd)により、データへの有効な参照が提供されます。vfd構造と同じく、dbdの長さも1ワードです。

図18 ディスク・ブロック記述子(dbd)
図18 ディスク・ブロック記述子(dbd)

表12 ディスク・ブロック記述子(struct dbd)

要素 意味
dbd_type 次のデータ型がある。

  • DBD_NONE:このデータのコピーがディスク上に存在しない。
  • DBD_FSTORE、DBD_BSTORE:領域のvnodeで指し示される「順方向格納」または「逆方向格納」デバイス上でページを検索できる。(1)
  • DBD_DFILL:デマンド・フィル・ページ。スペースは割り当てられない。障害が発生すると、ディスクからのデータで初期化される。
  • DBD_DZERO:デマンド・ゼロ・ページ。要求時に、新しいページが割り当てられ、ゼロで初期化される。
  • DBD_HOLE:スパースな(疎な)メモリ・マップ・ファイルに使用。読み取り時にはページのデータがゼロになる。書き込み時にページが割り当てられ、ゼロで初期化され、データが挿入される。この時点で、dbd_typeがDBD_FSTOREに変わる。
dbd_data vnodeのタイプ(jfs、nfs、ufs、スワップ・スペース)に固有のデータ。vnodeで指し示されるファイル内のデータを検索するために、ファイル・システム(または、スワップ・スペース管理)のコードで使用。

(1)dbd_typeがDBD_FSTOREの場合、データのページはr_fstoreで指し示されるデバイス(通常はファイル・システム)のファイルに存在しています。dbd_typeがDBD_BSTOREの場合、データのページはr_bstoreで指し示されるデバイス(通常はスワップ・デバイス)のファイルに存在しています。

vfdsとdbdsを1つの場所に維持するチャンク


一般に、(個別のページでなく)ページのグループに関する情報が必要なため、ページはチャンクにまとめられます。1つのチャンクに、仮想フレーム記述子とディスク・ブロック記述子の32または64のペアが入ります。

  • カーネルは、仮想フレーム記述子(vfd)でメモリ内のページを検索する。
  • カーネルは、ディスク・ブロック記述子(dbd)でディスク上のページを検索する。
  • 定義では、vfdのpg_vビットが設定されている場合、vfdが使用され、設定されていない場合、dbdが使用される。
vfdとdbdの一対一対応がvfddbd構造全体で維持されます。この構造には、1つのvfd(c_vfd)と1つのdbd(c_dbd)のみが含まれます。

図19 vfddbdの配列を含むチャンク
図19 vfddbdの配列を含むチャンク

HP-UX領域では、vfdとdbdのチャンクを使用してページ所有権が追跡されます。

  • ページが有効な場合の、仮想ページから物理ページへの割り当て(PDIRに加えてこれが必要です)。ページは変換されないが有効なため、マッピングではなく「割り当て(assignment)」という言葉が使用されます。
  • ページのその他の仮想属性(ページがメモリ内でロックされているかどうか、ページが有効かどうかなど)。
  • 定義では、vfdのpg_vビットが設定されている場合、vfdが使用され、設定されていない場合、dbdが使用される。

平衡型ツリー(B-tree)


各領域に、vfddbdの単一配列(chunk)、またはB-tree(Balanced Tree)へのポインタのいずれかが含まれます。B-treeと呼ばれる構造により、スパース・データ(疎なデータ)の迅速な検索と効率的な保存が可能になります。bnodeのサイズはchunkと同じです。両方とも同じメモリ・ソースから取得できます。領域のB-treeに、ページ索引とチャンク・アドレスのペアが保存されます。HP-UXでは、オーダー29のB-treeが使用されます。

B-treeはキーで検索され、値が生成されます。領域B-treeでは、キーは、領域内のページ番号をチャンク内のvfddbdの数で除算したものです。

図20 B-treeのサンプル(オーダー= 3、深さ= 3)
図20 B-treeのサンプル(オーダー= 3、深さ= 3)

B-treeの各ノードには、オーダー+1のキー(または索引番号)とオーダー+2の値用の場所が含まれます。1つのノードがオーダー・キーを含む以上に成長した場合、2つのノードに分割されます。ペアの半分は元のノードに保持され、別の半分は新しいノードにコピーされます。B-treeノード・データには、ノードに含まれる有効な要素の数も含まれます。

表13 B-treeノードの説明(struct bnode)

要素 意味
b_key[B_SIZE] bnodeの各ページ索引に使用されるキー配列。
b_nelem bnode内の有効なキー/値の数。
b_down [B_SIZE+1] bnode内の値の配列。この値は、別のbnodeへのポインタ(これが内部bnodeの場合)またはチャンクへのポインタ(これがリーフbnodeの場合)のいずれか。

B-treeのルート


struct brootと呼ばれる構造がB-treeの始点を指し示します。

表14 struct broot

要素 意味
b_root B-treeの始点へのポインタ。
b_depth B-tree内のレベルの数。
b_npages B-treeの構成に使用されるページ数であり、チャンクとbnodeに使用される両方のページがカウントされる。
b_rpages ルーチンgrow_vfdpgs()を使用してカーネルがB-tree用に予約したスワップ・ページの数。B-tree構造内のvfd/dbdペアに割り当てられるスワップ量を示す。
b_list この領域内のbnodeまたはchunkに使用されるメモリ・ページのリンク・リストへのポインタ。通常、このリストの最初のページには、使用可能な空きスペースがある(b_nfragがゼロでない場合)。ここから新しいbnodeまたはchunkを割り当て、B-treeに追加できる。
b_nfrag b_list内の使用可能な(未割り当て)チャンクの数。チャンクはページの最後から割り当てられるため、ページ内で最後に割り当てられたチャンクの索引でもある(次の使用可能チャンクを取得するために、索引が減分される)。
b_rp B-treeを使用する領域へのポインタ。
b_protoidx、b_proto1、b_proto2 2つのプロトタイプdbd値と、b_proto1からb_proto2への切り替えが行われるページ索引。チャンク・スペースを割り当てる際の時間とメモリ・コストを最小限に抑えるために使用。
b_vproto 「書き込み時コピー」のページ範囲のリスト。これにより、実際のB-treeエントリをすぐに割り当てなくても、ページを「書き込み時コピー」に設定できる。vfdプロトタイプの決定に使用(下記の「vfdプロトタイプ」を参照)。
b_key_cache[]、b_val_cache[] 最後に使用されたキーのキャッシュと、そのキーに関連するチャンクへのポインタ。特定のstruct vfddbdの検索時(B-treeの検索前)に最初にチェックされる。

vfdプロトタイプ


struct brootのb_vprotoフィールドに、「書き込み時コピー」として扱われるページ範囲のリストが含まれます。これにより、B-treeエントリをすぐに割り当てることなく、ページを「書き込み時コピー」に設定できます。このプロトタイプの型はstruct vfdcwです。vfdの作成時、このリストにページがあるかどうかをチェックして、どのプロトタイプを使用するかが決められます。

表15 struct vfdcw

要素 意味
v_start [MAXVPROTO] 「書き込み時コピー」範囲の最初を示すページ。未使用の場合は、-1に設定。
v_end[MAXVPROTO] 「書き込み時コピー」範囲の最後。

テキストと共有ライブラリpregion用のpseudo-vas


ファイルをa.outまたは共有ライブラリとしてオープンする場合、領域を追跡する最も簡単な方法は、ファイルを実行可能ファイルとして最初にオープンする際にpseudo-vasを作成することです。作成するには、mapvnode()を呼び出し、vasポインタをvnodeのv_vas要素に保存します。以降、ファイルを実行可能ファイルとしてオープンする場合、仮想アドレス空間が付加される領域の検索にv_vasの非ヌル値が役立ちます。

pseudo-vasのタイプはPT_MMAPであり、関連のpregionのp_flagsがPF_PSEUDOに設定されています。このpregionが、このvnodeの領域に付加されます。次に、この実行可能ファイルまたは共有ライブラリ(非擬似pregion)を使用するすべてのプロセスが、タイプがPT_TEXT(a.out)またはPT_MMAP(共有ライブラリ)である領域に付加されます。実行可能ファイルとして特定のvnodeを使用するプロセスの数は、va_refcntのpseudo-vasに保持されます。

領域に関連するpregionは、領域要素r_pregsで始まる二重リンク・リストに連結され、p_prpnextとp_prpprevによりpregion内で定義されます。このリストはp_off(領域へのpregionのオフセット)でソートされ、ヌルで終わります。

a.outまたは共有ライブラリを使用するすべてのプロセスが終了した後でも、領域へのハンドルは残ります。この時点でページを処理できます。

図21 pseudo-vas構造のマッピング
図21 pseudo-vas構造のマッピング

ハードウェアに依存しないページ情報テーブル(pfdat)


ページ・フレーム・データ(pfdat)テーブルは、物理メモリの再配置可能ページすべてを表す2レベルのテーブルです(カーネルのブート時に恒久的に割り当てられるメモリは表されません)。このテーブルは、ページ・フレーム番号(pfn、PPNと同じ)で索引が付けられた巨大な配列とみなすことができます。

物理メモリ・アドレスが常にページ0から始まり、連続して増える場合、単一レベルの配列として実装されます(ハードウェアにこのような連続アドレス範囲が備わっていたため、古いHP-UXリリースでもこの方法で実装されていました)。ただし、最近のシステムの中には、物理アドレスに大きな隙間がある場合があります(たとえば、ページ0〜0x1000のメモリの次にページ0x20000〜0x21000のメモリがあるシステムがあります)。すべてのアドレスを表すテーブルは、実際に必要なテーブルよりもはるかに大きくなるからです。

したがって、最初の階層(pfdat_ptr)がサブテーブルへのポインタの配列になります。各ポインタは、ありうる物理アドレス空間のPFN_CONTIGUOUS_PAGES(0x1000)ページ分を表しますが、この範囲に実際の物理メモリがない場合、ポインタはヌルになります(メモリを最大限に節約するために、ブート時に恒久的に割り当てられるメモリは、このテーブルにとって存在しないものとみなされます)。

pfdat構造の用途は次のとおりです。

  • 物理メモリ・アロケータの空きリストをpfdatのリストにリンクする。
  • ページング可能な内容(ファイルからのページなど)を含む物理ページのページ・キャッシュを維持する。ページはハッシュ・チェーンでリンクされ、ページ・フォールトを解決する必要がある際に内容を素早く見つけられるようになっている(このようなページは「ハッシュ済み(hashed)」ページと呼ばれることがある)。
表16 struct pfdat内の主要エントリ(ページ・フレーム・データ)

要素 意味
pf_hchain ハッシュ・チェーンのリンク。
pf_devvp(1) デバイスのvnode。
pf_next、pf_prev 次回と前回の空きpfdatエントリ。
pf_vnext、 pf_vprev 同じvnodeに関連するページのリンク・リストのリンク。
pf_lock ロックpfdatエントリ(ベータ・セマフォ)。pde(物理から仮想への変換、アクセス権、または保護ID)の変更中にページをロックするために使用。
pf_pfn 物理ページ・フレーム番号。
pf_use ページを共有する領域の数。pf_useがゼロに下がると、空きリンク・リストにページを配置できる。
pf_cache_waiting 設定されている場合、ページ上でpf_lockを捕捉するためにスレッドが待機している。
pf_data pf_devvp内のこのページを一意に識別するためのディスク・ブロック番号またはその他のデータ。
pf_sizeidx 物理メモリ空きリストにあるラージ・ページの基本ページのサイズを識別。このサイズで、ページを配置する空きリストが決まる。
pf_size 使用中の可変サイズ・ページのサイズ。
pf_flags ページ・フレーム・データ・フラグ(図17を参照)。
pf_hdl ハードウェアに依存する階層要素(下記のhdlpfdatの説明を参照)

(1)集合(pf_devvp, pf_data)がハッシュされます。

ページの状態を示すフラグ


表17 主要なpf_flag値

フラグ 意味
P_FREE ページが未使用(割り当て可能)。
P_BAD メモリ再配置サブシステムにより、ページが不良だとマークされている。
P_HASH ページがハッシュ・キュー上にある。
P_SYS ページがユーザー・プロセスではなくカーネルによって使用されている。このフラグでマークされたページには、動的バッファ・キャッシュ・ページ、B-treeページ、および動的カーネル・メモリ割り当ての結果が含まれる。
P_DMEM メモリ診断サブシステムによってメモリがロックされている。dmemドライバへのioctl()呼び出しで設定と解除が行われる。
P_LCOW 「書き込み時コピー」によってページが再マッピングされている。
P_UAREA タイプがPT_UAREAのpregionによってページが使用されている。
P_KERN_ DYNAMIC ページがカーネル動的メモリで使用されている(P_SYSのサブセット)。カーネル動的メモリ空きリストにページが入れられる。
P_KERN_NO _LGPG ページの再マッピングを求めるユーザーによってページが(カーネル動的メモリとして)割り当てられている(これは、ラージ・ページの一部になることはできない)。P_KERN_DYNAMICのサブセット。
P_SP_POOL ページがカーネル動的メモリ・アロケータのスーパーページ・プール空きリストにある。P_KERN_DYNAMICのサブセット。

ハードウェアに依存する階層ページ・フレーム・データ・エントリ


struct pfdatのpf_hdlフィールドに、各ページに関するハードウェア依存情報が含まれます。これの型は、hdl_pfdat.hで定義されているstruct hdlpfdatです。

表18 struct hdlpfdat

要素 意味
hdlpf_flags ページのHDL状態を示すフラグ。フラグの値とその意味は次のとおり。

  • HDLPF_TRANS:このページについて、仮想アドレス変換が存在。
  • HDLPF_PROTECT:ページがユーザー・アクセスから保護される。このフラグが設定されており、HDLPF_STEALが設定されていない場合、保存された値(下記)が有効になる。
  • HDLPF_STEAL:保留中のI/Oが完了すると、仮想変換を削除する必要がある。
  • HDLPF_MOD:hpdeのpde_modifiedフラグの変更に類似。
  • HDLPF_REF:hpdeのpde_refフラグの変更に類似。
  • HDLPF_READA:移行における先読みページ。現在のI/O要求の完了を待機する前に次のI/O要求を開始する必要があるルーチンhdl_pfault()を示す。
hdlpf_savear 保存されたページ・アクセス権。
hdlpf_saveprot 保存されたページ保護ID。
最初のページへ 前のページへ 次のページへ

お問い合わせ

ご購入前のお問い合わせ


ご購入後のお問い合わせ

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

ショールーム

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