gdt描述_GDT全局描述符表
GDT全局描述符表
什么是GDT全局描述符表
GDT全称为Global Descriptor Table,全局描述符表。
保护模式的寻址方式不在使用寄存器分段的方式直接寻址方式了。而采用的是使用GDT(全局分段描述表)来寻址。从而使用更多的内存地址。
创建GDT全局描述符表使用到一个48位的寄存器:GDTR寄存器。
1)首先,在内存中划分一些内存段,并且每个内存段赋予一个索引。
2)然后,使用lgdt指令,设置GDT的索引和表信息的内存地址到GDTR寄存器。
3)进入保护模式,指令跳转,从实模式分段方式寻址切换到使用GDT分段方式寻址。
GDT可以被放在内存的任何地方,只要提供内存地址给GDTR寄存器就可以了。
GDT格式
GDT全局描述符表
表基地址,表基地址位GDT段表在内存的地址,GDT段表是一个列表,存储了多个 GDT段描述符。
表界限:GDT段表的空间信息,以字节为单位。
GDT全局描述符表 = GDT段表基地址 | 16位表界限
GDT段表 = GDT段描述符 | GDT段描述符 | GDT段描述符 ...
表界限 = GDT字节数 - 1 (表示 0 - 0x...)
GDT段描述符
GDT段描述符,用来描述在GDT方式在内存中分配的一个段信息,总共8字节64位。
GDT段描述符结构
为了兼容以前的CPU,GDT段描述符的信息被分割成几个部分,格式如下:
GDT段描述符 =
段基址 (8位)| 段描述符(4位) | 段界限(4位) | 段描述符(8位) 段基址 (8位)
段基址 (16位) | 段界限(16位)
段描述符定义
段基址:规定段的起始地址,长度32位.
段界限:规定段的大小,长度20位。段界限可以是以4KB或者1B为单元大小
段属性:确定段的各种性质.长度(12位)
段属性:
G 粒度位: 段界限的单位大小,G=1表示段界限以4KB为单元单位,G=0表示段界限以1B为单元单位
D/B 表示操作数为多少位, 0表示16位操作数,1表示32位操作数
L : 0 表示非64位代码段,1表示64位代码段
AVL :可用字段,暂时没什么用
P 段存在位:通常为1,表示段存在于内存中,0则此段为非法的,不能被用来实现地址转换
DPL 特权级(2位): 用来实现保护机制
S 为0表示系统段,为1表示非系统段
type 类型(4位): 用于区别不同类型的描述符。内存段或者门的子类型
type值
Type位
说明
取值
代码段时
X:3位
代码段值为1
0:为数据段
1:为代码段
C:2位
访问位
0:为普通段
1:为一致码段
R:1位
是否可读
0:只执行
1:可读
A:0位
访问位. 该段是否被访问过
0 :未访问
1:已访问
数据段时
X:3位
数据段值为1
0:为数据段
1:为代码段
E:2位
扩展方向
0:向高位扩展
1:向低位扩展
W:1位
是否可写
0:只读
1:可写
A:0位
访问位
0: 未访问
1:已访问
段界限:
段界限边界值 = (描述符的段界限值 + 1) × (段界限颗粒读:4Kb 或者 1b) -1
反之:
描述符的段界限值 = (段界限边界值 + 1) /(段界限颗粒读:4Kb 或者 1b)
例如:
16MB的段界限值 = 0x1000000 /(段界限颗粒读:4Kb 或者 1b - 1)= 0x0fff
段选择子
段选择子包括三部分:描述符索引(index)、TI、请求特权级(RPL)
GDTR寄存器
在内存中建立完成GDT信息后,CPU会将GDT的内存地址 和 段界限 数据加载入GDTR寄存器
GDTR寄存器数据(48位):
GDTR定义数据(48位) = GDT全局描述符表的大小(16位) + GDT全局描述符表的地址(32位)
lgdt指令
lgdt GDTR定义数据
其中GDT全局描述符表数据格式如下
GDT全局描述符表 = GDT段描述符(64位) | GDT段描述符(64位) | GDT段描述符(64位) ...
GDT段描述符 = 段基址 (8位)| 段描述符(4位) | 段界限(4位) | 段描述符(8位) | 段基址 (8位) | 段基址 (16位) | 段界限(16位)
其中,第一个GDT段的数据为空。
gdt描述_GDT全局描述符表相关推荐
- gdt描述_全局描述符表GDT
写在前面 添油加醋系列第二弹--剖析GDT 话说C语言的话除了刷刷OJ外,就是用来实现操作系统这个大头了.C语言比C++少了很多很多臃肿的语法特性,写起来非常优美(至少写操作系统是这样的).虽说C++ ...
- gdt描述_全局描述符表(GDT)局部描述符表(LDT)
这三个表是在内存中由操作系统或系统程序员所建,并不是固化在哪里,所以从理论上是可以被读写的.这三个表都是描述符表.描述符表是由若干个描述符组成,每个描述符占用8个字节的内存空间,每个描述符表内最多可以 ...
- gdt描述_全局描述符表(GDT)详解
在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table). 为什么要有GDT Real Mode编程模型 我们首先考虑一下在Real ...
- gdt描述_GDT详解(全局描述符表)
GDT详解(全局描述符表) 作者:admin 日期:2009-10-21 字体大小: 小 中 大 在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descrip ...
- gdt描述_GDT,LDT,GDTR,LDTR 详解,包你理解透彻 | 技术部落
一.引入 保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成 段描述符寄存器: 存储段描述符 选择器:存储段描述符的索引 段寄存器 PS:原先实模式下的各个段寄存器作为保护模式 ...
- gdt描述_GDT(Global Descriptor Table)全局描述符表
在IA32下,CPU有两种工作方式:实模式和保护模式.当我们按下开机按钮以后,CPU是工作在实模式下的,经过某种机制以后才进入保护模式. Intel 8086是16为的CPU,有16为的寄存器.16位 ...
- gdt描述_GDT描述符表
一直以来,在直流电源端口的雷击保护器件的选型方面,人们会选择压敏电阻MOV,但是,由于压敏电阻MOV在失效时会引起火灾,而选择常规气体放电管GDT又会带来续流问题,因此,结合压敏电阻和气体放电管两种器 ...
- gdt描述_GDT表与段描述符
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html GDT表与段描述符 一.介绍 如果之前学习过"实模式&q ...
- gdt描述_GDT解释
<自己动手写操作系统>是本很有意思的书.不过于渊前辈对某些内容没有给出更多的解释,让我们这些新米很难上手. 书中第3章介绍保护模式的时候,题到了GDT这个东东.在这里给出一个更浅显的介绍. ...
最新文章
- ASP.Net中自定义Http处理及应用之HttpModule篇
- extjs 中iframe内存泄漏的问题
- 在对抗网络威胁时,数据保护是企业首要任务
- 电脑服务器注册表,电脑注册表怎么清理 服务器安全狗清理注册表教程
- 我从大厂面试中学到的关于 C# 的知识
- 男人“杀”死女人的30句话
- 物联网大数据平台软件开发架构案例解析
- 蓝桥杯2015年第六届C/C++省赛A组第七题-手链样式
- ai人工智能_AI破坏已经开始
- 【VS】错误1error LNK1168: 无法打开 F:\C++6\prob\ConsoleApplication1\Debug\ConsoleApplication1.exe 进行写入
- for循环,for循环嵌套
- 使用ntsd命令强制性杀掉进程[微软未开公的密秘]
- pycharm怎么安装pygame_Python实战:运用Pygame编写Flappy bird小游戏,我能玩一天
- Tensorflow图像处理相关操作
- 硬件参数 调整 麦克风MIC灵敏度 原理
- 洛谷 P1008三连击 C语言
- 2.AZ900资源汇总
- TouchID 指纹登录
- 商务网站建设与维护【14】
- 测试点击屏幕次数的软件_无需越狱,iOS 任意摆放主屏幕软件图标方法
热门文章
- VSCode Python解决 No module named 问题
- 问题:anaconda 中 tensorflow 与tensorflow-gpu 在tf.image.resize_images()上的区别
- java集合的方法及使用详解
- Springboot使用Filter以及踩过的坑
- 【题解】CF#403 D-Beautiful Pairs of Numbers
- C#中英文逗号之间的相互转化
- 如何从 Windows 虚拟机分离数据磁盘
- 从零开始学 Java - Spring AOP 拦截器的基本实现
- javascript 类的创建1
- python-函数之命名空间作用域