內存寻址.pptVIP

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
內存寻址

xlanchen@2007.6.11 Embedded Operating Systems 内存寻址 xlanchen@2007.6.11 在intelx86处理器下,有三种不同的地址 逻辑地址:每个逻辑地址由一个段(segment)和偏移量(offset)组成 线性地址:32位无符号整数,可以表示4G的地址空间 物理地址:用于芯片级内存单元寻址。它们与从CPU的地址引脚发送到内存总线上的电信号相对应 地址转换过程 为什么需要内存寻址机制? 保护内核不受恶意或者无意的破坏 隔离各个用户进程 方便程序的编写,使程序员可以抛开对物理内存的考虑,而且理论上可以使用任意大小的空间 硬件的分段单元(1) 段寄存器(segment register) I386体系结构采用分段机制 逻辑地址=段:段内偏移 使用段寄存器指明当前使用的段 16位的段寄存器,有六个:cs,ss,ds,es,fs和gs 其中3个寄存器CPU规定了专门的用途 cs 代码段寄存器,指向存放程序指令的段 ss 堆栈段寄存器,指向存放当前程序栈的段 ds 数据段寄存器,指向存放数据的段 在实模式中(20位) 段寄存器记录段基址的高16位 不采用虚拟地址空间,直接采用物理地址空间 物理地址=段寄存器值*16+段内偏移 在保护模式(32位) 采用基于分页技术的虚拟地址空间 段寄存器无法直接记录段的信息,因此需要与GDT表配合使用 GDT中记录了每个段的信息(段描述符),段寄存器只需记录段在GDT中的序号 注意:cs寄存器还有一个很重要的功能:它含有一个两位的域,用以指明CPU当前特权级(current privilege level, CPL),值为0代表最高优先级,值为3代表最低优先级 虚拟地址=段基地址+段内偏移 其中,段基地址是根据段寄存器所指明的GDT中的段描述符中的信息得到的 物理地址:根据页表对虚拟地址进行转换而得到 段描述符(segment descriptor) 每个段由一个段描述符来表示,一个段描述符长度为8个字节 全局描述符表(global description table, GDT)就用来存放段描述符 GDTR寄存器用来存放GDT的起始地址(物理地址) 段描述符的格式 段选择子 段寄存器中值称为段选择子,长度为16位 13位的索引,指定GDT表中的相应的段描述符 1位的TI(Table Indicator) (跟LDT表有关,Linux中基本未使用) 2位RPL(request privilege level) 当相应的段选择符装入到cs寄存器中时,表明了CPU的当前特权级(用户/内核) 段选择子的使用 逻辑地址到线性地址的转换 Linux中的段 基于下面两个原因,linux中只使用了几个段 段和页的同时存在在一定程度上有点多余。 因为两者都可以划分进程的物理空间 所有的进程希望使用同样的0-4G的逻辑空间。 这样程序员不必考虑进程地址的问题,也让内核的内存管理变得简单一些 Linux下的全局描述符表(部分) __KERNEL_CS 0x10=0000 0000 0001 0000b 内核代码段,在GDT中相应的段描述符各个域有如下值 __KERNEL_DS 0x18=0000 0000 0001 1000b 内核数据段,在GDT中相应的段描述符各个域有如下值 __USER_CS 用户代码段,用户态下所有进程共享 __USER_DS 用户数据段,用户态下所有进程共享 硬件的分页单元 分页单元把线性地址转换成物理地址 为了效率起见,线性地址被分成以固定长度为单位的组,称为页。 页内连续的线性地址被映射到连续的物理地址中。 把线性地址映射到物理地址的数据结构叫做页表(page table)。页表存放在内存中,并在启用分页单元以前由内核对之进行初始化 Intel处理器中,通过设置CR0寄存器的一个标志位来启用分页单元。 硬件的分页单元 区分一下页和页框的概念 一页指一系列的线性地址和包含于其中的数据 页框(page frame) 分页单元认为所有的RAM被分成了固定长度的页框 每个页框可以包含一页,也就是说一个页框的长度和一个页的长度是一样的 页框是内存的一部分,是一个实际的存储区域。而页只是一组数据块,可以存放在任何页框中 常规分页 从i386起,intel处理器的分页单元处理4KB的页 32位的线性地址被分成3个域 目录(directory) 最高的10位 页表(Table) 中间的10位 偏移量(offset) 最低的12位 线性地址的转换分两步完成,每一步都基于一种转换表 第一种称为页目录表(page directory) 第二种称为页表(page table) 正在使用的页目录表的物理地址存放在CPU的CR3寄存器中

文档评论(0)

1234554321 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档