知識マップ: Windowsメモリの深層(第1回) ── 仮想アドレスが物理RAMに変わる瞬間:ページフォルトの一部始終
記事「Windowsメモリの深層(第1回) ── 仮想アドレスが物理RAMに変わる瞬間:ページフォルトの一部始終」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Reserveは仮想アドレス範囲を確保するだけ、Commitは将来その内容を保持できるという約束としてコミット料金を課すだけで、物理ページが結び付くのは最初のアクセスで起きるページフォルトの時点です。この判断にはVADという範囲の台帳、仮想ページごとのPTE、物理ページを追うPFNデータベースが使われ、VADが見つかっただけでは解決できるとは限りません。TLBミスとページフォルトは別物で、変換がキャッシュ済みでも読み取り専用ページへの書き込みのような保護違反はフォルトの入口へ進みます。バックストアを読まずに解決できるのがソフトフォルト、読む必要があるのがハードフォルトで、読み取り元はページファイルに限らずメモリマップトファイルやイメージも含みます。Page Faults/secが跳ねてもPages Input/secが増えていなければ、ディスクは詰まっていません。
flowchart LR
accTitle: Windowsのページフォルトと仮想メモリ実体化の知識マップ
accDescr: Reserve・Commit・Touchが別の出来事であること、VADとPTEとTLBという3つの台帳の役割分担、デマンドゼロによるソフトフォルトとバックストアを読むハードフォルトの違い、解決できないフォルトがアクセス違反になる流れ、VMMapとカウンターによる観測を示す図
page_fault["ページフォールト"]
memory_commit["Commit(MEM_COMMIT)"]
memory_reserve["Reserve(MEM_RESERVE)"]
commit_limit["Commit LimitとCommit Total"]
vad["VAD(Virtual Address Descriptor)"]
vmmap["VMMap"]
page_table_entry["ページテーブルとPTE"]
translation_lookaside_buffer["TLB(Translation Lookaside Buffer)"]
demand_zero_fault["デマンドゼロフォルト"]
soft_page_fault["ソフトページフォールト"]
working_set["Working Set"]
hard_page_fault["ハードページフォールト"]
pages_input_per_sec["Memory\Pages Input/sec"]
etw_hardfault_event["ETWのHardFaultイベント"]
status_access_violation["STATUS_ACCESS_VIOLATION(0xC0000005)"]
guard_page["ガードページ(PAGE_GUARD)"]
memory_reserve -->|"より先に行うべき"| memory_commit
memory_commit -->|"前提とする"| commit_limit
memory_commit -->|"原因になり得る"| page_fault
vad -->|"で確認できる"| vmmap
page_fault -->|"前提とする"| vad
page_fault -->|"前提とする"| page_table_entry
translation_lookaside_buffer -->|"利用する"| page_table_entry
demand_zero_fault -->|"実装を担う"| soft_page_fault
demand_zero_fault -->|"原因になり得る"| working_set
hard_page_fault -->|"原因になり得る"| pages_input_per_sec
hard_page_fault -->|"で確認できる"| etw_hardfault_event
page_fault -->|"原因になり得る"| status_access_violation
guard_page -->|"原因になり得る"| page_fault
working_set -->|"用いるのは非推奨"| memory_commit
概念間の関係(全14件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Reserve(MEM_RESERVE)はCommit(MEM_COMMIT)より先に行うべきです。
- Commit(MEM_COMMIT)はCommit LimitとCommit Totalを前提とします。
- Commit(MEM_COMMIT)はページフォールトの原因になることがあります。
- VAD(Virtual Address Descriptor)はVMMapで確認できます。
- ページフォールトはVAD(Virtual Address Descriptor)を前提とします。
- ページフォールトはページテーブルとPTEを前提とします。
- TLB(Translation Lookaside Buffer)はページテーブルとPTEを利用します。
- デマンドゼロフォルトはソフトページフォールトの実装を担います。
- デマンドゼロフォルトはWorking Setの原因になることがあります。
- ハードページフォールトはMemory\Pages Input/secの原因になることがあります。
- ハードページフォールトはETWのHardFaultイベントで確認できます。
- ページフォールトはSTATUS_ACCESS_VIOLATION(0xC0000005)の原因になることがあります。
- ガードページ(PAGE_GUARD)はページフォールトの原因になることがあります。
- Working SetをCommit(MEM_COMMIT)に用いることは推奨されません。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。