物理ページ管理
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)から取得する。