Skip to content

段描述符

img.png

段基址: 32位宽 在16-31(16) 32-29(8) 56-63(8位)

段界限:即能寻址的最大范围(20位)(单位量)(字节/4kb)

g: 0 1字节 1 4k (2的20次方=1m) (1m*4k=4g)

s: 0 系统段(不是硬件需要的都不是系统段) 1 数据段

type: 4位 x r c a x(执行) r(读) c(一致性) a(是否访问过) a是cpu设置的(设置为0由cpu改)

dpl: 描述符权限级 2位 越小权限越大

p:段是否存在 在内存中是1 不在是0 如果是0,cup会抛异常

avl: 可用位

l: 1 64位代码段 32是0

D/B: d=0 16位 1 32位

G: 指定段界限的单位大小

gdt 段描述符表 用于存储段描述符(数组)(通过下标查找各个gd)

gdtR 即存放gdt的寄存器,存放gdt的首地址

img_1.png gdtr寄存器 是全局描述符的指针 48位 32位gdt起始地址 16位gdt界限 只能使用lgdt指令操作

选择子

img_2.png 选择子是16位数, 存放在段寄存器里(cs,ds,ss) 实模式时是段基址地址,保护模式时是选择子 保护模式 段基址地址已经存在段描述符里了,所以选择子里存放的是指向gdt里的某个段描述符的索引

ti: 0 gdt(全局描述符) 1 ldt(局部描述符) rpl: 请求特权级 2位

段描述符缓冲寄存器

目的: 段描述符在内存中,频繁访问速度较慢,所以引入段描述符缓冲寄存器