@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/windows-memory-internals-page-fault/#article>
    schema:about <https://comcomponent.com/knowledge/page-fault/>, <https://comcomponent.com/knowledge/memory-commit/> ;
    schema:mentions <https://comcomponent.com/knowledge/memory-reserve/>, <https://comcomponent.com/knowledge/commit-limit/>, <https://comcomponent.com/knowledge/vad/>, <https://comcomponent.com/knowledge/page-table-entry/>, <https://comcomponent.com/knowledge/translation-lookaside-buffer/>, <https://comcomponent.com/knowledge/demand-zero-fault/>, <https://comcomponent.com/knowledge/soft-page-fault/>, <https://comcomponent.com/knowledge/hard-page-fault/>, <https://comcomponent.com/knowledge/working-set/>, <https://comcomponent.com/knowledge/guard-page/>, <https://comcomponent.com/knowledge/status-access-violation/>, <https://comcomponent.com/knowledge/vmmap/>, <https://comcomponent.com/knowledge/pages-input-per-sec/>, <https://comcomponent.com/knowledge/cache-manager/>, <https://comcomponent.com/knowledge/etw-hardfault-event/> .

<https://comcomponent.com/knowledge/page-fault/> a skos:Concept ;
    skos:prefLabel "ページフォールト"@ja ;
    skos:definition "必要なページがメモリになく取りに行くことになる現象。ホットパスで起きると遅延が一気に大きくなる。VirtualLockでロックした領域はページアウトされずページフォールトを避けられる。"@ja ;
    skos:altLabel "page fault" ;
    ks:requires <https://comcomponent.com/knowledge/vad/> ;
    ks:requires <https://comcomponent.com/knowledge/page-table-entry/> ;
    ks:mayCause <https://comcomponent.com/knowledge/status-access-violation/> .

<https://comcomponent.com/knowledge/memory-commit/> a skos:Concept ;
    skos:prefLabel "Commit(MEM_COMMIT)"@ja ;
    skos:definition "システム全体のメモリとページファイルに対するコミット料金を課し、将来その内容をRAMまたはバックストアで保持できると約束する操作。"@ja ;
    ks:requires <https://comcomponent.com/knowledge/commit-limit/> ;
    ks:mayCause <https://comcomponent.com/knowledge/page-fault/> .

<https://comcomponent.com/knowledge/memory-reserve/> a skos:Concept ;
    skos:prefLabel "Reserve(MEM_RESERVE)"@ja ;
    skos:definition "物理ストレージを割り当てずに仮想アドレス範囲だけを予約する操作。"@ja ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/memory-commit/> .

<https://comcomponent.com/knowledge/commit-limit/> a skos:Concept ;
    skos:prefLabel "Commit LimitとCommit Total"@ja ;
    skos:definition "CommitTotalが現在のシステムCommitページ数、CommitLimitがページファイルを拡張せずにCommitできる上限を表す。"@ja .

<https://comcomponent.com/knowledge/vad/> a skos:Concept ;
    skos:prefLabel "VAD(Virtual Address Descriptor)"@ja ;
    skos:definition "プロセスの利用中アドレス範囲を木として管理する台帳。開始・終了VPN、Commit、Private/Mapped、保護属性、Control Areaなどを持つ。"@ja ;
    skos:altLabel "VAD" ;
    ks:verifiedBy <https://comcomponent.com/knowledge/vmmap/> .

<https://comcomponent.com/knowledge/vmmap/> a skos:Concept ;
    skos:prefLabel "VMMap"@ja ;
    skos:definition "プロセスの仮想・物理メモリを、コミット済み仮想メモリの種類別内訳として分析できるSysinternalsのツールである。"@ja ;
    skos:altLabel "VMMap.exe" .

<https://comcomponent.com/knowledge/page-table-entry/> a skos:Concept ;
    skos:prefLabel "ページテーブルとPTE"@ja ;
    skos:definition "仮想ページ番号を物理ページ番号へ変換する階層表と、その末端エントリー。無効なPTEもソフトウェア状態として意味を持つ。"@ja ;
    skos:altLabel "PTE" .

<https://comcomponent.com/knowledge/translation-lookaside-buffer/> a skos:Concept ;
    skos:prefLabel "TLB(Translation Lookaside Buffer)"@ja ;
    skos:definition "CPUが最近のアドレス変換結果をキャッシュする機構。TLBミスとページフォルトは別物である。"@ja ;
    skos:altLabel "TLB" ;
    ks:uses <https://comcomponent.com/knowledge/page-table-entry/> .

