Linux0.11 中全局描述符表(GDT)

      在Linux内核中,全局描述符表(Global Descriptor Table,简称GDT)是一个关键的数据结构,主要用于管理处理器的内存段和相关的权限与属性。它属于x86架构中的保护模式特性,允许操作系统对内存访问进行更精细的控制。

以下是GDT在Linux内核中的主要用途:

  1. 内存段管理:GDT定义了各种内存段,如代码段、数据段、栈段等。每个段在GDT中都有一个描述符,该描述符包含了段的基地址、长度以及访问权限等信息。处理器使用这些描述符来确定对内存的访问是否合法。
  2. 权限和属性控制:通过GDT中的描述符,操作系统可以控制哪些代码或数据可以被哪些处理器模式(如实模式或保护模式)访问。此外,还可以设置段的属性,如是否可执行、是否可写等。
  3. 任务切换:在多任务操作系统中,GDT也用于任务切换。每个任务或进程可以有其自己的GDT,这样当任务切换时,处理器会加载新的GDT,从而切换到新的内存段和权限设置。
  4. 保护机制:GDT是x86架构中保护机制的一部分,它与其他机制(如中断描述符表IDT、任务状态段TSS等)一起工作,确保系统的稳定性和安全性。

在Linux内核中,GDT的初始化和管理通常发生在内核启动的早期阶段。内核会设置适当的段描述符,并配置GDT的基地址和大小,以便处理器能够正确地使用它。

需要注意的是,随着操作系统和硬件架构的发展,一些现代操作系统和处理器可能不再直接使用传统的GDT,而是采用更先进的内存管理和保护机制。然而,对于基于x86架构的Linux系统来说,GDT仍然是一个重要的组成部分。

 图一

下面我们顺着源码的流程来看看GDT表的建立和他的用途在head.s中我们会看到 call setup_gdt这个函数:

startup_32:movl $0x10,%eaxmov %ax,%dsmov %ax,%esmov %ax,%fsmov %ax,%gslss _stack_start,%espcall setup_idtcall setup_gdtmovl $0x10,%eax		; reload all the segment registersmov %ax,%ds		; after changing gdt. CS was alreadymov %ax,%es		; reloaded in 'setup_gdt'mov %ax,%fsmov %ax,%gslss _stack_start,%espxorl %eax,%eax
1:	incl %eax		; check that A20 really IS enabledmovl %eax,0x000000	; loop forever if it isn'tcmpl %eax,0x100000je 1bsetup_gdt:lgdt gdt_descrret
gdt_descr:.word 256*8-1		# so does gdt (not that that's any.long _gdt		# magic number, but it works for me :^).align 3_gdt:	.quad 0x0000000000000000	/* NULL descriptor */.quad 0x00c09a0000000fff	/* 16Mb */.quad 0x00c0920000000fff	/* 16Mb */.quad 0x0000000000000000	/* TEMPORARY - don't use */.fill 252,8,0			/* space for LDT's and TSS's etc */

lgdt gdt_descr这条指令的意思就是把 gdt_48 放到gdtr寄存器中。gdt_descr是个标签,gdt_descr由一个word 型 和一个long 型的数字组成。

图二

从代码中可以看到 界限值是256*8-1 = 2047.可以从实验中看到这个值0x5cb807ff

图三

低16为的值0x7ff =2047. 还可以看到gdt 的地址在0x00005cb8 处的数据

图四

有一处数据和源码中的有些不容暂时还不知道原因:0x00c09300 源码中是0x00c09200

_gdt:	.quad 0x0000000000000000	/* NULL descriptor */.quad 0x00c09a0000000fff	/* 16Mb */.quad 0x00c0920000000fff	/* 16Mb */.quad 0x0000000000000000	/* TEMPORARY - don't use */.fill 252,8,0			/* space for LDT's and TSS's etc */
图五

 目前的gdt 中只有四个项目的数据是我们提前写入的。后面我们在创建进程的时候调用fork 函数会创建每个进程的tss 和ldt,并且把对应的值写入到gdt 表中。

	set_tss_desc(gdt+(nr<<1)+FIRST_TSS_ENTRY,&(p->tss));set_ldt_desc(gdt+(nr<<1)+FIRST_LDT_ENTRY,&(p->ldt));
图六

跑完整个main 函数后我们再来看gdt 表中的数据,多了一些数据。

