本系列文章由jadeshu编写,转载请注明出处。http://blog.csdn.net/jadeshu/article/details/22446971

作者:jadeshu   邮箱: jadeshu@qq.com    欢迎邮件交流

分段机制

•分段提供了隔绝各个代码、数据和堆栈区域的机制,因此多个程序(或任务)可以运行在同一个处理器上而不会互相干扰。
•在内存分段系统中,一个程序的逻辑地址通过分段机制自动地映射到中间层的4GB(232B)线性地址空间中。程序每次对内存的引用都是对内存段中内存的引用。当程序引用一个内存地址时,通过把相应的段基址加到程序员看得见的逻辑地址上就形成了一个对应的线性地址。此时若没有启用分页机制,则该线性地址就被送到CPU的外部地址总线上,用于直接寻址对应的物理内存

段描述符
•段描述符,是由操作系统定义的、位于存储器内的一种数据结构,段描述符内保存着供处理机使用的有关段的属性、大小规模、段在存储器中的位置及控制和状态信息,段描述符在存储器中的一个段和一个任务之间形成了一个链。它是一种特殊的段,不管是全局地址空间还是局部地址空间中的一个段,如果没有描述符,则对该段任务来说便无效,且没有访问它的机制。一般说来,各段描述符是由各种编译程序、各种连接程序、各种装入程序或者操作系统产生的,而不是由各种应用程序生成的
•描述符分为段描述符和门描述符两大类。段描述符又分成两类:一般的段描述符(也称存储段描述符,包括代码段描述符和数据段描述符)和特殊的段描述符(又称系统段描述符,包括局部描述符表LDT 描述符和任务状态段TSS描述符等)。门描述符包括调用门描述符、任务门描述符、中断门描述符和陷阱门描述符4 种,当特权级之间和任务之间进行转移控制时,使用这些门描述符。各种类型段使用的段描述符只能是其中一种。
•段描述符由8个字节即64位表示

段描述符格式

段描述符位解释
P,present位,1表示所描述的段存在(有效),为0表示所描述的段无效,使用该描述符会引起异常 

DPL,Descriptor privilege,描述符特权级别,说明所描述段的特权级别 

DT,描述符类型位,1说明当前描述符为存储段描述符,0为系统描述符或门描述符. 


TYPE: 
位0:A(accessed)位,表明描述符是否已被访问;把选择子装入段寄存器时,该位被标记为1 

位3:E(EXECUTABLE?)位,0说明所描述段为数据段;1为可执行段(代码段) 


当为数据段时
   位1为W位,说明该数据段是否可写(0只读,1可写) 

   位2为ED位,说明该段的扩展方向(0向高位扩展,1向低位扩展) 

当为可执行段是, 

   位1为R位,说明该执行段是否可读(0只执行,1可读) 

   位2为C位,0说明该段不是一致码段(普通代码段),1为一致码段 


G为粒度位,0说明LIMIT粒度为字节,14K字节.D
   1.在可执行段中,D为1,表示使用32位地址,32/8位操作数;为0表示使用16位地址,16/8位操作数 

   2.在由SS寻址的段描述符(堆栈段?)中,D为1表示隐含操作(如PUSH/POP)使用ESP为堆栈指针,/

     为0使用SP(隐含操作:未明确定义段属性类型USE16/USE32?66H,67H?) 

   3.在向低扩展的存储段中,D为1,表示段的上限为4G;为0上限为64K

段描述符表
•段描述符形成段描述符表(可以理解为数组)
•段描述符表简称描述符表,用来存储保护方式下段描述符的一个阵列。80386/80486 CPU 共有3 种描述符表:全局描述符表GDT、局部描述符表LDT 和中断描述符表IDT。描述符表由描述符顺序排列组成,占一定的内存,由系统地址寄存器(GDTR 、LDTR、IDTR) 指示其在物理存储器中的位置和大小。
•全局描述符表GDT 是供所有任务使用的描述符表,在物理存储器地址空间中定义全局描述符表GDT。通常操作系统使用的有代码段描述符、数据段描述符、调用门描述符、各个任务的LDT 描述符、任务状态段TSS 描述符、任务门描述符等。
•局部描述符表LDT 是每一项任务运行时都要使用的描述符表。在多任务操作系统管理下,每个任务通常包含两部分:与其他任务共用的部分及本任务独有的部分。与其他任务共用部分的段描述符存储在全局描述符表GDT内;本任务独有部分的段描述符存储在本任务的局部描述符表LDT 内。这样,每个任务都有一个局部描述符表LDT,而每个LDT 表又是一个段,它也就必须有一个对应的LDT 描述符。该LDT 描述符存储在全局描述符表中。局部描述符表LDT 中所存储的属于本任务的段描述符通常有代码段描述符、数据段描述符、调用门描述符及任务门描述符等。

段寄存器构成
保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符构成

段描述符: 存储段描述符

选择器:存储段描述符的索引


内存管理寄存器
处理器提供了4个内存管理寄存器(GDTR、LDTR、IDTR和TR),用于指定内存分段管理所用系统表的基地址



描述符表寄存器
微处理机用全局描述符表寄存器GDTR 、局部描述符表寄存器LDTR 和中断描述符表寄存器IDTR,来查找全局描述符表GDT、局部描述符表LDT 和中断描述符表IDT, 如图 所示。



