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.mzph.cn/bicheng/12833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习技术之卷积神经网络

深度学习技术 卷积神经网络1. 导入需要的库2. 加载并显示两张图像2.1 加载图像2.2 创建子图2.3 打印图像形状2.4 打印合并后的图像数组的形状 3. 卷积层3.1 定义变量3.1.1 卷积核的大小&#xff08;u&#xff09;3.1.2 滑动步长&#xff08;s&#xff09;3.1.3 输出特征图的数量…

你了解 pom.xml 吗

你了解pomxml吗 springboot 是 java 利器&#xff0c;几乎每个写 java 的同学都会用&#xff0c;但是你了解 pom.xml 吗&#xff1f; 这篇干货查漏补缺。 首先我们创建个 springboot 项目 都选了默认设置&#xff1a; 我把这篇完整粘贴出来 pom.xml <?xml version&quo…

Linux 通过关键字查找文件

按文件名查找 find 路径 -name “文件名” 查找当前目录下的所有mk文件 find . -name "*.mk"按关键字查找 find 路径 -name “文件名” | xargs grep -n “关键字” 参数&#xff1a; xargs 是给命令传递参数的一个过滤器&#xff0c;也是组合多个命令的一个工具 -n…

【挑战全网】最全高德地图充电桩接入指南,流量必火!

分享《一套免费开源充电桩物联网系统&#xff0c;是可以立马拿去商用的&#xff01;》 一、和高德直接互联互通的优势&#xff1a; 1、高德官方直接互联互通&#xff0c;提供给合作商户独立发展自主权&#xff0c;不依赖任何第三方平台; 2、自己控制电站的上线、下线、修改电…

从0开始理解云原生架构

一、云原生发展历史 云原生概念最早起源于2013年&#xff0c;由 Matt Stine 首次提出“Cloud Native”这一术语&#xff0c;这个概念强调了应用需要充分利用云的优势&#xff0c;如弹性、可扩展性和服务化。2015年&#xff0c;Matt Stine出版了《迁移到云原生架构》一书&am…

ChatGPT官网5月14日凌晨1点发布会推出最新GPT4o大模型,贾维斯时刻要来了?

就在今天北京时间2024年5月14日凌晨1点中&#xff0c;OpenAI进行了发布会&#xff0c;这次发布会的内容炸裂&#xff0c;一起来看下吧&#xff01; GPT4o多模态大模型发布 首先公开的是GPT4o多模态大模型的发布&#xff0c;相较于GPT-4turbo速度更快&#xff0c;更便宜。我刚开…

水离子雾化壁炉与会所的氛围搭配

水离子雾化壁炉在会所的氛围搭配可以营造出舒适、现代和高雅的氛围&#xff0c;以下是一些搭配建议&#xff1a; 豪华会所装饰&#xff1a; 将水离子雾化壁炉作为会所豪华装饰的一部分&#xff0c;放置在会所的核心区域或休息区域。选择适合会所风格的壁炉款式&#xff0c;如…

echarts的柱状图使用

1. 柱状图&#xff08;柱体顶部使用外部图片 相关代码 <template><div class"out-bg"><div class"container" ref"warnChartRef"></div></div> </template><script> import * as echarts from echar…

短视频矩阵系统/源码----可视化剪辑技术独家开发

现阶段市面上大多矩阵软件都非常程序化且需要使用者具有较强的逻辑思维能力或剪辑经验&#xff0c;这使得一些个人、团队、企业在使用时无形中增加了学习成本&#xff0c;剪辑出来的效果大多不尽如人意&#xff0c;发出来的视频没有流量&#xff0c;根本达不到预期效果。 如何提…

59.基于SSM实现的网上花店系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;网上花店是在MySQL中建立数据表保存信息&#xff0c;运用SSMVue框架和Java语言编写。并按照软件设计开发流程进行设计实现充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SSM的网…

运营商二次放号查询接口如何对接

