x86/x86_64 CPU内存管理寄存器
2012-12-02 14:20
453 查看
x86/x86_64处理器提供了4个内存管理寄存器(Memory ManagementRegisters):GDTR、LDTR、IDTR和TR。如下图所示。
Global Descriptor Table Register(GDTR)
GDTR寄存器保存GDT的基址和表限(table limit)。基址是GDT的第一个字节的地址,表限(table limit)给出表的大小。
指令LGDT和SGDT是分别用来设置和保存GDTR寄存器的值。上电或重启处理器后,基址默认的值为0,表限(table limit)的值为0FFFFH。在保护模式运行前,作为处理器初始化的一部分,必须在GDTR寄存器中设置新的基址。
在Linux地址映射过程中,会用到GDTR寄存器。在此稍微详细介绍一下指令SGDT,即获取GDTR寄存器的值。SGDT指令的操作如下:
Operation
IF instruction is SGDT
IF OperandSize = 16
THEN
DEST[0:15] ← GDTR(Limit);
DEST[16:39] ← GDTR(Base); (* 24bits of base address stored *)
DEST[40:47] ← 0;
ELSE IF (32-bit Operand Size)
DEST[0:15] ← GDTR(Limit);
DEST[16:47] ← GDTR(Base); (* Full32-bit base address stored *)
FI;
ELSE (* 64-bit Operand Size *)
DEST[0:15] ← GDTR(Limit);
DEST[16:79] ← GDTR(Base); (* Full64-bit base address stored *)
FI;
FI;
Local DescriptorTable Register(LDTR)
LDTR寄存器的值包括:16位的段选择码、基址、段限(segment limit)和LDT描述符属性。基址是LDT段的起始地址,段限是段的大小。
指令LLDT和SLDT是分别用来设置和保存LDTR寄存器的值。
InterruptDescriptor Table Register(IDTR)
IDTR寄存器的内容是:IDT的基址和大小。
指令LIDT和SIDT是分别用来设置和保存IDTR寄存器的值。
Task Register(TR)
TR寄存器的内容包括:16位的段选择码、基址、段限(segment limit)和描述符的属性。由于Linux中没有使用TR寄存器,这里不作详细介绍。
Global Descriptor Table Register(GDTR)
GDTR寄存器保存GDT的基址和表限(table limit)。基址是GDT的第一个字节的地址,表限(table limit)给出表的大小。
指令LGDT和SGDT是分别用来设置和保存GDTR寄存器的值。上电或重启处理器后,基址默认的值为0,表限(table limit)的值为0FFFFH。在保护模式运行前,作为处理器初始化的一部分,必须在GDTR寄存器中设置新的基址。
在Linux地址映射过程中,会用到GDTR寄存器。在此稍微详细介绍一下指令SGDT,即获取GDTR寄存器的值。SGDT指令的操作如下:
Operation
IF instruction is SGDT
IF OperandSize = 16
THEN
DEST[0:15] ← GDTR(Limit);
DEST[16:39] ← GDTR(Base); (* 24bits of base address stored *)
DEST[40:47] ← 0;
ELSE IF (32-bit Operand Size)
DEST[0:15] ← GDTR(Limit);
DEST[16:47] ← GDTR(Base); (* Full32-bit base address stored *)
FI;
ELSE (* 64-bit Operand Size *)
DEST[0:15] ← GDTR(Limit);
DEST[16:79] ← GDTR(Base); (* Full64-bit base address stored *)
FI;
FI;
Local DescriptorTable Register(LDTR)
LDTR寄存器的值包括:16位的段选择码、基址、段限(segment limit)和LDT描述符属性。基址是LDT段的起始地址,段限是段的大小。
指令LLDT和SLDT是分别用来设置和保存LDTR寄存器的值。
InterruptDescriptor Table Register(IDTR)
IDTR寄存器的内容是:IDT的基址和大小。
指令LIDT和SIDT是分别用来设置和保存IDTR寄存器的值。
Task Register(TR)
TR寄存器的内容包括:16位的段选择码、基址、段限(segment limit)和描述符的属性。由于Linux中没有使用TR寄存器,这里不作详细介绍。
相关文章推荐
- IA32CPU内存管理机制
- Linux功耗管理(20)_Linux cpuidle framework(3)_ARM64 generic CPU idle driver
- 【翻译自mos文章】由CRSD管理的ORAAGENT 进程消耗了大量的CPU并有内存泄露
- Intel X86 CPU 系列的寻址方式与段式内存管理机制
- CPU内存管理模式与 寻址
- Docker-资源管理(cpu,内存,硬盘)
- linux2进程内存CPU管理笔记
- CPU内存管理模式与 寻址
- CPU内存管理模式与 寻址
- cpu如何知道内存中一条指令的大小从而使cs:ip寄存器更改自己的值
- NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64
- Intel X86 CPU 系列的寻址方式与段式内存管理机制
- Linux用户和组管理,查看软件缓存,通过命令查看硬件信息(cpu,版本,序列号,内存,主板,内核等)
- 计算机cpu、寄存器、内存区别
- 系统管理:查看cpu、内存、磁盘、I/O、负载、性能状态
- 【OpenStack项目管理-CPU/内存/存储/网络 配额管理】
- Intel X86 CPU 系列的寻址方式与段式内存管理机制
- NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64
- Vulkan编程指南翻译 第二章 第一节 CPU内存管理
- CentOS 7查看系统版本及查看机器位数x86-64 & centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息