全局描述符表

描述

// 全局描述符类型
typedef struct gdt_entry_t {
        uint16_t limit_low;     // 段界限   15~0
        uint16_t base_low;      // 段基地址 15~0
        uint8_t  base_middle;   // 段基地址 23~16
        uint8_t  access;        // 段存在位、描述符特权级、描述符类型、描述符子类别
        uint8_t  granularity;   // 其他标志、段界限 19~16
        uint8_t  base_high;     // 段基地址 31~24
} __attribute__((packed)) gdt_entry_t;
// 全局描述符表定义
static gdt_entry_t gdt_entries[GDT_LENGTH] __attribute__ ((aligned(8)));

全局描述符表(Global Descriptor Table,简称 GDT)是 x86 架构中的一种数据结构,用于存储段描述符的信息。在 Intel 平坦模型中,GDT 是用于分段机制的重要组成部分。
GDT 包含了多个段描述符,每个段描述符用于描述一个段的属性和位置。每个段描述符包含以下信息:

	1.基址(Base):用于指定段在内存中的起始地址
	2.限长(Limit):用于指定段的大小
	3.访问权限(Access Rights):用于指定段的访问权限,如读、写、执行等
	4.附加属性(Additional Attributes):用于指定一些特殊的段属性,如段的类型、特权级别等

GDT 是一个系统级别的数据结构,每个 CPU 内核都有自己的 GDT。在启动时,操作系统会初始化 GDT,并将其加载到 CPU 的 GDTR 寄存器中。GDTR 寄存器存放 GDT 的起始地址和限长信息,这样 CPU 就能够访问到 GDT 中的段描述符了。
在 x86 架构中,GDT 是用于支持分段机制和虚拟内存的关键数据结构。操作系统通过配置 GDT 中的段描述符,实现虚拟地址到线性地址和线性地址到物理地址的转换。同时,GDT 中的段描述符也定义了每个段的访问权限,从而实现了内存保护和隔离。

需要注意的是,虽然 GDT 是 x86 架构中的一个重要概念,但在现代操作系统中,通常会使用更加灵活和高级的分段机制,如分页机制和多级段描述符表(如在 x86-64 中的 Long Mode 下使用的数据结构:Global Descriptor Table, Local Descriptor Table 和 Interrupt Descriptor Table)。这些机制使得操作系统能够更好地支持虚拟内存、多任务处理和安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值