跳转到内容

全局描述符表:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
添加{{copyedit}}和{{expert}}标记到条目
Cewbot留言 | 贡献
cewbot: 規範多個問題模板: 合併維護模板
第1行: 第1行:
{{多個問題|
{{copyedit|time=2020-03-05T01:33:16+00:00}}
{{copyedit|time=2020-03-05T01:33:16+00:00}}
{{expert|time=2020-03-05T01:33:16+00:00}}
{{expert|time=2020-03-05T01:33:16+00:00}}
{{expand|time=2018-06-04T03:56:48+00:00}}
{{expand|time=2018-06-04T03:56:48+00:00}}
}}
'''全局描述符表''' '''(GDT)''' 是一个从 [[Intel 80286|80286]] 开始用于界定不同内存区域的特征,用于 [[英特尔|Intel]] [[x86]]-系列处理器的数据结构。 全局描述表位于内存中。全局描述表的条目描述及规定了不同内存分区的各种特征,包括基地址、大小和访问等特权如可执行和可写等。 在 Intel 的术语中,这些内存区域被称为 ''[[X86記憶體區段|段]]'' 。
'''全局描述符表''' '''(GDT)''' 是一个从 [[Intel 80286|80286]] 开始用于界定不同内存区域的特征,用于 [[英特尔|Intel]] [[x86]]-系列处理器的数据结构。 全局描述表位于内存中。全局描述表的条目描述及规定了不同内存分区的各种特征,包括基地址、大小和访问等特权如可执行和可写等。 在 Intel 的术语中,这些内存区域被称为 ''[[X86記憶體區段|段]]'' 。



2020年3月6日 (五) 06:48的版本

全局描述符表 (GDT) 是一个从 80286 开始用于界定不同内存区域的特征,用于 Intel x86-系列处理器的数据结构。 全局描述表位于内存中。全局描述表的条目描述及规定了不同内存分区的各种特征,包括基地址、大小和访问等特权如可执行和可写等。 在 Intel 的术语中,这些内存区域被称为  。

全局描述表用于内存地址的转换。所有程序的内存访问都需要用到GDT中的有关内存区域即x86内存分段的信息。访问GDT需要使用segment selector和segment offset。处理器使用segment selector为索引查找GDT的条目。当适当的条目找到后,处理器将会做一系列的检查,包括检查segment offset尝试访问区间是否在此内存分段内,代码是否有权限访问此内存分段(检查分级保护域权限)等。[1]

为了加速全局描述表的访问,往segment寄存器里载入segment的值会使得GDT的特定条目被读入处理器内部的缓存中。之后的内存访问将会通过缓存进行处理。

GDT条目结构


GDT作用

GDT的是提供内存保护。在80286之前的处理器中只有实模式,所有程序都可访问任意内存。GDT是保护模式下限制非法内存访问的一种方式。

GDT 结构 

GDT description structure

GDT description structure描述了GDT的位置及大小(并非GDT的一部分)。储存于GDTR 寄存器中。可通过LGDTR指令从内存中往GDTR中加载GDT description structure。

  • Size: GDT的大小(bytes) - 1
  • Offset: GDT的线性地址

GDT

GDT实例

gdt:
    .long 0
    .long 0
code_seg:
    .long 0x0000FFFF
    .long 0x00CF9A00
data_seg:
    .long 0x0000FFFF
    .long 0x00CF9200
gdt_ptr:
    .short 0x100
    .long gdt

参考文献

  1. ^ GDT Tutorial - OSDev Wiki. wiki.osdev.org. [2019-08-12].