news 2026/5/30 20:40:37

全局描述符表与进程有什么关系

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
全局描述符表与进程有什么关系

在32位x86保护模式中,全局描述符表(GDT)是系统级别的数据结构,而进程(或任务)则有自己的局部描述符表(LDT)。它们之间的关系是:

GDT是全局的:整个系统只有一个GDT,由操作系统在启动时设置。它包含适用于所有进程的描述符,例如操作系统代码段和数据段,以及每个进程的TSS(任务状态段)和LDT描述符。

进程与LDT:每个进程可以有自己的LDT。LDT包含该进程私有的代码段和数据段描述符。这样,操作系统可以通过切换LDT来隔离不同进程的地址空间。

进程切换与GDT:当进行进程切换时,操作系统会更新当前任务的LDT选择子(在LDTR寄存器中),并可能切换TSS。GDT中的每个LDT描述符和TSS描述符都是为每个进程分配的,因此GDT中包含了所有进程的LDT和TSS的描述符。

内存保护:通过GDT和LDT,操作系统可以为每个进程提供独立的虚拟地址空间(分段机制)。每个进程的段选择子可以指向GDT中的全局描述符或自己LDT中的局部描述符。

平坦模型:在现代操作系统中,通常使用平坦内存模型,即所有段都映射到整个4GB线性地址空间,基址为0,界限为4GB。这样,分段机制实际上被绕过了,内存保护主要通过分页来实现。此时,GDT中的代码段和数据段描述符对每个进程都是一样的,进程的隔离通过分页(每个进程有自己的页表)实现。

联系总结:

GDT是系统全局的,包含所有进程共享的描述符以及每个进程的LDT和TSS的描述符。

每个进程有自己的LDT(可选),用于定义进程私有的内存段。

进程切换时,操作系统通过加载新的LDT选择子(指向GDT中该进程的LDT描述符)和TSS选择子来切换上下文。

因此,GDT与进程之间的联系在于:GDT提供了系统级别的段描述符,同时也为每个进程的LDT和TSS提供了入口,从而支持多任务环境下的内存保护和任务切换。

全局描述符表(GDT)与进程的关系是一个核心的系统设计问题。让我详细解释它们的联系和区别:

1.GDT的本质

  • 系统全局资源:整个系统只有一个GDT
  • 硬件要求:x86 CPU要求必须有一个GDT才能进入保护模式
  • 位置:由GDTR寄存器指向,包含段描述符的数组

2.GDT与进程的直接联系

A.进程标识符

; 每个进程在GDT中有两个关键条目: ; 1. TSS描述符 - 任务状态段(Task State Segment) ; 2. LDT描述符 - 局部描述符表(Local Descriptor Table) ; 进程切换时: mov ax, TSS_SELECTOR ; TSS选择子指向GDT中的TSS描述符 ltr ax ; 加载任务寄存器 mov ax, LDT_SELECTOR ; LDT选择子指向GDT中的LDT描述符 lldt ax ; 加载局部描述符表寄存器

B.任务门和任务切换

  • GDT中的任务门描述符用于任务切换
  • 每个进程对应一个TSS描述符(在GDT中)
  • 通过CALLJMP到任务门选择子触发任务切换

3.GDT与进程的间接联系

A.内核空间共享

GDT条目示例: 索引 类型 用途 0 Null 空描述符 1 Code 内核代码段(所有进程共享) 2 Data 内核数据段(所有进程共享) 3 Code 用户代码段(所有进程共享模板) 4 Data 用户数据段(所有进程共享模板) 5-7 预留 系统调用门等 8+ 进程相关 TSS、LDT等进程特定描述符

B.进程隔离机制

+------------------+ | GDT | <-- 系统全局 |------------------| | 内核段描述符 | 所有进程相同 | 用户段模板 | 所有进程相同(但权限不同) |------------------| | 进程A的TSS | \ | 进程A的LDT | | 每个进程不同 | 进程B的TSS | | | 进程B的LDT | / +------------------+ 每个进程的地址空间: 内核空间:通过GDT中的内核段访问(共享) 用户空间:通过各自的LDT或平坦模型访问(隔离)

4.现代操作系统中的实现

传统分段模型(如早期Linux)

// 每个进程在GDT中占两个槽structtask_struct{// ...unsignedshorttss_selector;// 指向GDT中该进程的TSSunsignedshortldt_selector;// 指向GDT中该进程的LDTstructdesc_structldt[3];// 进程的LDT内容// ...};

