6.Linux内存管理-内存寻址.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.Linux内存管理-内存寻址

内存寻址 主要内容 内存寻址/内存地址 硬件及Linux的分段机制 硬件及Linux的分页机制 内存寻址的一般过程 虚实转换 内存地址 Intel x86处理器的地址形式 逻辑地址:每个逻辑地址由一个段(segment)和偏移量(offset)组成 线性地址:32位无符号整数,可以表示4G的地址空间 物理地址:用于芯片级内存单元寻址,与从CPU的地址引脚发送到内存总线上的电信号相对应 地址转换过程 内存控制单元(MMU)通过分段单元(segmentation unit)将逻辑地址转换成线性地址 分页单元(paging unit)将线性地址转换成一个物理地址 主要内容 内存寻址/内存地址 硬件及Linux的分段机制 硬件及Linux的分页机制 段机制 是形成逻辑地址到线性地址转换的基础 基地址(Base Address):在线性地址空间中段的起始地址 界限(Limit):逻辑地址中段内的最大偏移量 段的属性(Attribute): 表示段的特性 段描述符 每个段由一个8个字节的段描述符来表示 指出段的32位基地址(base字段)和20位段界限(limit字段) 第6个字节 G位:段界限粒度位,只对段界限有效 当G=0时,表示段格式以字节长度 当G=1时,表示段格式以4K字节为单位 D位:特殊位 段描述符—D位说明 描述代码段:决定指令地址及操作数的默认大小 D=1:指令使用32位地址及32位或8位操作数 D=0:指令使用16位地址及16位或8位操作数 向下扩展数据段:决定段的上部边界 D=1:段的上部界限为4G D=0:段的上部界限为64K SS寄存器寻址的段(通常是堆栈段):决定隐式的堆栈访问指令(如PUSH和POP指令)使用何种堆栈指针寄存器 D=1:使用32位堆栈指针寄存器ESP D=0:使用16位堆栈指针寄存器SP 存取权字节 定义位置 第5个字节 段描述符的存取权字节说明 位说明 P字段(1位):存在标志 0表示该段当前不在内存中,1表示该段当前在内存中 DPL字段( 2位):段的特权级描述字段 CPL=00b:只能被内核代码段访问 CPL=11b:可以被任意代码段访问 S字段(1位):系统段标志 0:系统段 1:普通段 Type字段(3位):类型字段,表示代码段、数据段等 A字段(1位):描述符是否被访问过 A=0:尚未被访问 A=1:已被访问 说明 当把描述符的相应选择子装入到段寄存器时,80386把该位置为1,表明描述符已被访问。操作系统可测试访问位,已确定描述符是否被访问过 数据段描述符说明 Type字段中的E=0 第2位:扩展方向位ED ED=0:向地址增大的方向扩展,段内偏移必须小于等于段界限 ED=1:向地址减少的方向扩展,段内偏移必须大于段界限 第1位:读写位W W=0:数据段不可写 W=1:数据段可写入 说明 在80386中,堆栈段也被看成数据段,其本质上是特殊的数据段 描述堆栈段,ED=0,W=1,即堆栈段朝地址增大的方向扩展 代码段描述符说明 Type字段中的E=1 第2位:一致位C C=1:一致代码段(支持代码共享),当转移的目标是一个特权级更高的一致代码段,当前的特权级会被延续下去 C=0:普通代码段 第1位:可读位R R=0:代码段不能读 R=1:可读 系统段描述符 第5个字节的第4位为0,说明是系统段描述符 类型占4位,没有A位 第六个字节的第六位为0 说明系统段的长度是字节粒度,一个系统段的最大长度为1M(220)字节 系统段描述符 系统段类型:16种 各种段描述符结构 段描述符表 定义i386所有段的情况,所有描述符表本身都占据一个字节为8的倍数的存储器空间 分类 全局描述符表GDT (Global Description Table) 除任务门、中断门和陷阱门描述符外,包含着系统中所有任务共用段的描述符 存放在RAM中,使用一个专门的寄存器GDTR指示GDT表在RAM中的位置(物理起始地址) 局部描述符表LDT(Local Description Table) 包含与给定任务有关的描述符 存放在RAM中,使用LDTR来指示当前的LDT表 X86的段描述符设置 通常只定义一个GDT 每个进程除存放在GDT中的段之外,还可以根据需要创建附加的LDT Intel x86中的段描述符分类 数据段描述符(DSD) 描述各种用户数据段和堆栈段,可以放在GDT或LDT中 代码段描述符(CSD) 描述一个用户代码段,可以放在GDT或LDT中 任务状态段描述符(TSSD) 描述一个任务的状态段,用于保存处理器寄存器的内容,只出现在GTD中 局部描述符表描述符(LDTD) 描述一个LDT段,只出现在GDT中 系统段描述符(SSD) Intel微处理器的地址转换方式 实模式(20位) 1

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档