- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内存寻址.ppt
xlanchen@2006.6.7 Embedded Operating Systems 内存寻址 xlanchen@2006.6.7 在intelx86处理器下,有三种不同的地址 逻辑地址:每个逻辑地址由一个段(segment)和偏移量(offset)组成 线性地址:32位无符号整数,可以表示4G的地址空间 物理地址:用于芯片级内存单元寻址。它们与从CPU的地址引脚发送到内存总线上的电信号相对应 地址转换过程 为什么需要内存寻址机制? 保护内核不受恶意或者无意的破坏 隔离各个用户进程 方便程序的编写,使程序员可以抛开对物理内存的考虑,而且理论上可以使用任意大小的空间 硬件的分段单元(1)段寄存器(segment register) 为了快速方便的找到段选择符,处理器提供了段寄存器,目的是存放段选择符 16位的段寄存器,有六个:cs,ss,ds,es,fs和gs其中3个寄存器CPU规定了专门的用途 cs 代码段寄存器,指向存放程序指令的段 ss 堆栈段寄存器,指向存放当前程序栈的段 ds 数据段寄存器,指向存放数据的段 注意:cs寄存器还有一个很重要的功能:它含有一个两位的域,用以指明CPU当前特权级(current privilege level, CPL),值为0代表最高优先级,值为3代表最低优先级 段描述符(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寄存器中 页目录表项和页表项 页目录表项和页表项存储的都是页框的基址 4KB,12位对齐,因此最后12位被用来存放该页的标志位,包括: Present标志、Accessed标志、Dirty标志、Read/Write标志、User/Supervisor标志、…… 如果present标志为0,分页单元就把这个线性地址存放在处理器的CR2寄存器中,并产生一个14号异常(缺页异常) 硬件的分页单元 扩展分页 pentium处理器引进了扩展分页,允许页框的大小为4K或者4M 硬件保护方案 级别由前面提到的Use
文档评论(0)