XEN: nopaging_gdt_descr

上一篇 / 下一篇  2007-12-12 00:37:24 / 个人分类:Virtualization

[http://hi.baidu.com/realvm]51Testing软件测试网R\B5iL

51Testing软件测试网c;QF)O{s%a

在 ./arch/x86/boot/x86_32.S 中, nopaging_gdt_descr 的内容是这样的:51Testing软件测试网(Vyh-RK)l4GB

5j N6e#S;U3i+d0d+U;h J0     50 __start:51Testing软件测试网bq^1A;[t(z
     51         /* Set up a few descrīptors: on entry only CS is guaranteed good. */51Testing软件测试网%l%b7F` d{^LU
     52         lgdt    %cs:nopaging_gdt_descr-__PAGE_OFFSET
E)t+c{?k0
ZC,D](pfox0    215 nopaging_gdt_descr:51Testing软件测试网!v |/Y^ o
    216         .word   LAST_RESERVED_GDT_BYTE51Testing软件测试网*^)O$r+e5v{:May
    217         .long   gdt_table - FIRST_RESERVED_GDT_BYTE - __PAGE_OFFSET
(M+uP-n mvW*A0    21851Testing软件测试网0`4gV(Os6V1b|j6^
    219         .align PAGE_SIZE, 0
@wZ;A UV }["|5~/?0    220 /* NB. Rings != 0 get access up to MACH2PHYS_VIRT_END. This allows access to */
hN XCY'k"U;T:{E0    221 /*     the machine->physical mapping table. Ring 0 can access all memory.    */
^t{/eScnd+N0    222 #define GUEST_DESC(d)                                                   \
:_8fy8QJ1tjV0z0    223         .long ((MACH2PHYS_VIRT_END - 1) >> 12) & 0xffff,                \51Testing软件测试网 ]i3S!Q#b0e'l3t3M
    224               ((MACH2PHYS_VIRT_END - 1) >> 12) & (0xf << 16) | (d)
1JA ft ^X?W0pw0    225 ENTRY(gdt_table)51Testing软件测试网$txc1WL0p1`+K
    226         .quad 0x0000000000000000     /* unused */51Testing软件测试网(kh]"?!FJ-b%_s
    227         .quad 0x00cf9a000000ffff     /* 0xe008 ring 0 4.00GB code at 0x0 */
6a$ZW7T,LJ K4L j0    228         .quad 0x00cf92000000ffff     /* 0xe010 ring 0 4.00GB data at 0x0 */
LsbU1z.E"c4OA0
_k7y_ i/E/@0
dV)J*e({-M+x0lgdt    %cs:nopaging_gdt_descr-__PAGE_OFFSET51Testing软件测试网3r8NtllM*j:Z|&@
没有什么,-__PAGE_OFFSET 也解释过了,关键是nopaging_gdt_descr的内容:
&j2U9r.o*t3Rd0    216         .word   LAST_RESERVED_GDT_BYTE51Testing软件测试网tCt.T5bG(x
    217         .long   gdt_table - FIRST_RESERVED_GDT_BYTE - __PAGE_OFFSET51Testing软件测试网&A J+d2u&OC-x#@
limit 的值是 LAST_RESERVED_GDT_BYTE
R?AJk uM"I(jO0base 的值是 gdt_table - FIRST_RESERVED_GDT_BYTE51Testing软件测试网,m1fAvup$b%C
51Testing软件测试网'K8Oo#~1|"sCQ
#define FIRST_RESERVED_GDT_PAGE 1451Testing软件测试网}@&L9M}x y#M
#define FIRST_RESERVED_GDT_BYTE (FIRST_RESERVED_GDT_PAGE * 4096)51Testing软件测试网wJdlnEN/p
#define LAST_RESERVED_GDT_BYTE \
\C,b4xf c'dc nRmn(S+A:a0    (FIRST_RESERVED_GDT_BYTE + NR_RESERVED_GDT_BYTES - 1)
#yc%r}c3TM0
{i9^5j!D0从上面的定义可以看出,gdt 的基地址位于gdt_table前,空出了 14 * 4096 /8 = 7168 项
7L$s*J7S JS\D0limit 值包含了gdt_table后4096/8=512 项51Testing软件测试网T5o CC2\.PT8F}hM
51Testing软件测试网9}u)a,_/Pma9|RL6H
接下来,51Testing软件测试网E5w"Hv\G*A
     53         mov     $(__HYPERVISOR_DS),%ecx51Testing软件测试网zHgS@ q"\ [ig
     54         mov     %ecx,%ds
A5B|p$y0     55         mov     %ecx,%es51Testing软件测试网y[6`9t:J-vY:X/A
     56         mov     %ecx,%fs51Testing软件测试网so6F s2V+h"J#W7J
     57         mov     %ecx,%gs51Testing软件测试网pRNkA
     58         ljmp    $(__HYPERVISOR_CS),$(1f)-__PAGE_OFFSET
:e*[Rd7_b0__HYPERVISOR_DS, __HYPERVISOR_CS 的值分别是0xe010, 0xe008换成容易看样子:51Testing软件测试网vCP&@:u'o m |
$(__HYPERVISOR_DS) = 0x0000e010 = 57360 = 7170 * 851Testing软件测试网2u] I0t-S
$(__HYPERVISOR_CS) = 0x0000e008 = 57352 = 7169 * 8
iB"oJ.?0
5gA|H"m^0所以,CS,DS选择子的内容就是gdt_table的第一,二项的内容51Testing软件测试网o![+vH bL4iML

Ck? e6LF*@I0
相关阅读:

TAG: virtualization Xen Virtualization

 

评分:0

我来说两句

Open Toolbar