图七

我们查看进程表task总共有4个进程被创建

图八

但是我们查看gdt 表中前14项被使用,除掉前面四个,有10个事被进程使用的,但是进程表中只有4个进程,这个是什么原因,应该是有进程退出了,但是没有清除掉gdt中的内容。shell 进程创建了两次第一次退出了。

图九

从图九中可以看出 看出进程之间的关系

图十

从图十可以看出task[2]位置的进程创建于task[3]之后,原来的进程应该是退出了。

下面我们来看看gdt 表中的存贮的内容的含义:

图十一

 64 个字节我们看gdt 中进程id 位0x1 的项目 的LDT  项目{a = 0xf2d00068,  b = 0x82fd}把它写成一个64位的数据0x000082fdf2d00068取出地址部分0x00fdf2d0.

图十二

我们从进程的任务表中查找到对应进程的ldt 表的地址是0xfdf2d8.

GDT 中tss 项目的数据内容和LDT类似,都可以通过gdt 表获取到对应地址处的数据。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1421788.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

代码大师的工具箱:现代软件开发利器

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

RedisTemplate操作Redis详解之连接Redis及自定义序列化

连接到Redis 使用Redis和Spring时的首要任务之一是通过IoC容器连接到Redis。为此&#xff0c;需要java连接器&#xff08;或绑定&#xff09;。无论选择哪种库&#xff0c;你都只需要使用一组Spring Data Redis API&#xff08;在所有连接器中行为一致&#xff09;&#xff1a;…

【原理代码详解】DeepSORT算法:多目标跟踪的深度学习解决方案

一、引言 在视频监控和智能交通系统中&#xff0c;多目标跟踪是一项关键技术&#xff0c;它涉及检测视频中的多个目标&#xff0c;并在视频帧之间维持每个目标的身份。DeepSORT算法作为SORT算法的扩展&#xff0c;通过结合深度学习和传统的跟踪技术&#xff0c;提高了目标跟踪…

李飞飞团队关于2024年人工智能发展报告总结 (Artificial Intelligence Index Report)

目录 1 10大核心信息2 AI研究和发展2.1 核心要点2.2 核心对比信息2.3 模型是否会用尽数据2.4 基础模型发展2.5 训练模型成本 3 技术性能3.1 核心要点3.2 重要模型发布情况3.3 AI表现情况3.4 多学科、高难度评估集 (MMMU & GPQA & ARC)3.5 Agents3.6 RLHF & RLAIF3.…

R语言数据分析案例-股票题目分析

Value at Risk&#xff08;VaR&#xff09;是一种统计技术&#xff0c;用于量化投资组合在正常市场条件下可能遭受的最大潜在损失。它是风险管理和金融领域中一个非常重要的概念。VaR通常以货币单位表示&#xff0c;用于估计在给定的置信水平和特定时间范围内&#xff0c;投资组…

基于网络的无人海洋船舶控制

书籍&#xff1a;Network-Based Control of Unmanned Marine Vehicles 作者&#xff1a;Yu-Long Wang&#xff0c;Qing-Long Han&#xff0c;Chen Peng&#xff0c;Lang Ma 出版&#xff1a;Springer 书籍下载-《基于网络的无人海洋船舶控制》控制系统中的通信网络可能引起延…

28.6k Star!Dify:完善生态、支持Ollama与本地知识库、企业级拖放式UI构建AI Agent、API集成进业务!

原文链接&#xff08;更好排版、视频播放、社群交流&#xff09; 28.6k Star&#xff01;Dify&#xff1a;完善生态、支持Ollama与本地知识库、企业级拖放式UI构建AI Agent、API集成进业务&#xff01; 原创 Aitrainee [ AI进修生 ](javascript:void(0)&#x1f609; AI进修…

触摸OpenNJet,云原生世界触手可及

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 导言OpenNJet云原生引擎介绍云原生平台的介绍优化与创新 为什么选择OpenNJet云原生引擎如何在windo…

SAP 控制已转采购订单的PR不允许删除简介

SAP系统中采购申请当被转成采购订单后&#xff0c;在采购申请中会关联到对应已生生成的采购订单&#xff0c;如下图中可以看到采购申请对应的采购订单 当日常操作中用户在创建完采购申请后&#xff0c;当PR转成PO后仍然可以将采购申请的行项目进行删除&#xff0c;显然这个操作…

