
【计】 segment descriptor word
part; passage; sect; section; segment
【计】 segment
【医】 piece; sectile; segment; segmentum
【计】 descriptor
letter; printing type; pronunciation; word; writings
【计】 graphtyper; W; WD; word
在计算机体系结构(特别是x86架构)中,段描述符字(Segment Descriptor) 是保护模式下用于定义内存段属性的关键数据结构。它存储在全局描述符表(GDT)或局部描述符表(LDT)中,由CPU通过段选择子索引访问。以下是其核心含义与技术细节:
段描述符是一个8字节(64位) 的数据结构,包含以下核心信息:
32位字段,定义内存段的起始物理地址。
20位字段,指定段的长度(单位由粒度标志决定)。
控制段的读写权限、特权级(DPL)和类型(代码/数据/系统段)。
包括粒度(Granularity,0=字节/1=4KB页)和默认操作大小(16/32位模式)。
下表展示段描述符的位级布局:
字节偏移 | 字段名称 | 作用说明 |
---|---|---|
0-1 | Limit (Low) | 段界限的低16位 |
2-4 | Base (Low) | 段基址的低24位 |
5 | Type + DPL | 段类型与描述符特权级 |
6 | Limit (High) + Flags | 段界限高4位 + 粒度/操作大小 |
7 | Base (High) | 段基址的高8位 |
通过界限检查防止越界访问,例如:
if (offset > descriptor.limit) trigger #GP(0); // 触发一般保护异常
DPL(Descriptor Privilege Level)字段限制当前特权级(CPL)对段的访问权限。
逻辑地址通过 段基址 + 偏移量
转换为线性地址。
在Linux内核初始化时,需构建GDT并加载到GDTR寄存器:
lgdt [gdt_ptr]; 加载GDTR
mov ax, 0x10; 加载数据段选择子
mov ds, ax
其中GDT包含:
中文术语 | 英文术语 |
---|---|
段描述符字 | Segment Descriptor |
段基址 | Segment Base Address |
段界限 | Segment Limit |
描述符特权级 | Descriptor Privilege Level (DPL) |
全局描述符表 | Global Descriptor Table (GDT) |
权威参考来源:
- Intel® 64 and IA-32 Architectures Software Developer Manuals, Volume 3A, Chapter 3.4.5 "Segment Descriptors"
- AMD64 Architecture Programmer’s Manual, Volume 2, Section 4.8 "Descriptor Tables"
- 《x86汇编语言:从实模式到保护模式》(李忠著)第11章
- OSDev Wiki: "Global Descriptor Table" (https://wiki.osdev.org/GDT)
段描述符是x86架构保护模式下用于内存管理的核心数据结构,属于全局描述符表(GDT)或局部描述符表(LDT)中的条目,用于定义内存段的属性、位置和访问权限。以下是其关键解析:
段基址(Base)
共32位,分散在描述符的第16-31位、32-39位和56-63位。表示段在内存中的起始地址,16字节对齐以优化性能。
段限长(Limit)
共20位(第0-15位和48-51位),通过G标志位确定单位:
访问控制字段
其他关键标志
段选择符(16位)通过高13位索引GDT/LDT中的描述符,低3位包含请求特权级(RPL)。处理器根据选择符定位描述符,提取基址与逻辑地址偏移量组合为线性地址。
段描述符是保护模式下实现内存分段机制的核心,通过基址、限长和属性字段控制段的访问与操作模式。实际使用中需结合GDT/LDT及段选择符完成地址转换与权限校验。
爆裂应力编线不当损失侧向馈送出汗冷却电冶学定方位遁道公干公司策略环后锥虫挤加拿大医学会卡特林氏试验连接命令硫酸锰铵耐火石纳税清册偶发性颊杆菌脯氨酰牵涉观念散乱出入处理石墨压垫盖时兴损伤部太根糖原贮积障碍体液排出过多退化伪模糊逻辑