1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
X86 CPU在段式管理下的地址形成机制 以及BIOS初始化过程对这种机制的利用 陈英豪 中科院计算所 2005-7-28 我们对x86 cpu的多少年来的某些刻骨铭心的理解可能是不正确的。这里之所以用了“可能”一词,是因为下面的一些结论是建立在我自己的实验和推测的基础之上的,没有绝对的把握,但我基本上都是以官方的手册或资料(当然还包括从网上收罗到的一大堆高手们写作的很有价值的但却很难找到出处的非官方资料)作为实验和推测的根据,所以这些结论也绝不是臆想出来的,并且在很大程度上具有说服力。另外为了帮助理解,我对某些问题的相关基础知识都作了适当的补充。下面切入正题。 一、x86的地址翻译机制(知识准备) 由于历史原因,在存储管理上,80x86系列的所有cpu都支持段式管理方式(分段方式),并且分段是地址翻译的必经阶段(后面提到的分页是可选的)。我们把段式地址翻译之前所使用的“段基址 : 偏移量”的地址形式,也就是程序员使用的地址形式称为虚拟地址,很显然虚拟地址是二维的。而虚拟地址经过段翻译后得到的地址称为线性地址,这时的线性地址已经变成平坦的一维的形式了。如果不分页,这个线性地址就是实际的物理内存地址(简称物理地址)了。如果启用分页机制,再由分页地址翻译机制将线性地址译成物理内存地址。最后形成的物理地址显然也是一维的。整个地址翻译过程可以用下图来表示: 二、关于神秘的A20(知识准备) 上面只提供了一个地址形成机制的理论框架。接下来我们来看看单就实模式而言,由一个虚拟地址得到相应的物理地址的具体过程是怎样的。我们知道,8086 cpu比较单纯,cpu内部的段寄存器和其它的寄存器宽度都是16位的,只有20根地址线(A0-A19),并且没有什么保护模式和分页一说。它的段翻译机制使用如下方法将虚拟地址翻译成线性地址:将16位的段寄存器的值左移4个二进制位(也就是乘以16),再加上16位的偏移地址,形成一个20位的线性地址,由于没有分页机制,所以形成的线性地址也就是实际的物理内存地址了。 但有一个细节,我们不能忽略,那就是8086的20根地址线只能访问1M(220)的地址空间,也就是00000h~FFFFFh。但8086的这种地址翻译机制却很明显允许我们使用一个段地址是FFFFh偏移地址也是FFFFh的虚拟地址:FFFFh : FFFFh。这个虚拟地址形成的物理地址为FFFF0h + FFFFh = 10FFEFh,但这个地址已经超出了1M(它比1M多64K-16字节),由于地址宽度有限,截掉高位的进位,最后形成的物理地址实际上是:0FFEFh,这种地址循环的地址翻译方式我们称之为wrap-around。也就是说,程序员访问100000h~10FFEFh之间的内存时,会被处理器自动wrap-around去访问00000h~0FFEFh的内存空间。这也是后来出现一根特殊的A20地址线的历史根源。 80286出现以后,地址线增加到24根,可以访问到最大16M(224)的物理内存空间,并且有了保护模式,情况变得复杂起来。Intel在设计80286时提出的目标是,在实模式下,系统所表现的行为应该和8086/8088所表现的完全一样,也就是说,在实模式下,80286以及后续系列,应该和8086/8088完全兼容。但最终,80286芯片却存在一个BUG:如果程序员访问100000H-10FFEFH之间的内存,系统将实际访问这块内存,而不是象过去一样重新从0开始。 为了解决上述问题,IBM使用键盘控制器上剩余的一些输出线来管理第21根地址线(从0开始数是第20根,被称为A20 Gate)。如果A20 Gate被打开,则当程序员给出100000H-10FFEFH之间的地址的时候,系统将真正访问这块内存区域;如果A20 Gate被禁止,则当程序员给出100000H-10FFEFH之间的地址的时候,系统仍然使用8086/8088的方式。绝大多数IBM PC兼容机默认的A20 Gate是被禁止的。由于在当时没有更好的方法来解决这个问题,所以IBM使用了键盘控制器来操作A20 Gate,但这只是一种黑客行为,毕竟A20 Gate和键盘操作没有任何关系。在许多新型PC上存在着一种通过芯片来直接控制A20 Gate的BIOS功能。从性能上,这种方法比通过键盘控制器来控制A20 Gate要稍微高一点。 我们也不难发现,在实模式下即使打开了A20,也只能访问到最大1024K + 64K – 16Byte的地址空间。这是由其地址翻译机制的先天因素所决定的。这正好又给我们展示出一个值得关注的地方。那就是:在实模式下,由它的物理地址形成机制(段地址左移4位加偏移)最多只需要21根地址线(原来的20根地址线再加上A20)就能解决寻址问题,但保护模式下可以访问

文档评论(0)

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

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

1亿VIP精品文档

相关文档