XEN: init_frametable
上一篇 /
下一篇 2007-12-12 00:34:32
/ 个人分类:Virtualization
[http://hi.baidu.com/realvm]
XEN 的代码比较难读,公开的文档又少,下面的理解可能不全或有误: s_F+c"n051Testing软件测试网fM] zgh%l;Ol
X+p ~o&Jv$G*\0 161 void __init init_frametable(void) Fa%_+p/q)|!K"E0 162 {51Testing软件测试网6?m6J2rG8s 163 unsigned long nr_pages, page_step, i, mfn;51Testing软件测试网(M'S
Z(w'n%a4Ou 16451Testing软件测试网g,?'a5\&Y_s0@ 165 frame_table = (struct page_info *)FRAMETABLE_VIRT_START; "v1A:`
A2z:O0 51Testing软件测试网#X$~2Nc0P.j%D;A frame_table = 0xFC400000, 此时,高于0xFC000000的地址空间是不能存取的51Testing软件测试网N9C%H.S:~
b 51Testing软件测试网f+iw)i ~ H 166 q-A'd
F9YQ,`0 167 nr_pages = PFN_UP(max_page * sizeof(*frame_table)); *G)|!?b(J;{sQ0 总共需要多少页51Testing软件测试网*V-gN(Zq?^
NBV$W:w A.Ru0 168 page_step = (1 << L2_PAGETABLE_SHIFT) >> PAGE_SHIFT; drNs8FU$pqd0 只有些模糊的概念,不太清晰,就不误导人了 eB6Tf6j+O Y0 169 ue [BN1?-j5|8p/M0 170 for ( i = 0; i < nr_pages; i += page_step ) IM4y\$H7]:lR0 171 { VCLmh F0 172 mfn = alloc_boot_pages(min(nr_pages - i, page_step), page_step);51Testing软件测试网LEt@&Z6V)wN 从物理内存中分配min(nr_pages - i, page_step)个页,init_boot_pages 已经初始化了相关的map d]m] LX['u051Testing软件测试网 u_7U,K
Z!\8\ j 173 if ( mfn == 0 ) 1B;E ~[R7V#s s.V SQ0 174 panic("Not enough memory for frame table\n"); {`yQ f5q/t3@0 175 map_pages_to_xen(51Testing软件测试网)W9y,Pj(A Z bAb 176 FRAMETABLE_VIRT_START + (i << PAGE_SHIFT), }f @Cuy0 177 mfn, page_step, PAGE_HYPERVISOR); 4J!Wdk(O0 填写页表信息,此后,FRAMETABLE_VIRT_START + (i << PAGE_SHIFT) 地址可访问51Testing软件测试网%AGHg{u"^ 51Testing软件测试网1H1|e)NL5Qm 178 } KZ-x7K#|*n,M$H0 17951Testing软件测试网2b]8r/U5v Xww-a 180 memset(frame_table, 0, nr_pages << PAGE_SHIFT); %L;c
Hj1VeC_$e!Wb0 181 } |
收藏
举报
TAG:
virtualization
Xen
Virtualization