news 2026/4/15 15:54:22

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

作者头像

张小明

前端开发工程师

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/4/16 11:07:15

Java计算机毕设之基于SpringBoot的在线招聘系统系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/4/16 9:05:04

50. Reporting Classes

UVM报告系统&#xff1a;从“乱吼”到“专业通报”的进化 &#x1f3af; 课程目标&#xff1a;10分钟掌握UVM报告系统的精髓 今天我要教你UVM中最实用、最容易被忽视的功能——报告系统。这就像从“扯着嗓子喊”到“使用专业对讲机系统”的进化&#xff01; &#x1f4e2; 第一…

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

springboot大学生平时成绩量化管理系统-vue

目录已开发项目效果实现截图关于博主开发技术介绍核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发…

作者头像 李华
网站建设 2026/4/16 9:06:48

贪心算法专题(十六):完美落幕的终极监控——「监控二叉树」

哈喽各位&#xff0c;我是前端小L。 欢迎来到贪心算法专题的大结局&#xff01; 题目背景很简单&#xff1a;给定一棵二叉树&#xff0c;我们在节点上安装摄像头。 一个摄像头可以监控它自己、它的父节点、它的子节点。 目标&#xff1a;计算监控整棵树所需的最少摄像头数量。…

作者头像 李华
网站建设 2026/4/13 16:11:22

Java毕设项目推荐-基于springboot的美食网站设计与实现基于Springboot+Vue美食烹饪互动平台的设计与实现【附源码+文档,调试定制服务】

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

作者头像 李华
网站建设 2026/4/16 9:06:47

C# 教程:快速掌握 TXT 和 Word 互转技巧

在日常工作中&#xff0c;我们常常需要处理各种文档格式&#xff0c;尤其是文本文件&#xff08;TXT&#xff09;和 Word 文件&#xff08;DOCX&#xff09;之间的转换。本文将介绍如何使用 C# 编程语言及其强大的库——Spire.Doc for .NET 来实现TXT和Word格式的互转。 Spire…

作者头像 李华