Linux操作系统分析-内存寻址.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
注意:cs寄存器还有一个很重要的功能:它含有一个两位的域,用以指明CPU的当前特权级CPL (current privilege level),值为0代表最高优先级,值为3代表最低优先级 线性地址=段基地址+段内偏移 其中,段基地址是根据段寄存器所指明的GDT中的段描述符中的信息得到的 物理地址:根据页表对线性地址进行转换而得到 11/17/09 Linux OS Analysis */54 GDT和段描述符 (segment descriptor) 每个段由一个段描述符来表示,一个段描述符长度为8个字节 全局描述符表GDT (global description table)就用来存放段描述符 GDT表也存放在RAM中,并使用一个专门的寄存器GDTR来指示GDT表在RAM中的位置(物理起始地址) 局部描述符表LDT(Local Description Table) 根据x86,每个进程可以设置一个LDT LDT表也存放在RAM中,使用LDTR来指示当前的LDT表 11/17/09 Linux OS Analysis */54 由于段的用途不一样,Intelx86提供下列几种段描述符 数据段描述符(Data Segment Descriptor) 可以描述各种用户数据段和堆栈段 代码段描述符(Code Segment Descriptor) 描述一个用户代码段 任务状态段描述符(Task State Segment Descriptor) 描述一个任务的状态段 局部描述符表描述符 描述一个LDT段 系统段描述符(System Segment Descriptor) 11/17/09 Linux OS Analysis */54 段描述符主要描述如下内容 段的物理起始地址(base字段,32位) 段长度(limit字段,20位) 段长度的单位(粒度,G标志,1位) 0:字节为单位 1:4KB为单位 是否系统段(S标志,1位) 0:系统段 1:普通的段 11/17/09 Linux OS Analysis */54 类型字段(Type字段,4位) 例如代码段、数据段、任务状态段、局部描述符段等等 段的特权级描述字段(DPL字段,2位) 00b:只能被CPL=00b的内核代码段访问 .. 11b:可以被任意代码段访问 段存在标志(1位) 0:该段当前不在内存中 1:该段当前在内存中 … Descriptor Privilege Level 11/17/09 Linux OS Analysis */54 段描述符的格式 段基址、 段长度、 其他属性 例如,0x00cf9a000000ffff 11/17/09 Linux OS Analysis */54 段选择子(Segment Selector) 16位段寄存器与GDT或LDT配合起来对相应的段进行寻址 段寄存器中的值称为段选择子,16位 13位的索引,指定GDT表中的相应的段描述符 1位的TI(Table Indicator) (跟LDT表有关,Linux中基本未使用) 2位RPL(request privilege level) 当相应的段选择符装入到cs寄存器中时,表明了CPU的当前特权级(用户/内核) index TI RPL 2 1 0 15 Segment selector 11/17/09 Linux OS Analysis */54 段选择子的使用和段描述符的快速访问 段寄存器 段选择子 段描述符 描述符表 段 ( ) 非编程寄存器 段描述符 11/17/09 Linux OS Analysis */54 逻辑地址到线性地址的转换 GDT或LDT GDTR或LDTR 选择子 偏移 线性地址 逻 辑 地 址 11/17/09 Linux OS Analysis */54 Linux中的段 基于下面两个原因,linux中只使用了几个段 段和页的同时存在在一定程度上有点多余。 因为两者都可以划分进程的物理空间 所有的进程希望使用同样的0-4G的逻辑空间。 这样程序员不必考虑进程地址的问题,也让内核的内存管理变得简单一些 11/17/09 Linux OS Analysis */54 Linux下的全局描述符表(部分) 在arch/x86/kernel/head_32.S中 内核数据段 用户代码段 用户数据段 Linux中的GDT 在include/asm-x86/segment.h中 11/17/09 Linux OS Analysis */54 在arch/x86/boot/pm.c中 在arch/x86/boot/pm.c中 11/17/09 Linux OS Analysis */5

文档评论(0)

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

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

1亿VIP精品文档

相关文档