当前位置: 首页 > news >正文

金华做企业网站公司网站建设网络公司

金华做企业网站公司,网站建设网络公司,wordpress菜单底部导航,网站开发工程师要求在Linux内核中,全局描述符表(Global Descriptor Table,简称GDT)是一个关键的数据结构,主要用于管理处理器的内存段和相关的权限与属性。它属于x86架构中的保护模式特性,允许操作系统对内存访问进行更精细的…

      在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.yidumall.com/news/12863.html

相关文章:

  • 网站建设模版软文关键词排名推广
  • php是怎么设计网站的2345中国最好的网址站
  • 用模板网站做h5宣传页多少钱百度seo关键词优化电话
  • 百度网站引流怎么做百度安装
  • 网站开发环境选择谷歌下载
  • 淘宝上做网站698靠谱吗关键词seo排名
  • 为什么做的网站搜不出来的培训班招生方案有哪些
  • 网站开发页面布局搜索引擎营销的内容和层次有哪些
  • 俞润装饰做哪几个网站品牌营销推广方案怎么做
  • 备案网站主办单位冲突seo推广主要做什么的
  • 照片做视频ppt模板下载网站网络宣传推广方案范文
  • php网站后台模板自己开网站怎么开
  • h5商城网站模板下载长沙建设网站制作
  • 做网站风水最新舆情信息网
  • php做网站速成郑州网站推广哪家专业
  • 网站开发合同要上印花税吗关键字排名优化工具
  • wordpress中文商城模板下载重庆seo网络优化师
  • 设计网站首页要几天100种找客户的方法
  • 做的比较好的b2b网站b站视频推广网站动漫
  • 怎么在中国移动做网站备案国内推广平台
  • 湛江企业网站怎么建设软件优化
  • 免费客源软件唐山百度提升优化
  • 有什么好的网站可以接单子做列表网推广收费标准
  • 数据网站开发深圳网站开发
  • 深圳做网站哪家便宜seo推广优化官网
  • 信誉好的顺德网站建设荨麻疹怎么治疗能除根
  • 商城网站建设开发公司今日国内最新新闻
  • 手机上如何做网站seo怎么赚钱
  • 搜款网站一起做网店网络营销的主要传播渠道
  • 建筑企业登录哪个网站网站关键词优化排名软件