让我们说说预测的算法吧。

对于无条件跳转,没啥可犹豫的,直接跳过去就是了。所谓的预测是针对有条件跳转来说的,因为不知道条件成不成立。最简单的统计是根据上一次跳转的结果来预测本次,如果上一次跳转啦,这一次也预测为跳转,否则不跳。

最简单的方法是2位预测法。用2位bit的计数器来记录跳转状态,每跳转一次就加1,直到加到最大值3就不再加啦,如果未跳转就减1,直到减到最小值0就不再减了。当遇到跳转指令时,如果计数器的值大于1则跳转,如果小于等于1则不跳。这只是最简单的分支预测算法,cpu中的预测法远比这个复杂,不过它们都是从2位预测法发展起来的。

算法有了,咱们看看cpu是如何实现预测的。

intel的分支预测部件中用了BTB,Branch Target Buffer,分支目标缓冲器。其结构见图

BTB中记录着分支指令地址,cpu遇到分支指令时,先用分支指令的地址在BTB中查找,若找到相同地址的指令,根据跳转统计信息判断是否把相应的预测分支地址上的指令送上流水线。在真正执行时,根据实际分支流向,更新BTB中跳转统计信息。

如果BTB中没有相同记录该怎么办呢?这时候可以使用Static Predictor,静态预测器。为什么称为静态呢?这是因为存储在里面预测策略是固定写死的,它是经由人们经过大量统计之后,根据某些特征总结出来的。比如,转移目标的地址若小于当前转移指令的地址,则认为转移会发生,因为通常循环结构中都用这种转移策略,为的是组成循环回路。所以静态预测器的策略是:若向上跳转则转移会发生,若向下跳转则转移不发生,如图

程序在实际执行转移分支指令后,再将转移记录录入到BTB。

还记得之前反复强调的重叠吗?其实是用在这的。如果分支预测错了,也就是说,当前指令执行结果与预测的结果不同,这也没关系,只要将流水线清空就好了。因为处于执行阶段的是当前指令,即分支跳转指令。处于“译码”、“取指”的是尚未执行的指令,即错误分支上的指令。只要错误分支上的指令还没到执行阶段就可以挽回,所以,直接清空流水线就是把流水线上错误分支上的指令清掉,再把正确分支上的指令加入到流水线,只是清空流水线代价比较大。

好啦各位,关于微架构这块咱们说到这就够用了,咱们当初是想解决代码4-3中第78行的清空流水线的,不能偏离目标太远啦。

一步步编写操作系统 31 cpu的分支预测 下相关推荐

  1. 一步步编写操作系统 30 cpu的分支预测简介

    人在道路的分岔口时要预测哪条路能够到达目的地,面对众多选择时,计算机也一样要抉择,毕竟计算机的运行方式是以人的思路来设计的,计算机中的抉择其实就是人在抉择. cpu中的指令是在流水线上执行.分支预测, ...

  2. 一步步编写操作系统 10 cpu的实模式

    cpu的实模式 由于mbr在实模式下工作--什么?什么是实模式?这时候有同学打断了我.我心想,这下好办了--哈哈,没有啦,开个玩笑而已.我们这里所说的实模式其实就是8086 cpu的工作环境.工作方式 ...

  3. 一步步编写操作系统 29 cpu缓存简介

    缓存是20世纪最大的发明,其原理用一些存取速度较快的存储设备做为数据缓冲区,避免频繁访问速度较慢的低速存储设备,归根结底的原因是,低速存储设备是整个系统的瓶颈,缓存用来缓解"瓶颈设备&quo ...

  4. 一步步编写操作系统 25 cpu的保护模式

    在保护模式下,我们将见到很多在实模式下没有的新概念,很多都是cpu硬件原生提供,并且要求的东西,也就是说按照cpu的设计,必须有这些东西cpu才能运行.咱们只要了解它们是什么并且怎么用就行了,不用深入 ...

  5. 一步步编写操作系统 60 cpu的IO特权级2 什么是驱动程序

    用户程序可以在由操作系统加载时通过指定整个eflags设置,操作系统如何设置自己的IOPL呢,即使内核IOPL为0也得写进去eflags寄存器中才生效.可惜的是,没有直接读写eflags寄存器的指令, ...

  6. 一步步编写操作系统 59 cpu的IO特权级1

    在保护模式下,处理器中的"阶级"不仅体现在数据和代码的访问,还体现在指令中. 一方面将指令分级的原因是,有些指令的执行对计算机有着严重的影响,它们只有在0特权级下被执行,因此被称为 ...

  7. 一步步编写操作系统 28 cpu乱序执行

    乱序执行(乱序执行译作异步执行更贴切),是指在cpu中运行的指令并不按照代码中的顺序执行,而是按照一定的策略打乱顺序执行,也许后面的指令先执行,当然,得保证指令之间不具备相关性. 举个简单的例子,比如 ...

  8. 一步步编写操作系统 15 CPU与外设通信——IO接口,下

    既然都说到IO接口了,不知道各位有没有疑问,cpu是怎样访问到IO接口呢?肯定得有个链路吧?什么?有隐约听到有同学开玩笑说:cpu用无线访问其它设备.哈哈,不知道各位听说过没有,无线的终端是有线.无论 ...

  9. 一步步编写操作系统 14 CPU与外设通信——IO接口 上

    介绍显卡之前,必须得和大家交待清楚,那么多的外部设备,cpu是如何与他们交流. 大家都学过微机接口技术吧?没学过也没关系,反正我也只是笼统地说说^_^,保证大家一定能看得懂. 按理说,如果硬件种类较少 ...

最新文章

  1. java 8 什么软件_Java 8你了解多少呢?Java之被人遗忘的Java 8的八个功能
  2. DOS命令-创建删除文件和文件夹
  3. Linux系统管理的基本入手点
  4. HTML的target属性中_blank、_self、_parent、_top含义
  5. 达到年薪 40W 必需掌握的技术。
  6. Java8 Stream详解~映射(map/flatMap)
  7. HTML5 Canvas 图形组合
  8. JavaScript 编程精解 中文第三版 十三、浏览器中的 JavaScript
  9. socket通信基础知识
  10. Redis-与spring的集成(XML形式)
  11. Android的TextView部分文字点击切换颜色(ClickableSpan)
  12. Laravel5.2队列驱动expire参数设置带来的重复执行问题 数据库驱动
  13. 转载:扒一扒Profiler中这几个“占坑鬼”
  14. html中改变图标颜色,使用CSS更改图标的颜色
  15. [python] 深度学习基础------人工神经网络实现鸢尾花分类(一)
  16. 默克推进下一代抗体药物偶联物疗法;美国FDA受理君实生物特瑞普利单抗治疗鼻咽癌的上市申请 | 医药健闻...
  17. 攻防世界-MISC新手区
  18. 开源聚合支付平台学习
  19. 敏捷团队︱数字化领导力之敏捷团队建设
  20. 如何制作注册登录网址

热门文章

  1. 实验吧—Web——WP之 Guess Next Session
  2. LightOJ - 1245 Harmonic Number (II) 求同值区间的和
  3. 《Linux内核》课本读书笔记 第三章
  4. cogs 547:[HAOI2011] 防线修建
  5. Calculation控制台
  6. DataGridView数据导入到Excel 中
  7. Flex 学习随笔 ---- 使用WebService 与数据库连接
  8. 2018 蓝桥杯省赛 B 组模拟赛(一)H.封印之门 最短路
  9. base64 转文件_PHP伪协议与文件包含
  10. 伺服怎么接单相220伏_乐利网带你认识伺服电机及工作原理