首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xv6-rev7 (JOS) GDT

xv6-rev7 (JOS) GDT
EN

Stack Overflow用户
提问于 2013-04-01 15:11:10
回答 2查看 787关注 0票数 0

我很难理解JOS (xv6-rev7)中的GDT (全局描述符表)。

例如

代码语言:javascript
复制
.word (((lim) >> 12) & 0xffff), ((base) & 0xffff); 

为什么右移12?为什么呢?

这些数字是什么意思?

这个公式是什么意思?

有人能给我一些资源、教程或提示吗?

这里,对于我的问题,这是两部分代码片段,如下所示。

第一部分

代码语言:javascript
复制
0654 #define SEG_NULLASM \
0655 .word 0, 0; \
0656 .byte 0, 0, 0, 0
0657
0658 // The 0xC0 means the limit is in 4096−byte units
0659 // and (for executable segments) 32−bit mode.
0660 #define SEG_ASM(type,base,lim) \
0661 .word (((lim) >> 12) & 0xffff), ((base) & 0xffff); \
0662 .byte (((base) >> 16) & 0xff), (0x90 | (type)), \
0663 (0xC0 | (((lim) >> 28) & 0xf)), (((base) >> 24) & 0xff)
0664
0665 #define STA_X 0x8 // Executable segment
0666 #define STA_E 0x4 // Expand down (non−executable segments)
0667 #define STA_C 0x4 // Conforming code segment (executable only)
0668 #define STA_W 0x2 // Writeable (non−executable segments)
0669 #define STA_R 0x2 // Readable (executable segments)
0670 #define STA_A 0x1 // Accessed

第二部分

代码语言:javascript
复制
8480 # Bootstrap GDT
8481 .p2align 2 # force 4 byte alignment
8482 gdt:
8483 SEG_NULLASM # null seg
8484 SEG_ASM(STA_X|STA_R, 0x0, 0xffffffff) # code seg
8485 SEG_ASM(STA_W, 0x0, 0xffffffff) # data seg
8486
8487 gdtdesc:
8488 .word (gdtdesc − gdt − 1) # sizeof(gdt) − 1
8489 .long gdt # address gdt

完整部分:http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf

EN

回答 2

Stack Overflow用户

发布于 2013-08-14 15:50:35

这根本不是一个真正的公式。当设置G位(在代码G位中用宏中使用的常量编码)时,极限向右移动12位,等效于除法2^12,什么是4096,也就是GDT入口基的粒度。每当使用corren海绵体选择器访问地址时,只有更高的20位与限制相比较,如果它们更大,则抛出#GP。还请注意,标准页的大小为4KB,因此任何大于小于4KB的数字都由页面对应的选择器限制来处理。登陆部分是为了抑制编译器对数字溢出的警告,因为操作数0xFFFF是单个字(16位)的最大值。

同样也适用于其他移位,而且,在其他表达式中,数字可以移动更多以获得另一部分。

票数 2
EN

Stack Overflow用户

发布于 2018-03-21 13:45:23

GDT描述符的结构见上文。

((lim) >> 12) & 0xffff)对应于分段限制(位0-15)。右移意味着最小单位是2^12字节( GDT入口基的粒度);&& 0xffff意味着我们需要更低的16位lim) >> 12,它适合16位GDT描述符的最低部分。

其余的“公式”是相同的。

这里是学习GTD描述符的好材料。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15745996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档