GDT、LDT、IDTR、TR
1、现在内存管理系统都是基于页式管理的, 段式管理说白了可有可无, 那是Intel老古董阶段留下来的遗毒, 以至于Intel的硬件构架白白地复杂了. Linux kernel直接让段式管理透明.
2.全局描述符表GDT(Global Descriptor Table)在整个系统中,全局描述符表GDT只有一张(一个处理器对应一个GDT),GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址,程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令将GDT的入口地址装入此寄存器,从此以后,CPU就根据此寄存器中的内容作为GDT的入口来访问GDT了。GDTR中存放的是GDT在内存中的基地址和其表长界限。
基地址指定GDT表中字节0在线性地址空间中的地址,表长度指明GDT表的字节长度值。指令LGDT和SGDT分别用于加载和保存GDTR寄存器的内容。在机器刚加电或处理器复位后,基地址被默认地设置为0,而长度值被设置成0xFFFF。在保护模式初始化过程中必须给GDTR加载一个新值。
3、局部描述符表LDT(Local Descriptor Table)局部描述符表可以有若干张,每个任务可以有一张。我们可以这样理解GDT和LDT:GDT为一级描述符表,LDT为二级描述符表。LDT和GDT从本质上说是相同的,只是LDT嵌套在GDT之中。LDTR记录局部描述符表的起始位置,与GDTR不同,LDTR的内容是一个段选择子。由于LDT本身同样是一段内存,也是一个段,所以它也有个描述符描述它,这个描述符就存储在GDT中,对应这个表述符也会有一个选择子,LDTR装载的就是这样一个选择子。LDTR可以在程序中随时改变,通过使用lldt指令
由于每个进程都有自己的一套程序段、数据段、堆栈段,有了局部描述符表则可以将每个进程的程序段、数据段、堆栈段封装在一起,只要改变LDTR就可以实现对不同进程的段进行访问。
当进行任务切换时,处理器会把新任务LDT的段选择符和段描述符自动地加载进LDTR中。在机器加电或处理器复位后,段选择符和基地址被默认地设置为0,而段长度被设置成0xFFFF。
除了GDTR、LDTR外还有IDTR和TR
(1)中断描述符表寄存器IDTR
与GDTR的作用类似,IDTR寄存器用于存放中断描述符表IDT的32位线性基地址和16位表长度值。指令LIDT和SIDT分别用于加载和保存IDTR寄存器的内容。在机器刚加电或处理器复位后,基地址被默认地设置为0,而长度值被设置成0xFFFF。
(2)任务寄存器TR
TR用于寻址一个特殊的任务状态段(Task State Segment,TSS)。TSS中包含着当前执行任务的重要信息。
TR寄存器用于存放当前任务TSS段的16位段选择符、32位基地址、16位段长度和描述符属性值。它引用GDT表中的一个TSS类型的描述符。指令LTR和STR分别用于加载和保存TR寄存器的段选择符部分。当使用LTR指令把选择符加载进任务寄存器时,TSS描述符中的段基地址、段限长度以及描述符属性会被自动加载到任务寄存器中。当执行任务切换时,处理器会把新任务的TSS的段选择符和段描述符自动加载进任务寄存器TR中。
GDT、LDT、IDTR、TR相关推荐
- GDT、GDTR、LDT、LDTR的学习
GDT的由来: 在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table). 为什么要有GDT?我们首先考虑一下在Real Mode下的 ...
- 两张图看懂GDT、GDTR、LDT、LDTR的关系
段选择器:32位汇编中16位段寄存器(CS.DS.ES.SS.FS.GS)中不再存放段基址,而 是段描述符在段描述符表中的索引值,D3-D15位是索引值,D0-D1位是优先级(RPL)用于特权检查,D ...
- GDT、GDTR、LDT、LDTR的理解
GDT是全局描述附表,主要存放操作系统和各任务公用的描述符,如公用的数据和代码段描述符.各任务的TSS描述符和LDT描述符.(TSS是任务状态段,存放各个任务私有运行状态信息描述符) LDT是局部描述 ...
- GDT、GDTR、LDT、LDTR的理解 [zz]
GDT是全局描述附表,主要存放操作系统和各任务公用的描述符,如公用的数据和代码段描述符.各任务的TSS描述符和LDT描述符.(TSS是任务状态段,存放各个任务私有运行状态信息描述符) LDT是局部描述 ...
- 个人对GDT、GDTR、LDT、LDTR的理解
作者:lianxi1999 来源:http://hi.baidu.com/lianxi1999 GDT是全局描述附表,主要存放操作系统和各任务公用的描述符,如公用的数据和代码段描述符.各 ...
- 【2021.03.10】段描述符与段选择子、GDT、LDT
要点回顾 前文提到,当写入一个段寄存器的时候,只给了一个16位的数值,但是段寄存器有96位. 那么剩下的80位从哪里来的?这个16位的数值是随便写的吗? Windbg指令 指令 功能 r 查看寄存器 ...
- [书]x86汇编语言:从实模式到保护模式 -- 第14章 任务和特权级保护,调用门、LDT、TSS、TCB
# 加载用户程序 Part 1.TCB, Task Control Block, 任务控制块 分配内存作为该任务的TCB,并插入至TCB链表. Part 2.LDT, Locak Descriptor ...
- 带你了解GDT陶瓷气体放电管的类型、优势、特性以及工作原理
GDT陶瓷气体放电管,主要应用于一些计算机数据系统.通讯信号端口.以及对雷击浪涌防护有需求的电子设备.那么,对于它的类型.优势.特性以及工作原理,你了解过吗?接下来,就由优恩半导体小编给大家简单介绍一 ...
- 四,中断:中断程序(汇编和C语言)、idt、IDTR、8259A、8253以及发生中断时候的压栈细节和特权级保护
中断: 由于CPU获知了计算机中发生的某些事,CPU暂停正在执行的程序,转而去执行处理该事件的程序,当这段程序执行完毕后,CPU继续执行刚才的程序,整个过程称为中断处理,也称为中断.没有中断,操作系统 ...
- Linux中断技术、门描述符、IDT(中断描述符表)、异常控制技术总结归类
相关学习资料 <深入理解计算机系统(原书第2版)>.pdf http://zh.wikipedia.org/zh/%E4%B8%AD%E6%96%B7 独辟蹊径品内核:Linux内核源代码 ...
最新文章
- 在网页中动态的生成一个gif图片
- 【iCore4 双核心板_ARM】例程十七:USB_MSC实验——读/写U盘(大容量存储器)
- 优秀架构师养成记:我是如何逆袭走向“人生巅峰”的?
- C++中构造函数和析构函数的调用顺序
- C#通过Outlook发送邮件
- Redhat 打开防火墙某个端口
- drupal linux安装,在Debian 10(Buster) Linux服务器中安装drupal 8.8.0的说明
- 4690s i5_秒杀i7?小恶魔i5-4690K对决i7-4770K
- whitelabel error page什么意思_什么是RESTful API?总算能说清楚了
- cad高程如何提取到cass软件_从CAD平面图中提取坐标生成数据表
- 三次技术转型,程序员的北漂奋斗史
- 中小企业IT建设的小看法2
- NFC Reader Tool 蓝牙NFC读写器使用教学
- alsa设置默认声卡
- 诺瓦科技2022数字IC设计提前批笔试
- A12 屏幕旋转流程
- 【收藏防丢】rar压缩包忘记密码怎么办?手把手教你轻松解决
- 《卓有成效的管理者(The Effective Executive)》读后感
- 计算机网络复习笔记 之协议相关
- pytorch第四课