XEN: init_frametable

上一篇 / 下一篇  2007-12-12 00:34:32 / 个人分类:Virtualization

 
[http://hi.baidu.com/realvm]
XEN 的代码比较难读,公开的文档又少,下面的理解可能不全或有误:51Testing软件测试网 K!D%P{/PF CWA
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;
SsN4e,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 )
:Y t,m)Z~0    171     {
Xv5Z2?"Q I/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#b7ePI q9|+p0
P5y9W)Jta$KL$ZC*r0    173         if ( mfn == 0 )51Testing软件测试网0Sev Wbx1x\
    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 Q1I p [/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

 

评分:0

我来说两句

Open Toolbar