段选择符
| 13位索引 | TI | RPL |
|---|
13位索引:去描述符表(GDT或LDT)里查第几项,共可索引8192个描述符
TI位:0→查GDT(全局描述符表);1→查LDT(局部描述符表)
RPL(请求特权级):你请求这次访问时“声称”的权限等级(0~3),用来做特权级检查
段描述符表GDT/LDT
非系统段
| 32位 | 20位 | 12位 |
|---|---|---|
| 段基址 | 段界限 | 属性 |
寻址范围 2^32=4GB
存储段范围
颗粒度G=0 以1字节为单位 0~2^20=1MB
颗粒度G=1 以4KB为单位 0~2^20*4KB=4GB
属性段
P(存在位)
DPL(描述段特权级)
S(分类位)
TYPE字段
系统段
| 32位 | 16位 | 16位 |
|---|---|---|
| 偏移地址 | 段选择符 | 属性 |
门描述符
特殊的系统段描述符,它不描述一块内存区域,而是描述一个程序入口点。它是跨越特权级的唯一合法通道。
属性
核心机制:通过段选择符->门描述符->权限检测->目标段检测符->权限检查->栈切换(特权级提升时)->执行目标代码
全局描述符表
GDTR全局描述符表寄存器
| 32位 | 16位 |
|---|---|
| 基地址 | 界限 |
GDT寻址: 段选择符*8+GDTR基址 -> 段描述符地址
段描述符内容(包括基址)-> 相应段cache
cache中段基址 + 虚地址偏移量 -> 物理地址
局部描述符表
性质:保存某任务使用的段描述符,每个任务一个
LDTR
|16位|32位|20位|12位|
| ---- | ---- | ---- |
|段选择符|基址|界限|属性|
LDTR 可见部分(16 位选择符)─指向→ GDT
│
┌──────────────────────────┘
▼
GDT 中的 LDT 描述符
( S=0, TYPE=0010 )
│
├── 32 位基址 ──→ ┌────────────────┐
├── 20 位界限 │ LDT 表本身 │
└── 属性 │ (每项 8 字节) │
└──┬─────────────┘
│
任务私有段选择符 ──索引×8──→ LDT 中的段描述符
(TI=1) │
├── 32 位基址
├── 界限、DPL...
└──→ 最终形成目标段的基址 + 偏移量
浙公网安备 33010602011771号