XEN: init_frametable
上一篇 /
下一篇 2007-12-12 00:34:32
/ 个人分类:Virtualization
[http://hi.baidu.com/realvm]
XEN 的代码比较难读,公开的文档又少,下面的理解可能不全或有误:51Testing软件测试网K!D%P{/PFCWA 51Testing软件测试网'KQ!@FS!V;C-ta
i6qc`
y|/sy0 161 void __init init_frametable(void)51Testing软件测试网 G^zdp"yK,^^ 162 { r.Z9^5J'o2_-p@0 163 unsigned long nr_pages, page_step, i, mfn; Ss N4e,F[-Tt&Ca'x]0 16451Testing软件测试网X"x|ms!M4OM 165 frame_table = (struct page_info *)FRAMETABLE_VIRT_START; .G.wpU+A9N2K0 51Testing软件测试网^N2u:r6i frame_table = 0xFC400000, 此时,高于0xFC000000的地址空间是不能存取的 NaA@v$M*E2e051Testing软件测试网L)e)|2z
@d 166 :F4p?*m(Ysa1h.X0 167 nr_pages = PFN_UP(max_page * sizeof(*frame_table));51Testing软件测试网(s&[ b8dnsb7]9Q 总共需要多少页51Testing软件测试网{1LQ(Or8t)A 51Testing软件测试网C?9S4b+YP2t/g 168 page_step = (1 << L2_PAGETABLE_SHIFT) >> PAGE_SHIFT;51Testing软件测试网3G{UUKE0W 只有些模糊的概念,不太清晰,就不误导人了51Testing软件测试网M@?,o[D"B A5? 16951Testing软件测试网ETcp:al_ K}fu 170 for ( i = 0; i < nr_pages; i += page_step ) :Yt,m)Z~0 171 { Xv5Z2?"QI/G0 172 mfn = alloc_boot_pages(min(nr_pages - i, page_step), page_step);51Testing软件测试网bo[H.`j5x 从物理内存中分配min(nr_pages - i, page_step)个页,init_boot_pages 已经初始化了相关的map 2P#b7ePIq9|+p0 P5y9W)Jta$KL$ZC*r0 173 if ( mfn == 0 )51Testing软件测试网0SevWbx1x\ 174 panic("Not enough memory for frame table\n"); g&V?C?(lj~[0 175 map_pages_to_xen( {SfBp.s@(Z0 176 FRAMETABLE_VIRT_START + (i << PAGE_SHIFT),51Testing软件测试网9HS8TL3m 177 mfn, page_step, PAGE_HYPERVISOR);51Testing软件测试网 W
Q1Ip
[/udlA 填写页表信息,此后,FRAMETABLE_VIRT_START + (i << PAGE_SHIFT) 地址可访问 Op'B#h6Ovg-c051Testing软件测试网{ K,z*W S
h 178 }51Testing软件测试网$NB)xBb;f9d
JK\ 17951Testing软件测试网^EG~;Ev 180 memset(frame_table, 0, nr_pages << PAGE_SHIFT); $j~dp[l0 181 } |
收藏
举报
TAG:
virtualization
Xen
Virtualization