news 2026/5/1 11:38:08

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

作者头像

张小明

前端开发工程师

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/1 10:24:55

Java计算机毕设之基于SpringBoot的新能源二手汽车销售平台的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/5/1 7:17:28

贪心算法专题(十三):画地为牢的艺术——「划分字母区间」

哈喽各位&#xff0c;我是前端小L。 欢迎来到贪心算法专题第十三篇&#xff01; 题目给你一个字符串&#xff0c;让你把它切成尽可能多的片段。 硬性要求&#xff1a;同一个字母只能出现在一个片段里。 这意味着&#xff1a;如果第一段里有了 a&#xff0c;那么字符串里剩下的…

作者头像 李华
网站建设 2026/5/1 7:24:25

CMP-C9-Azido-sialic Acid — 糖合成与生物偶联的关键修饰糖核苷酸

CMP-C9-Azido-sialic Acid 是一种经过化学修饰的糖核苷酸&#xff0c;属于Sugar Nucleotides类别。它在糖生物学、药物开发和诊断研究领域具有重要价值&#xff0c;通过引入叠氮基团&#xff0c;为糖链的精准修饰和功能化提供了强大工具。这种分子不仅扩展了糖科学的研究边界&a…

作者头像 李华
网站建设 2026/5/1 8:39:54

深度测评9个AI论文工具,助研究生高效完成论文写作!

深度测评9个AI论文工具&#xff0c;助研究生高效完成论文写作&#xff01; AI 工具如何改变论文写作的未来 在当今信息爆炸的时代&#xff0c;研究生们面临着前所未有的学术挑战。无论是撰写开题报告、完成实验分析&#xff0c;还是最终的论文定稿&#xff0c;每一个环节都需要…

作者头像 李华
网站建设 2026/5/1 9:08:58

AI Coding在嵌入式开发中的应用

文章由来最近在测试各种AI Coding工具&#xff0c;通常以python 小项目作为测试内容。发现现在的AI coding工具越来越智能了。以后的工程师将面临两极分化&#xff0c;小白级&#xff08;只会用AI写代码&#xff09;&#xff0c;大神级&#xff08;优化AI的前沿工程师&#xff…

作者头像 李华