2013年8月26日 星期一

Kernel Space Memory

Reference : http://www.chudov.com/tmp/LinuxVM/html/understand/node28.html

Kernel的virtual memory適用linear mapping,physical address 0對應到kernel virtual memory的PAGE_OFFSET(通常是0xC000_0000)
也就是說kernel virtual address - PAGE_OFFSET就是physical address
virt_to_phy() and __pa()還有phy_to_virt and __va() 就是用這個原理


而kernel virtual address如何translate到physical page frame呢:
利用mem_map加上page frame number後就可以得到page frame
而mem_map是在Linux系統初始時就建好了,是用來存page frame的array
#define virt_to_page(kaddr) (mem_map + (__pa(kaddr) >> PAGE_SHIFT))
// kernel virtual address translate to page pointer


0 意見:

張貼留言