<https://comcomponent.com/knowledge/demand-zero-fault/> a skos:Concept ;
    skos:prefLabel "デマンドゼロフォルト"@ja ;
    skos:definition "Commit済みプライベートページへ初めて触れたときに、ゼロ化済みの物理ページを結び付けて解決するソフトフォルト。"@ja ;
    ks:implements <https://comcomponent.com/knowledge/soft-page-fault/> ;
    ks:mayCause <https://comcomponent.com/knowledge/working-set/> .

<https://comcomponent.com/knowledge/soft-page-fault/> a skos:Concept ;
    skos:prefLabel "ソフトページフォールト"@ja ;
    skos:definition "裏付けストアからの読み込みを行わず、StandbyまたはTransition、別プロセスに常駐する共有ページ、demand-zeroなどで解決できるページフォールト。"@ja ;
    skos:altLabel "soft page fault" .

<https://comcomponent.com/knowledge/working-set/> a skos:Concept ;
    skos:prefLabel "Working Set"@ja ;
    skos:definition "プロセスが現在RAMに常駐させている仮想ページの集合。"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/memory-commit/> .

<https://comcomponent.com/knowledge/hard-page-fault/> a skos:Concept ;
    skos:prefLabel "ハードページフォールト"@ja ;
    skos:definition "必要なページをページファイル、実行ファイル、DLL、メモリマップトファイルなどの裏付けストアから読み込んで解決するページフォールト。"@ja ;
    skos:altLabel "hard page fault" ;
    ks:mayCause <https://comcomponent.com/knowledge/pages-input-per-sec/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/etw-hardfault-event/> .

<https://comcomponent.com/knowledge/pages-input-per-sec/> a skos:Concept ;
    skos:prefLabel "Memory\\Pages Input/sec"@ja ;
    skos:definition "ハードページフォルトを解決するためにディスクから読み込まれたページ数を表すパフォーマンスカウンター。"@ja .

<https://comcomponent.com/knowledge/etw-hardfault-event/> a skos:Concept ;
    skos:prefLabel "ETWのHardFaultイベント"@ja ;
    skos:definition "ハードページフォルトごとに記録されるETWイベント。FileObject・ReadOffset・ByteCount・仮想アドレス・スレッドIDを含み、実際の読み取り元を追跡できる。"@ja .

<https://comcomponent.com/knowledge/status-access-violation/> a skos:Concept ;
    skos:prefLabel "STATUS_ACCESS_VIOLATION(0xC0000005)"@ja ;
    skos:definition "不正なメモリアクセスを示すNTSTATUS。アプリケーションクラッシュ時の例外コードとして頻出する。"@ja .

