32位机内存管理(下)
来源:互联网 发布:苏联芬兰战争知乎 编辑:程序博客网 时间:2024/06/02 17:16
既然这样,段描述符表放在那里呢?80386中引入了两个新的寄存器来管理描述符表。一个是48位的全局描述符表寄存器GDTR,一个是16位的局部描述符表寄存器LDTR。那么,为什么有两个描述符表寄存器呢?
GDTR指向的描述符表为全局描述符表GDT。它包含操作系统中所有任务都可用的段描述符,通常包含描述操作系统所使用的代码段、数据段、堆栈段的描述符及各任务的LDT段等,全局描述符表只有一个。
LDTR则指向局部描述符表LDT。80386处理器设计成每个任务都有一个独立的LDT。它包含有每个任务私有的代码段、数据段、堆栈段的描述符,也包含该任务所使用的一些门描述符。
不同任务的局部描述符表分别组成不同的内存段,描述这些内存段的描述符当做系统描述符放在全局描述符表中。和GDTR直接指向内存地址不同,LDTR和CS,DS等段选择器一样只存放索引,指向局部描述符表内存段对应的描述符在全局描述符表中的位置。随着任务的切换,只要改变LDTR的值,系统当前的局部描述符表LDT也随之切换,这样便于各任务之间数据的隔离,但GDT并不随着人物的切换而切换。
看到这里,可能会有一个问题,既然有全局描述符表和局部描述符表两个表,那么段选择器中的索引对应哪个表中的描述符呢?实际上16位的段选择器中只有高13位表示索引值,剩下的3个数据位中,第0,1位表示程序的当前优先级RPL,第二位TI用来表示在段描述符表的位置,TI=0在GDT中,TI=1在LDT中。
啥都不说了,一张图足以:
注:GDTR指向GDT表位置,LDTR本质上也指向LDT表位置,不过并不是直接给出LDT位置,而是借助GDT表间接给出位置。LDTR中的选择符指向GDT中的某项,而GDT表中存有LDT表的偏移值,这样再根据cs中的选择符在LDT中找到具体项。
- 32位机内存管理(下)
- 内存管理(X86-32位系统)
- 内存管理(下)
- windows下32位汇编语言学习笔记 第十章 内存管理部分 1
- windows下32位汇编语言学习笔记 第十章 内存管理部分 2
- windows游戏编程<四>X86 32位保护模式下的内存管理概述(一)
- windows游戏编程<六>X86 32位保护模式下的内存管理概述(二)
- 【内存管理】Fork(下)
- linux内存管理(下)
- Linux内存管理(下)
- linux内存管理(下)
- Linux内存管理(下)
- windows系统下绿色版tomcat加内存方法(32位操作系统与64位操作系统)
- 内存管理-高端内存(下)
- 章五.Windows内存管理(下)
- linux下内存管理学习心得(一)
- linux下内存管理学习心得(二)
- 原iOS中的内存管理(下)
- 删除windows服务 cygwin sshd
- 云计算
- 跨Linux和Windows的C编程杂记
- android控件篇:ViewPager+Fragment+GridView的使用(与AndroidQuery框架结合)
- HDU1134,HDU1261 大数
- 32位机内存管理(下)
- 【C/C++多线程编程之七】pthread信号量
- One-hot编码:Python sklearn CTR实验
- nyoj 634 万里挑一
- Codeforces Round #244 (Div. 2)
- 刷机是什么意思?
- Java高级视频_IO输入与输出(一)
- HDU_2043密码
- error: expected declaration or statement at end of input----solved