全局描述符表
•在全局描述符表寄存器GDTR 内,保存着全局描述符表在物理地址空间内的32 位的基地址,同时全局描述符表寄存器GDTR 中,还保存表明这个表的规模大小为16 位的界限值,16 位段界限表明GDT 表最长为216KB(64KB) 。
•【例】 (GDTR)=0010 0000 0FFFH ,求GDT 在物理存储器中的起始地址,结束地址,表的大小,表中可以存放多少个描述符?
•解:
GDT 的起始地址为0010 0000H
结束地址为:0010 0000H+0FFFH=0010 0FFFH
表的大小为:0FFFH+1=4096 字节
表中可以存放:4096/8=512 个描述符

局部描述符表
局部描述符表寄存器LDTR 包含一个16 位的选择器(63 位~48 位)和不可见的高速缓存器(47 位~0 位)。不可见的高速缓存器内保存着局部描述符表LDT 的基地址、它的界限以及访问控制权。对正在运行的任务而言,每一项任务运行时都要使用局部描述符表LDT, 它们存储在存储器的一个独立的段里。但每个LDT 处于存储器中的地址如图8.9 所示,用局部描述符表指令LLDT 对局部描述符表寄存器LDTR 内的选择符进行读操作,用保存在局部描述符寄存器内的16 位的选择符识别GDT,从GDT 中检索出相应的LDT 描述符,处理器便将局部描述符自动置入LDTR 的高速缓存器中,将该描述符装入高速缓冲寄存器就为当前任务创建了一个LDT。这样80386/486 微处理器便可以根据LDTR 高速缓存器的值来确定局部描述符表的起始地址和段界限,而不必再访问存储器从GDT 中查出LDT 描述符,直接从LDTR 高速缓存器来确定局部描述符表的起始地址和段界限,节省了程序运行时间。

当T1为0时来计算线性地址


地址之间转换参考图



地址之间转换参考图2


windows游戏编程X86 (内存)寄存器相关的基本概念的更多相关文章

  1. windows游戏编程X86 32位保护模式下的内存管理概述(二)

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22448323 作者:jadeshu   邮箱: jades ...

  2. windows游戏编程X86 32位保护模式下的内存管理概述(一)

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22445945 作者:jadeshu   邮箱: jades ...

  3. windows游戏编程X86实模式和保护模式

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22309359 作者:jadeshu   邮箱: jades ...

  4. Windows游戏编程之从零开始d

    Windows游戏编程之从零开始d I'm back~~恩,几个月不见,大家还好吗? 这段时间真的好多童鞋在博客里留言说或者发邮件说浅墨你回来继续更新博客吧. woxiangnifrr童鞋说每天都在来 ...

  5. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记5——Direct3D中的顶点缓存和索引缓存

    第12章 Direct3D绘制基础 1. 顶点缓存 计算机所描绘的3D图形是通过多边形网格来构成的,网网格勾勒出轮廓,然后在网格轮廓的表面上贴上相应的图片,这样就构成了一个3D模型.三角形网格是构建物 ...

  6. windows游戏编程 创建WIN32一个HelloWOrld程序

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22449085 作者:jadeshu   邮箱: jades ...

  7. windows游戏编程 绘图基础

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22451353 作者:jadeshu   邮箱: jades ...

  8. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记3——输入消息处理,物理建模与粒子系统初步

    第7章 Windows游戏输入消息处理 1. 键盘消息处理 之前提到的窗口过程函数有两参数与消息输出有关——wParam和llParam LRESULT CALLBACK WindowProc( _I ...

  9. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记2——透明贴图,动画技术

    第5章 透明贴图 像这样直接贴图会产生这种情况,所以我们需要透明贴图. 透明遮罩法:主要利用BitBlt函数中Raser(光栅)值的运算,需要准备素材图和遮罩图: 这个方法的原理解释见书131页. 示 ...

随机推荐

  1. C# DataContractJsonSerializer

    DataContractJsonSerializer dataSerializer = new DataContractJsonSerializer(request.getBizContentClas ...

  2. 解析Illumina+PacBio组装策略

    解析Illumina+PacBio组装策略 (2016-12-08 13:21:58) 转载▼     基于Illumina和PacBio平台的“二加三”组装策略,巧妙的融合了PacBio平台超长读长 ...

  3. 【多进程】php多进程编程

    先看下我已经安装的php版本 PHP (cli) (built: Jul ::) ( NTS ) Copyright (c) - The PHP Group Zend Engine v3.- Zend ...

  4. HttpResponse与JasonResponse

    两者的含义 我们都知道后台给前台返回的数据都是字符串类型,那么怎么返回成为一个问题 HttpResponse与JasonResponse都是django中后台给前台返回数据的方法, 并且他们最后走的都 ...

  5. nginx 反向代理的配置

    nginx中的每个server就是一个反向代理配置,可以有多个server(nginx只能处理静态资源) nginx中 server的配置 server { listen 80; server_nam ...

  6. 转:基于Maven管理的JavaWeb项目目录结构参考

    通常在创建JavaWeb项目时多多少少都会遵循一些既定的比较通用的目录结构,下面分享一张基于Maven管理的JavaWeb项目目录结构参考图: 上图仅是参考,不同项目不同团队都有自己的约定和规范. 个 ...

  7. Computer Vision_33_SIFT:Distinctive Image Features from Scale-Invariant Keypoints——2004

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  8. 315 · Istio1.1 功能预告,真的假不了

    Istio 1.0版本发布到现在,已经过去8个月.Istio1.1的候选版本也到了rc5,预计近期会正式发布1.1.此版本包含了许多错误修复,在流量管理,安全,策略和遥测,多集群等领域添加了新的功能. ...

  9. Apache Maven setting.xml

    <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...

  10. Spark(三)角色和搭建

    目录 Spark(三)角色和搭建 一.Spark集群角色介绍 二.集群的搭建 三.history服务 四.使用spark-submit进行计算Pi 五.Spark On Yarn 六.shell脚本 ...