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                   只有些模糊的概念,不太清晰,就不误导人了
eB6T f6j+OY0    169
ue [BN1?-j5|8p/M0    170     for ( i = 0; i < nr_pages; i += page_step )
IM4y\$H7]:lR0    171     {
VCLm hF0    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(AZ bAb
    176             FRAMETABLE_VIRT_START + (i << PAGE_SHIFT),
}f @Cuy0    177             mfn, page_step, PAGE_HYPERVISOR);
4J!Wd k(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

 

评分:0

我来说两句

Open Toolbar