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软件测试网/De5q.O [1]\ yw
    16451Testing软件测试网Qo$c3fV
    165     frame_table = (struct page_info *)FRAMETABLE_VIRT_START;51Testing软件测试网.C2M Z{b!A
                   51Testing软件测试网.{aX3Ny oo
                    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     {
dxqlh z&Dc6p0    172         mfn = alloc_boot_pages(min(nr_pages - i, page_step), page_step);
0mQH3tg0                      从物理内存中分配min(nr_pages - i, page_step)个页,init_boot_pages 已经初始化了相关的map51Testing软件测试网2h)X/WT9B2N

Rcbo+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]8R7sHia
    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

 

评分:0

我来说两句

Open Toolbar