运营商二次放号查询接口又叫手机二次放号检测接口&#xff0c;指的是输入手机号和日期&#xff0c;查看在该日期之前是不是二次放号。那么运营商二次放号查询接口如何对接呢&#xff1f; 这边我找到了一家叫数脉API的公司&#xff0c;他们刚好有这个接口&#xff0c;首先注册账…

CSS的基础语法和常见的语法简单归纳

CSS CSS 是层叠样式表&#xff08;Cascading Style Sheets&#xff09;的缩写。它是一种用来控制网页样式和布局的标记语言。通过 CSS&#xff0c;可以定义网页中的元素&#xff08;如文字、图像、链接等&#xff09;的外观和排版方式&#xff0c;包括字体、颜色、大小、间距、…

产品推荐 | 基于 AMD Alveo V80 数据中心的FPGA加速器卡

1、产品概述 Alveo V80 卡采用强大的 AMD Versal™ XCV80 HBM 系列自适应 SoC&#xff0c;将高带宽存储器 (HBM2e) 和 800 Gb/s 高速网络封装到全高、 长外形尺寸的双插槽卡中&#xff0c;专为在本地服务器或云中部署而设计。 V80 加速器经过优化&#xff0c;可通过 AMD Vers…

运维别卷系列 - 云原生监控平台 之 06.prometheus pushgateway 实践

文章目录 [toc]Pushgateway 简介Pushgateway 部署创建 svc创建 deployment Pushgateway 测试删除 Pushgateway 上对应 lable 的数据 Pushgateway 简介 WHEN TO USE THE PUSHGATEWAY Pushgateway 是一种中介服务&#xff0c;允许您从无法抓取的作业中推送指标。 The Pushgateway…

基于Django实现的校园疫情监控平台

基于Django实现的校园疫情监控平台 开发语言:Python 数据库&#xff1a;MySQL所用到的知识&#xff1a;Django框架工具&#xff1a;pycharm、Navicat、Maven 系统功能实现 登录注册功能 用户在没有登录自己的用户名之前只能浏览本网站的首页&#xff0c;想要使用其他功能都会…

web系统日常运维命令和工具

一、前言 web系统日常运维命令和工具 二查看服务器资源使用情况 1、内存使用情况 free -h 2、cpu 使用情况 3、磁盘使用情况 df -h /home 4、查看文件日志 查看文件尾部持续输出 tail -n 1000 -f xxx.log 查找文件匹配内容 cat xxx.log | grep XXXXX 查看zip文件内…

Java数据类型:基本数据类型

Java是一种强类型语言&#xff0c;定义变量时&#xff0c;必须指定数据类型。 // 变量必须指定数据类型 private String username;初学者不免有个疑问&#xff1a;在实际编写代码的过程中&#xff0c;该如何选择数据类型呢&#xff1f; 回答这个问题之前&#xff0c;先来解决…

线性/非线性最小二乘 与 牛顿/高斯牛顿/LM 原理及算法

最小二乘分为线性最小二乘和非线性最小二乘 最小二乘目标函数都是min ||f(x)||2 若f(x) ax b&#xff0c;就是线性最小二乘&#xff1b;若f(x) ax2 b / ax2 bx 之类的&#xff0c;就是非线性最小二乘&#xff1b; 1. 求解线性最小二乘 【参考】 2. 求解非线性最小二乘…

[数据结构]红黑树的原理及其实现

文章目录 红黑树的特性红黑树的时间复杂度推导&#xff1a;结论红黑树与AVL树比较 红黑树的插入红黑树的节点定义调整策略思考情况2&#xff1a;思考情况3&#xff1a; 代码实现myBTRee.htest.cpp 红黑树的特性 红黑树最常用的平衡二叉搜索树。跟AVL树不同的是&#xff0c;红黑…

阻抗控制理解之逆动态控制律

具有六个自由度的二阶机械系统&#xff0c;其特征是给定的质量、阻尼和刚度&#xff0c;称为机械阻抗。 用于运动控制的加速度解决方法&#xff0c;它旨在通过逆动力学控制律在加速度水平上解耦和线性化非线性机器人动力学。在与环境存在交互作用的情况下&#xff0c;控制律 考…