欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年CPU执行第一条指令时情形 2.pdf

    • 资源ID:34261645       资源大小:38.07KB        全文页数:3页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年CPU执行第一条指令时情形 2.pdf

    CPU 执行第一条指令时情形执行的第一条指令不在内存中, 众所周知,内存是由组成的,而不断电,可以保存信息,一旦断电,中的信息将会丢失,所以要执行的第一条指令被固化在中。以前年代, 由于内存是的, 所以被编址在的最后的中,所以它的段地址是0 xFFFF0,这样就不至于不分成两个部分,就是将设置成0XF000,执行的第一条指令的地址是:0XF000:FFF0H,这样使得固件的地址在寻址空间靠后的位置16 个字节处,这是一条跳转指令,向前调转到一个地方,然后开始执行,启动代码由jmp F000 : XXXX 中的偏移 XXXX 来把握,如果使用得多, XXXX 就小,使用得少,XXXX就大,这样使启动代码尽量靠后, 而不浪费多余的地址空间, 由于地址空间安排在最后,也不会把整个地址空间隔离成两段。而出现80386 以后,内存已经大于,所以如果把冷启动固件编址在F000h段内,就会把整个地址空间隔离成不连续的两段,一段是 F000h以前的地址,一段是 1M 以后的地址,这很不方便。 Intel 采用的办法是,还是默认将执行启动代码的 BIOS ROM 编址在系统可寻址空间的最后(如32位 x86 机的话,这段地址就位于 4GB 的最后一个 64K 内) ,在系统复位时, CPU 进入实模式,并将 CS 寄存器设置成 F000h,而将它的 shadow register的 Base设置成 FFFF0000h(理论上正常情况下CS 为 F000h 的话,其 shadow register的 Base应该设置成000F0000h ,但 intel 有意识的将高 12 位触发成 1 了,除了这样他也没有什么好办法让机器一启动就跑道4GB 那么高的地址上去执行) ,而偏移量EIP 置成0000FFF0h,所以机器执行的第一条指令的固件安排的物理地址显然就变成了FFFFFFF0h。BIOS 代码和以前还是要兼容的,也就是说此时从FFFFFFF0h处取出的还是一条远跳转指令jmp F000 : XXXX (我跟踪调试过好几款BIOS,这里的 XXXX 似乎都是 E05B) ,问题随之而来。这个远跳转指令是要更新CS 寄存器和它的 shadow register的,也就是说执行这条jmp F000 : E05B 之后(也就是CPU 执行第一条指令之后) ,CS 将被更新成 F000,其实 CS 原来就是这个值,这里说不上是更新,但CS 的 shadow register就不一样了,它被真正的更新了,它的 Base域被更新成 000F0000h了(高 12 不再具有触发成 1 的功能,那个功能只在机器启动到第一次更新CS 的内容期间有效)。这个 Base再加上虚拟地址中的偏移量 E05B,得到物理地址 000FE05Bh,这就是 CPU 执行的第二条指令的地址,但是这条指令的地址已经是1M 以内了。但我们不要忘记,这时的F000h段内可不再是 BIOS ROM 了,这一段此时安排的事实上是我们的RAM 空间,这一段 RAM 需不需要初始化才能使用那还另说,关键是此时此刻这个地方不应该有可以执行的代码才对啊?CPU 第二条指令就跳到这里不是自寻死路吗? 似乎走进了死胡同, 但我翻阅了很多资料, 找到了一点线索。 在很久以前出现过一个叫着 Chips & Technoloqies的公司, 他设计出一组被称着neat的芯片组,可以将内存高端的BIOS ROM 映射到 1M 以内的 RAM 空间里,并且可以使这一段被映射的 RAM 空间具有与 ROM 类似的只读属性。这个公司后来被 intel 收购。但后来这种映射似乎就成为了一种标准。由于这种映射关系我们有理由相信,机器启动的时候, 4G 的最后一个 64K 里与 1M 的最后一个 64K 里应该具有相同的东西,所以即使从FFFFFFF0h用一条 jmp 跳到 000FE05Bh,也仍然能够找到正名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - 确的代码去执行。那么 BIOS 接下来要干一些什么事呢?它有很多事情要做,我只举几件有代表性的,其中有两件事是DRAM 的初始化和memory sizing。按理说这个时候CPU 还处在实模式下, BIOS 还没有办法去确定超过1M 的内存量。另外还有一件事就是代码和数据拷贝,因为映射到1M 以内来的 BIOS ROM 容量有限,事实上还有很大一部分没有映射过来,以压缩的形式存放在高端的ROM 中了,BIOS 在 1M 以内执行初始化时难免需要将高端的那些内容拷过来使用,这也是不容易做到的。但不要忘了,我们可以使用前面说的将段break 成 4G 的方法来做成这几件事。当然,似乎还存在着这样一种可能性,那就是切换到保护模式,这些事情就都可以做了, 并且好像没有必要再切换回实模式。情况没有想象中那么简单,从我前面的那个实验看, 我切换到保护模式之后只执行了几行非常必要的将段 break成 4G 的代码,其他的事情一律不做,因为保护模式下有非常严格的特权检查,并且需要设置GDT,IDT,LDT 等一系列的表格,一般的代码是不容易在保护模式下跑起来的,所以想在保护模式下完成整个BIOS 的初始化,工程过于浩大, 几乎等于写一套小型的保护模式操作系统了(FreeBios可能就是这么干的)。当然我也有足够多的证据证明我们常用的BIOS 都使用了这种 break limit 的技术,并且它们完成break后都是迅速切换回实模式。参考了 X86 CPU 在段式管理下的地址形成机制以及BIOS 初始化过程对这种机制的利用陈英豪中科院计算所对于 BIOS 的一些质疑解答:1. 而这里之后我开始不明白了。JMP 要跳转到的位置是在高地址(4G 末端)Flash Rom BIOS中还是在低地址( 1M 末端)的 shadow BIOS呢?2 位于低地址( 1M 处)的( BIOS shadow)是从 Flash BIOS 拷贝而来呢,还是没有任何拷贝过程仅仅利用地址映射到原Flash BIOS 中的呢?3无 论 是 拷 贝 还 是 映 射 , 内 存 地 址 空 间 上ROM BIOS映 射 区 只有 0 xF00000 x100000之间的 64KB。而 ROM 本身有可能大于 2M。那映射的应该是原 BIOS 程序的一部分,那么是哪一部分呢?对这些问题的回答需要阐明机关概念:1. 机器加电时,内存控制器还没有初时化,内存是不可用。(李皓:这是对的)2. 机器加电时,对CPU 的指令的解码不是北桥,CPU 发出的地址被传递到南桥并由 FHW (Firmware Hub)解码到 BIOS ROM 芯片(Flash)。在加电时一直到引导进程初, BIOS 的 E 段(0 xE00000 xEFFFF)和 F 段(0 xF00000 xFFFFF)和 4G 内存 顶端 的对 应 段 0 xFFFE0000 0 xFFFEFFFF 和 0 xFFFF0000 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - 0 xFFFFFFFF都被 FWH 解码到 BIOS 的 ROM 芯片的两个 64 区域。即在启动阶段访问 0 xE00000 xEFFFF和 0 xFFFE00000 xFFFEFFFF是同一个 BIOS区域,访问 0 xF00000 xFFFFF和 0 xFFFF00000 xFFFFFFFF是同一个 BIOS区域。3. 机器加电时, CS 段寄存器值为 0 xF000,EIP值为 0 x0000FFF0,但 CPU 的取的地址是段寄存器不可见的部分(影子寄存器 )加上偏移部分,此时影子寄存器的值为 0 xFFFFFFF0。 所以 CPU 执行的第一条指令是0 xFFFFFFF0(复位向量),通常在 BIOS ROM 对应的指令是一个跳转指令JMP F000:E05B,当取出跳转完成后,由于 CS 段的影子寄存器刷新并重新加载,下一条指令地址是0 xFE05B。不过这条指令仍然从BIOS ROM 里取得。4. 关于 shadow BIOS,BIOS 程序通常是压缩的,在系统初始化阶段,BIOS 会解压 BIOS Image 到 RAM 中,然后编程北桥控制器对0 xE00000 xFFFFF置为 write only,这样对该区域的写被传递到DRAM 里,然后把解压的BIOS拷贝到 E 段和 F 段。最后重新编程北桥控制器对0 xE00000 xFFFFF 置为read only。对于PCI ROM BIOS ,BIOS 会把每个卡上的ROM 拷贝到0 xC00000 xDFFFF然后执行他们的初时化代码。5. BIOS ROM 可以很大,但不都是可执行的,如含有ACPI Table 等,开始解压 到0 xE00000 xFFFFF 只 是 其 中 一 部 分 , 在 启 动 过 程 中 还 需 要 从BIOS ROM 解压代码到RAM 中,并覆盖其中不需要的代码。这个就好像BIOS ROM 是硬盘 (不过可用直接访问 ),真正执行的代码在RAM 中一样。硬盘可以很大但 RAM 小,这也就是程序的局部性原理。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -

    注意事项

    本文(2022年CPU执行第一条指令时情形 2.pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开