<https://comcomponent.com/knowledge/guard-page/> a skos:Concept ;
    skos:prefLabel "ガードページ(PAGE_GUARD)"@ja ;
    skos:definition "ページへのアクセスをワンショットで通知する保護属性。触れるとSTATUS_GUARD_PAGE_VIOLATIONが発生する。"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/page-fault/> .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/memory-reserve/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/memory-commit/> ;
    schema:description "MEM_RESERVEは物理ストレージを割り当てずに仮想アドレス範囲を予約するだけで、64bitプロセスでは大きな範囲を先に予約し、必要な部分だけ後からCommitする設計が現実的になる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/memory-commit/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/commit-limit/> ;
    schema:description "Commitはシステム全体のメモリとページファイルに対するコミット料金を課す。CommitTotalが現在のCommitページ数、CommitLimitがページファイルを拡張せずにCommitできる上限で、約束を引き受けられない場合はCommitの時点で失敗を返せる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc>, <https://learn.microsoft.com/windows/win32/api/psapi/ns-psapi-performance_information> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/memory-commit/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/page-fault/> ;
    schema:description "Commit済みページの初期内容はゼロであることが保証される一方、実際の物理ページは仮想アドレスへアクセスされるまで割り当てられない。初回アクセスがページフォルトの入口になる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/vad/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/vmmap/> ;
    schema:description "VMMapはCommit済み仮想メモリを種類別に分解し、予約済み仮想メモリ・Commit・Working Set・Private・Shareableと詳細なアドレスマップを表示する。"@ja ;
    ks:evidence <https://learn.microsoft.com/sysinternals/downloads/vmmap> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/page-fault/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/vad/> ;
    schema:description "メモリマネージャーは、開始・終了VPN、Commit、Private/Mapped、保護属性、Control Areaを持つVADを調べて、そのアクセスを続行できるかを判断する。WinDbgの!vadでこの内容を確認できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/debuggercmds/-vad> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/page-fault/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/page-table-entry/> ;
    schema:description "VADが見つかってもCommitされていない・PAGE_NOACCESSである・読み取り専用ページへ書き込んだといった場合は解決できず、逆にPTEが無効でもソフトウェア状態から正当なアクセスと分かればデマンドゼロやページインとして解決できる。VAD・PTE・保護属性・アクセス種別を合わせて判定する。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/debuggercmds/-vad>, <https://learn.microsoft.com/windows/win32/etw/pagefault-typegroup1> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/translation-lookaside-buffer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/page-table-entry/> ;
    schema:description "TLBは有効なPTEの変換結果をキャッシュし、ヒットしてアクセスがその保護に適合すればページテーブルをたどらずに続行できる。TLBに変換がないだけでPTEが有効ならページテーブルウォークだけで処理は終わるのでTLBミスとページフォルトは別物であり、逆に保護のチェックは変換がTLBから来た場合にも行われるため、キャッシュ済みでも読み取り専用ページへの書き込みなどの保護違反はフォルトの入口へ進む。Copy-on-Writeページへの書き込みが変換キャッシュ済みでもフォルトできるのはこのためである。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/etw/pagefault-typegroup1> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/demand-zero-fault/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/soft-page-fault/> ;
    schema:description "割り当て済み仮想ページをプロセスが初めて参照する場合が、ソフトフォルトの代表例として挙げられている。元データをディスクから読む必要がなく、初期内容はゼロで、他プロセスのデータを漏らさないために新規に渡すページはゼロでなければならない。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/memory/working-set> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/demand-zero-fault/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/working-set/> ;
    schema:description "解決したページはPTEへ結ばれ、物理ページがActiveになってプロセスのWorking Setへ加えられる。累積のPage Fault Countも増える。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/memory/working-set> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/hard-page-fault/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/pages-input-per-sec/> ;
    schema:description "Memory\\Pages Input/secは、ハードページフォルトを解決するためにディスクから読み込まれたページ数である。"@ja ;
    ks:evidence <https://learn.microsoft.com/biztalk/technical-guides/using-the-performance-analysis-of-logs-pal-tool> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/hard-page-fault/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/etw-hardfault-event/> ;
    schema:description "ETWのHardFaultイベントはFileObject・ReadOffset・ByteCount・VirtualAddress・スレッドIDを含み、実際の読み取り元を追跡できる。読み取り元はページファイルだけでなく、メモリマップトファイル、EXEやDLLのイメージ、ファイルキャッシュが参照するデータファイルにもなる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/etw/pagefault-hardfault> ;
    ks:verifiedAt "2026-08-22" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/page-fault/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/status-access-violation/> ;
    schema:description "VADとPTEを調べても正当な割り当て・ページイン・Copy-on-Writeとして解決できないフォルトは、ユーザーモードへ例外として届く。0xC0000005は無効なメモリアドレスの読み取り・書き込み・実行で発生し、例外パラメーターがアクセス種別と違反アドレスを示す。"@ja ;
    ks:evidence <https://learn.microsoft.com/shows/inside/c0000005> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/guard-page/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/page-fault/> ;
    schema:description "PAGE_GUARDはページアクセスのワンショット通知を提供し、触れるとSTATUS_GUARD_PAGE_VIOLATIONが発生する。ETWのページフォルトイベントもGuard Page Faultを別種として記録する。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/memory/creating-guard-pages>, <https://learn.microsoft.com/windows/win32/etw/pagefault-typegroup1> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/working-set/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/memory-commit/> ;
    schema:description "Working Setから外してもCommitや所有権は解放されず、ページはStandbyやModifiedへ移って後でフォルトして戻ってくるだけである。リークを直すには割り当て元がVirtualFreeやヒープ解放を行う必要がある。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/memory/working-set>, <https://learn.microsoft.com/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc> ;
    ks:verifiedAt "2026-08-20" ;
    ks:certainty "established" .