maven .lastUpdated文件作用

现象 有时候我在用maven管理项目时会发现有些依赖报错&#xff0c;这时你可以看一下本地仓库中是否有.lastUpdated文件&#xff0c;也许与它有关。 原因 有这个文件就表示依赖下载过程中发生了错误导致依赖没成功下载&#xff0c;可能是网络原因&#xff0c;也有可能是远程…

做国外问卷调查,一天能挣多少钱?

大家好​&#xff0c;我是汇舟问卷&#xff0c;专注于国外问卷调查项目已经五年的时间了&#xff0c;目前做的一直比较稳定。 这个项目说白了就是通过搭建国外的环境&#xff0c;登录问卷平台&#xff0c;通过参与国外企业发布的问卷调查来获取​美金奖励。 那么参与的问卷的…

2.数据类型与变量(java篇)

目录 数据类型与变量 数据类型 变量 整型变量 长整型变量 短整型变量 字节型变量 浮点型变量 双精度浮点型 单精度浮点型 字符型变量 布尔型变量&#xff08;boolean&#xff09; 类型转换 自动类型转换(隐式) 强制类型转换(显式) 类型提升 字符串类型 数据类…

中医揿针的注意事项

点击文末领取揿针的视频教程跟直播讲解 关于揿针的注意事项&#xff0c;我们可以从以下几个方面进行探讨&#xff1a; 01操作前准备 1. 确保针具的清洁和无菌状态&#xff0c;以避免感染。 2. 了解患者的身体状况&#xff0c;如是否有特殊疾病或过敏史&#xff0c;以便选择…

HPC高性能计算 AI人工智能计算需要50GB/s高带宽1.3M IOPS及0.3毫秒级低延迟的存储磁盘阵列,性能还能随节点增加而成倍增长

最近FSD&#xff08;完全自动驾驶&#xff09;成为热点话题&#xff0c;以自动驾驶&#xff0c;智慧医疗、生命科学、机器人为代表的新领域&#xff0c;广泛应用人工智能、机器学习&#xff08;ML&#xff09;、高性能计算&#xff08;HPC&#xff09;&#xff0c;给存储带来前…

Apple store 静安·苹果店欣赏

官网&#xff1a; https://www.apple.com/today/Apple 亚洲第一大商店&#xff1a;Apple 静安零售店现已在上海开幕 静安苹果欣赏

从零开始学习Linux(6)----进程控制

1.环境变量 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数&#xff0c;我们在编写C/C代码时&#xff0c;链接时我们不知道我们链接的动态静态库在哪里&#xff0c;但可以连接成功&#xff0c;原因是环境变量帮助编译器进行查找&#xff0c;环境变量通常具有…

geotrust dv通配符证书800

Geotrust是成立时间较久的正规CA认证机构&#xff0c;在过去的几十年间颁发了无数的SSL证书&#xff0c;这些SSL证书被各个开发者使用&#xff0c;受到大多数浏览器的信任。而Geotrust旗下的DV通配符证书因其广泛的应用范围受到了用户的青睐。今天就随SSL盾小编了解Geotrust旗下…

SpringAMQP 发布订阅-DirectExchange

DirectExchange: 路由模式模型 代码实现 直接通过注解方式绑定交换机和队列&#xff0c;这里边加了key也就是BingdingKey绑定key&#xff0c;可以看作交换机的路由规则&#xff0c;交换机收到消息后读取消息中指定的Routingkey发送到存有相应BingdingKey的队列中。 RabbitLis…

绝地求生PUBG新老艾伦格有什么差别 老艾伦格什么时候回归

复古风格的艾伦格原始地图携带着那些标志性的记忆符号华丽回归&#xff0c;邀请您沉浸于往昔的每一处细节探索中。我们不仅还原了游戏诞生的起点&#xff0c;还在其中巧妙融入现代游戏元素&#xff0c;构筑一座连接昔日与今朝的桥梁&#xff0c;完美融合了经典与创新的游戏体验…

Nginx内网环境开启https

文章目录 前言一、open-ssl1. 验证2. 安装3.生成ssl证书 一、nginx1. 验证支持模块2. 安装必要模块2.1 重新编译nginx2.2 替换原文件 3. 配置https 总结 前言 nginx开启https前提&#xff1a; 服务器支持open-sslnginx 包含--with-http_ssl_module --with-stream --with-stre…