32位机内存管理(下)

既然这样,段描述符表放在那里呢?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中。

啥都不说了,一张图足以:

32位机内存管理(下),布布扣,bubuko.com

时间: 2024-10-27 19:45:09

32位机内存管理(下)的相关文章

32位机内存管理机制(上)

一直有看linux内核的冲动,内核有些部分是汇编编写的,无奈汇编不大懂,所以利用五一三天假期大概走了一边8086CPU架构的汇编,8086CPU还是16位的,我们现在都进入64位时代了,这两者之间有很大的区别,但是看看16位的CPU汇编还是很重要的,这有助于理解32位的80386CPU.这篇文章来分析下80386的内存管理的一些基础知识,包括实模式.保护模式和内存寻址等等. 1.实模式 处理器被复位或者加电的时候以实模式启动.这时候处理器中各寄存器以实模式的初始化值工作. 80386处理器在实模

x86 32位机的特权保护

优先级划分.指令的权限检查和超出权限访问的异常处理等是构成特权保护的基础.本文将试图讲解为大家解决两大问题: --win32汇编中为什么找不到中断指令的应用?比如int 7ch --windows错误的'蓝屏'是从哪里来的? 保护模式下,中断或异常往往从用户代码切换到操作系统代码中执行.由于保护模式下的代码有优先级之分,因此出现从优先级低的应用程序转移到优先级高的系统代码的问题,如果优先级低的代码能够任意调用优先级高的代码,就相当于了拥有了高优先级代码的权限.为了使高优先级代码能够安全的被低优先

为什么有的程序在64位机上跑反而比32位机更慢

最近工作遇到了一个问题,原本在32位Android机上跑的好好的程序,在某些64位机上却变慢了许多.感觉很奇怪,所以google了一下原因,网上给出的原因大部分是过多使用指针.可是为什么过多使用指针就会造成程序变慢呢?结合网上的资料,和自己的理解,我认为是如下原因造成的: (1)因为64位比32位的指针大了一倍,寻址空间从2^32大幅上升到2^64,但是这也带来了额外的问题.一个指针的存储空间也变成了原来的两倍,在做指针运算时,例如int*ptr,*(ptr+5),移动距离也变为了原来的两倍.

32位机与64位机数据大小

32位机与64位机数据大小 32位编译器: char :1个字节       char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节.同理64位编译器) short int : 2个字节 int:  4个字节 unsigned int : 4个字节 float:  4个字节 double:   8个字节 long:   4个字节 long long:  8个字节 unsigned long:  4个字节 64位编译器: char :1个字节 char*

32位机 64位机 32位操作系统 64位操作系统

32位机: 一般指的是32位的CPU就是说CUP一次能计算32位. 64位机: 一般指的是64位的CPU就是说CPU一次能计算64位. 32位操作系统: 为32位机而制作的.指的是操作系统的字长是32位的 ,也就间接的影响了地址总线,因此,最大寻址空间也就自然是2的32次方,4G.注意:32位操作系统只能安装再32位机子上. 64位操作系统: 为64位机而制作的.指的是操作系统的字长是64位的,也就间接的影响了地址空闲,因此最大寻址空间也就是2的64次方,128G.注意:64位操作系统可以安装在

c# 32位机和64位机 读取Excel内容到DataSet

// ----------------------32位机 //注释说明 //ExclePath 为Excel路径 批号 是指Excel文件中某一列必填项 public static DataSet GetDataTableForExcel(String ExclePath) { string strCon = String.Empty; strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExclePath + &qu

32位机和64位机的区别及基本数据类型占字节数

一)64位系统和32位有什么区别? 1.64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存 2.64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍.但这是建立在64bit操作系统,64bit软件的基础上的. 什么是64位处理器? 之所以叫做“64位处理器”,是因为电脑内部都是实行2进制运算,处理器(CPU)一次处理数据的能力也是2的倍数.8位处理器.16位处理器.32位处理器和64位处理器,其计数都是2的倍数.一次处理的数据越大,该电

x86(32位)分页管理的机制

页的尺寸是4KB,虚拟地址的前20位用于指定一个物理页,后12位用于访问页内偏移. 页表项的结构: 层次化的设计想法: 因为4GB的虚拟内存共有1M=220=1048576个4K大小的页面. 我们将这些页面分成210=1024份,即从页表1到页表1024,由页目录表管理: 每一份(每一页表)有210=1024个页,由每一个页表管理,页在页表中是随机的,哪个页位于哪个页表中是没有规律的: 处理器的页部件专门负责线性地址到物理地址的转换工作. 它首先将段部件送来的32位线性地址分为3段, 分别是高1

关于MVC4项目从32位机移到64位机编译报错解决方案

早上写了个MVC WEBAPI的demo 机子环境是:XP SP3+ VS2010 + ASP.NET MVC4 然后晚上拿回笔记本进行编译运行,结果报错如下: “/”应用程序中的服务器错误. 分析器错误 说明: 在分析向此请求提供服务所需资源时出错.请检查下列特定分析错误详细信息并适当地修改源文件. 分析器错误消息: 未能加载类型“EasyFactoryWeb.WebAPI.WebApiApplication”. 源错误: 行 1: <%@ Application Codebehind="