平坦模型(现代OS主流)

// 大部分使用分页,GDT简化structgdt_entry{// 只有几个固定条目:// 1. 空描述符// 2. 内核代码段(基址0,限制4G)// 3. 内核数据段(基址0,限制4G)// 4. 用户代码段(基址0,限制4G)// 5. 用户数据段(基址0,限制4G)// 6. 每个CPU的TSS(用于特权级切换)// 7. 可能的每CPU数据段};

5.关键设计要点

共享与隔离的平衡

  • 共享:所有进程通过GDT访问相同的内核空间
  • 隔离:每个进程通过自己的LDT或分页表隔离用户空间

进程切换成本

; 传统任务切换(使用硬件任务切换) jmp TSS_SELECTOR ; 昂贵,保存全部状态到TSS ; 现代软件切换(Linux/Windows方式) mov cr3, new_page_directory ; 切换页目录 ; 更新少数段寄存器(通常不需要,因为平坦模型) ; 软件保存/恢复寄存器

6.实际案例

Linux 2.4之前

  • 每个进程在GDT中有2个条目(TSS和LDT)
  • 限制:最大进程数 = (GDT大小 - 固定条目) / 2

Linux 2.6+(平坦模型)

// 每个CPU一个GDT,包含:// 1. 空描述符// 2. 内核代码段// 3. 内核数据段// 4. 用户代码段// 5. 用户数据段// 6. 每CPU的TSS(用于用户态->内核态切换)// 7. 每CPU的数据段(可选)// 进程隔离完全通过分页实现// 每个进程有自己的页目录(cr3)

Windows NT

  • 类似平坦模型
  • 使用调用门系统调用指令进行特权切换
  • GDT主要维护TSS用于栈切换

总结关系

  1. 容器关系:GDT是系统级的容器,包含所有进程相关的系统段描述符
  2. 桥梁作用:GDT连接了进程的LDT和TSS到CPU硬件
  3. 权限控制:通过GDT中的DPL控制用户态到内核态的切换
  4. 演进趋势:从"每个进程在GDT中有条目"到"GDT几乎固定,通过分页隔离进程"

核心思想:GDT提供了系统级别的段描述框架,而进程通过GDT中的特定条目(TSS、LDT)和分页机制实现隔离与共享的平衡。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 12:42:56

49. UVM Register Model Example

UVM寄存器模型完整实战&#xff1a;从“理论”到“通车”的全流程指南 &#x1f3af; 课程目标&#xff1a;30分钟掌握完整的UVM寄存器验证环境 今天我将带你完成从零开始搭建一个完整的交通灯控制器验证环境的全过程。这就像从设计图纸到实际通车&#xff0c;我会一步步教你每…

作者头像 李华
网站建设 2026/5/29 20:00:56

大数据时代下 Eureka 的性能优化秘籍

大数据时代下 Eureka 的性能优化秘籍关键词&#xff1a;大数据时代、Eureka、性能优化、微服务、服务注册与发现摘要&#xff1a;在大数据时代&#xff0c;微服务架构得到了广泛应用&#xff0c;而 Eureka 作为 Spring Cloud 生态中重要的服务注册与发现组件&#xff0c;其性能…

作者头像 李华
网站建设 2026/5/30 8:13:06

Java毕设选题推荐:基于SpringBoot的非遗传统手工艺购物系统基于Spring Boot的非物质文化商城系统的设计与开发【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/30 18:48:37

**反射**

一、类对象1.反射&#xff1a;允许在程序运行状态中&#xff0c;可以获取任意类中的属性和方法&#xff0c;并且可以操作任意对象内部的属性和方法&#xff0c;这种动态获取类的信息及动态操作对象的属性和方法对应的机制称为反射机制。2.类的对象&#xff1a;基于某个类new出来…

作者头像 李华
网站建设 2026/5/29 4:39:16

应用——基于C语言实现的简易Web服务器开发

基于C语言实现的简易Web服务器开发一、项目概述本项目是一个基于C语言实现的多功能简易Web服务器&#xff0c;支持HTTP/1.1协议&#xff0c;能够处理HTML页面、图片文件请求&#xff0c;并实现基本的登录验证功能。二、项目文件结构项目目录/ ├── 01ser.c # 主服务…

作者头像 李华