物理ページ管理
Rev.19を表示中。最新版はこちら。
作成中vm_page_t
物理ページ管理用の構造体
表1 vm_page_tのフィールド(一部)
| 項目 | 内容 |
|---|---|
| inactive | Inactiveページである。 |
| active | Activeページである。 |
| pageout_queue | PageOutQueueにつながれている。 vm_pageout_queue_internal,externel |
| free | Freeページ。Freeキューにつながれている。 |
| reference | PageTableEntryのAccessed bit相当。 |
| pageout | Pageoutするためにwired,busy状態である。 |
| wanted | このページを待っているスレッドが存在する。 |
| tabled | vm_objectのmemqにつながれている時、TRUE |
| fictitious | 物理ページが存在しない |
| absent | データが要求されたがページが存在しない場合TRUE。 vm_object_upl_request()でPageinのUPLを作る際、VM Objectにページがなかった場合、セットされている。 |
| dirty | PageTableEntryのDirty bit相当。 |
物理ページはwired,active,inactive,freeに分類される
wired
Pageoutできないページ。
Wiredページはどのキューにも積まれていない。
activeWiredページはどのキューにも積まれていない。
inactive
free
未使用ページ
[ページ管理用キュー]
vm_page_queue_free
未使用のページがつながれる。
vm_page_queue_activeactiveページがつながれる。
activeページは mem->active == TRUE。
vm_page_queue_inactive
inactiveページがつながれる。
inactiveページは(mem->inactive == TRUE && mem->zero_fill == FALSE)
inactiveページは(mem->inactive == TRUE && mem->zero_fill == FALSE)
vm_page_queue_zf
inactiveページのうちZero Fillページをつなぐ。
Zero Fillページは(mem->inactive == TRUE && mem->zero_fill == TRUE)
Zero Fillページは(mem->inactive == TRUE && mem->zero_fill == TRUE)
[関連関数]
vm_page_grab()
空きページをFreeList(vm_page_queue_free)から取得する。
