XEN: init_frametable
上一篇 /
下一篇 2007-12-12 00:34:32
/ 个人分类:Virtualization
[http://hi.baidu.com/realvm]
XEN 的代码比较难读,公开的文档又少,下面的理解可能不全或有误: 6la3nk4t9O{}E[051Testing软件测试网*fF*X$z5N
? 51Testing软件测试网W%YdU4Z5u@ 161 void __init init_frametable(void)51Testing软件测试网1Mw-IH,N 162 {51Testing软件测试网ht*\L}_V 163 unsigned long nr_pages, page_step, i, mfn;51Testing软件测试网/D e5q.O[1]\yw 16451Testing软件测试网Qo$c3fV 165 frame_table = (struct page_info *)FRAMETABLE_VIRT_START;51Testing软件测试网.C2M Z{b!A 51Testing软件测试网.{aX3Ny
o o frame_table = 0xFC400000, 此时,高于0xFC000000的地址空间是不能存取的 8A\#w;Z#d]0 2FY1A\9h"aO-]k0 166 )uy^5}A+rq:n0 167 nr_pages = PFN_UP(max_page * sizeof(*frame_table));51Testing软件测试网|$~O n1Y'S-|y 总共需要多少页51Testing软件测试网/i3tI8yp ] 51Testing软件测试网]1QVLe)zm$R 168 page_step = (1 << L2_PAGETABLE_SHIFT) >> PAGE_SHIFT;51Testing软件测试网C}E c4UNj8_] 只有些模糊的概念,不太清晰,就不误导人了51Testing软件测试网]9P"F1|-@qW?2r 16951Testing软件测试网urM/i:f`P 170 for ( i = 0; i < nr_pages; i += page_step ) %V9p}Yz'}5|0 171 { dxqlhz&Dc6p0 172 mfn = alloc_boot_pages(min(nr_pages - i, page_step), page_step); 0mQ H3tg0 从物理内存中分配min(nr_pages - i, page_step)个页,init_boot_pages 已经初始化了相关的map51Testing软件测试网2h)X/WT9B2N
Rc bo+TjX};M0 173 if ( mfn == 0 )51Testing软件测试网R#I6N0[!r5z2{ 174 panic("Not enough memory for frame table\n"); 7p? _(wN$?c'^\0 175 map_pages_to_xen(51Testing软件测试网eWjx} r 176 FRAMETABLE_VIRT_START + (i << PAGE_SHIFT),51Testing软件测试网4ie9bu ]8R7sHi a 177 mfn, page_step, PAGE_HYPERVISOR); (]*fn.Zf0^0 填写页表信息,此后,FRAMETABLE_VIRT_START + (i << PAGE_SHIFT) 地址可访问 Vq5sf f*T"voc0 1SAU|%d%E v$d0 178 }51Testing软件测试网Qvv1w,o G 179 { Ek.yiHD_E;q0 180 memset(frame_table, 0, nr_pages << PAGE_SHIFT); |.w ](@5p:~G I0 181 } |
收藏
举报
TAG:
virtualization
Xen
Virtualization