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;hJ0 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 U V}["|5~/?0 220 /* NB. Rings != 0 get access up to MACH2PHYS_VIRT_END. This allows access to */
hNXCY'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,LJK4Lj0 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软件测试网,m1f Avup$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}h M
51Testing软件测试网9}u)a,_/Pma9|RL6H
接下来,51Testing软件测试网E5w"Hv\G*A
53 mov $(__HYPERVISOR_DS),%ecx51Testing软件测试网zHgS@ q"\[i g
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?e6L F*@I0
收藏
举报
TAG:
virtualization
Xen
Virtualization