首页
学习
活动
专区
工具
TVP
发布

GDT,LDT,GDTR,LDTR 详解

二、详解 先说明一下概念 (1)全局描述符表GDT(Global Descriptor Table)在整个系统中,全局描述符表GDT只有一张(一个处理器对应一个GDT),GDT可以被放在内存的任何位置,...但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址,程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令将GDT的入口地址装入此寄存器...,从此以后,CPU就根据此寄存器中的内容作为GDT的入口来访问GDT了。...我们可以这样理解GDT和LDT:GDT为一级描述符表,LDT为二级描述符表。如图 ? 局部描述符表LDT LDT和GDT从本质上说是相同的,只是LDT嵌套在GDT之中。...三、实例(对理解非常有用) 1:访问GDT ? 段描述符在GDT中 当TI=0时表示段描述符在GDT中,如上图所示: ①先从GDTR寄存器中获得GDT基址。

1.9K40
您找到你想要的搜索结果了吗?
是的
没有找到

Linux从头学09:x86 处理器如何进行-层层的内存保护?

下一篇文章,我们就把 x86 中的分页机制打开,并与 Linux 中的分段和分页机制进行对比。...实模式:bootloader 为程序计算段的基地址 在之前的文章:Linux从头学06:16张结构图,彻底理解【代码重定位】的底层原理中,我们讨论了 bootloader 是如何把应用程序读取到内存中...这个准备工作中,最重要的就是:建立 GDT 这个表,并且把 GDT 的开始地址,存储到寄存器 GDTR 中。...在准备这篇文章的时候,我特意看了一下 《深入理解 Linux 内核》这部书的第二章:"内存寻址"部分的内容。...如果把之前的这几篇文章都理解了,再去看 Linux 内核的相关书籍,就不会那么吃力了。 Linux 虽然很复杂,但是它也是建立在处理器所提供的基本功能上的。

79930

Linux从头学10:三级跳过程详解-从 bootloader 到 操作系统,再到应用程序

公众号:【IOT物联网小镇】,专注于:C/C++、Linux操作系统、应用程序设计、物联网、单片机和嵌入式开发等领域。 公众号回复【书籍】,获取 Linux、嵌入式领域经典书籍。...之前的第 6 篇文章中Linux从头学06:16张结构图,彻底理解【代码重定位】的底层原理,我们是假设 bootloader 把操作系统程序读取到内存 0x0002_0000 的位置,这里继续使用这个示例...我们可以联想一下: 现代 Linux 系统中 ELF 文件的格式,在文件头部中记录了每一个段的长度,具体解析请参考这篇文章:Linux系统中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来探索...段寄存器的 bit2 位 TI 标志,就说明了需要到 GDT 中查找段描述符?还是到 LDT 中去查找? 为了方便起见,我们就把所有的段描述符都放在 GDT 中。...此时的 GDT 就是下面这样: 从这张图中已经可以看出一个问题了: 如果所有应用程序的段描述符都放在全局的 GDT 中,当应用程序结束之后,还得去更新 GDT,势必给操作系统的代码带来很多麻烦。

48450

通过linux0.11源码理解进程的虚拟地址、线性地址、物理地址

假设当前执行cs:ip指向的代码,系统根据ldt的值从gdt中选择一个元素,里面保存的是idt结构的首地址。...中关于LDT的索引,切换任务的时候, 这个索引会被加载到ldt寄存器,cpu会自动根据ldt的值,把 GDT中相应位置的段描述符加载到ldt寄存器(共16+32+16位)...接着计算一个在全局描述符GDT中的一个索引,这个索引是ldt选择子。后面会讲到。然后计算进程的代码和数据的线性地址首地址和限长,写到ldt的描述符中。接着复制页表,但是不分配物理地址。...最后把tss结构和ldt结构挂载到GDT中。fork函数就完成了。下面看看选择子和描述符的格式。 ? ?...这就是linux0.11版本中进程地址管理的实现。下面是fork后的结构图。 ?

1.4K60

内核知识第九讲,32位下的分页管理,36位下的分页管理.以及64位下的分页管理

二丶寻址结构图 昨天我们讲解的是32为下4M+4K的做表方式.  一个页目录表.一个页表 (PDE,PTE),虚拟地址当作下表进行寻址动作. 然后还有一个寻址结构图  1. ...首先第一步,虚拟地址是段加偏移的方式  例如: CS:00401000  2.而后,段CS,当作选择子去GDT表中查表.找到线性地址. ...因为GDT微软不使用.所以GDT表中的段首地址是0,所以 0 + 我们的偏移,找到线性地址. 图中(linAddr)  3.而后线性地址,拆分成索引.去查询页目录表. ...段选择子去GDT查表.加上我们的虚拟地址就是物理地址. 而是否开启分页保护,就是修改CR0的标志位.上一篇已经讲过了....实战演练: 查询GDT虚拟地址的物理地址. 1.获取GDT的虚拟地址, 获取CR3的值.

42111

Linux从头学06:16张结构图,彻底理解【代码重定位】的底层原理

程序的结构 bootloader 把程序从硬盘读取到内存 代码重定位 程序入口点重定位 段表重定位 跳转到程序的入口地址 操作系统程序的执行 在上一篇文章中Linux从头学05-系统启动过程中的几个神秘地址...还记得之前介绍过的 Linux 系统中使用的 ELF 文件格式吗?...Linux系统中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来探索 那篇文章把一个典型的 Linux ELF 格式的可执行文件彻底拆解了一遍,可以看到,在 ELF 文件的头部信息中,详细描述了文件中每一部分内容...在以后学习到 Linux 中的重定位相关知识时,会接触到更多的概念和技巧,但是最底层的基本原理都是相通的。 希望这篇文章,能够成为你前进路上的垫脚石!

72740
领券