| FreeBSD4.0KernelHackingGuide--vm/vm_page. | | 发布日期:2005-3-28 浏览:295次 | | 关键字: | vm_page_startup(),156行.vm_pagemodule初始化. 183-197行,计算所有的可用记忆空间,并挑出最大的block.phys_avail在 一开始locore.c的初始阶段就设定.phys_avail为可用之physical memoryblocklist,由getmemsize(),i386/i386/machdep.c,1419行 ,计算所得.
206行,vm_page_queue_init(),104行,初始vm_page_queues.
222-248行,初始hashtablebuckets(vm_page_buckets),用以快速 从object/offsetpair对应成vm_page. vm_page_buckets vm_page_bucket_count
256-283行,allocatevm_page_array,为每一个可用的page设置一 个vm_page.phys_avail为所有可用memblocklist, vm_page_array大小则由phys_avail决定.所有block的 (最大的记忆体位址-最小位址)/PAGE_SIZE即为vm_page的数目. vm_page_array所有vm_page组成的array. vm_page_array_sizevm_page_array的长度. first_page第一个vm_page对应page的physical pageaddress(address/PAGE_SIZE)
291-310行,把所有的vm_page加入freequeue(invm_page_queues). 关於vm_page_queues请见专文或者红皮书.
| | 关键字: |
|