一步步编写操作系统 27 处理器微架构之流水线简介

了解处理器内部硬件架构,有助于理解软件运行原理,因为这两者本身相辅相成,相互依存。就像枪和狙击手,枪的操作和外形设计都是要根据人体工学,让人不仅操作容易,而且携带也要轻便,做到能随时射出子弹击中目标,枪赋予了人的使命。反过来,狙击手要根据枪的操作和外形设计,找到发挥其最大命中率的方法,做到人枪合一,人赋予了枪的生命.

记得2002年末我在中关村攒了台电脑,当时的最新的桌面cpu是奔4-2.4b,我一咬牙就买它了,当时可花了兄弟我1600块呢,话说当时一个月只挣1500块。其中2.4是指cpu的主频是2.4G。您看,对于cpu的选择,我当时只关注主频,根本不关注其它参数,其实主要是不懂其它参数,哈哈。后来才懂了cpu中另一个非常重要的技术,这就是流水线。

说到流水线,也许您脑子中马上联想到:工厂里一个穿着蓝色工作服的工人,站在像传送带一样的工作台前紧张而有节奏的工作。也许您会问,你怎么知道我是这么想的?哎……电视里都这么演的……没错,这就是流水线。可是这个例子毕竟太遥远,并不是所有同学都在工厂里做过流水线工人,咱们还是拿生活中的例子说事。

大伙儿都有租房子的经历吗?如果没有也没关系,重点不是租房子,我要说的是像我等北漂一族,为了充分利用房子里狭小的空间,肯定用锤子往墙上砸过钉子,您懂的,可以挂东西嘛^_^。

从宏观上看,砸钉子可以分两个步骤:

  1. 取钉子
  2. 砸钉子

假设每一步都占用1秒,钉钉子这两个步骤下来是2秒,如果顺序执行这两个步骤,一分钟可以砸30个钉子。过程如表

 

以上是以串行顺次的方式来砸钉子,不过这种串行的效率实在有限,如果改为并行的方式砸钉子,效率必然大大提高。

生活中处处是并行的例子,最为典型的并行系统就是咱们的身体。比如心脏在为身体泵血的时候,肺同时在保持呼吸为身体供氧,小肠也同时在蠕动,为人体汲取养分。这些器官的活动都是并行的,并不是在心脏跳动完之后,小肠再蠕动,它们的工作是彼此独立无关联的。人体内部的器官虽然是在并行工作,但他们做为一个整体——人,却同一时间只能做好一件事,所以一心不能二用。

如果以“并行”的方式,也就是同时砸钉子,那得多增加人手才行,一个人同时只能做一件事,并且要么拿钉子,要么砸钉子。下面给砸钉子的工作增加个人手,专门给取钉子,这样一个人取钉子,另一个人专门来砸钉子,取钉子和砸钉子的工作重叠进行,过程如表:

 

上面的并行我加了引号,因为它并不是真正的并行,这是在重叠执行。重叠的意思是说在同一时间内同时完成两个钉子的部分工序,拿第2秒来说,第一行的“砸钉子”是砸的第一个钉子,第二行的“取钉子”取的是第二个钉子,做的并不都是第一个钉子的工序。真正的并行是两个人自己取自己的钉子,然后自己砸自己的钉子,各干各的。而我们的例子中,取钉子的人只会取钉子,砸钉子的人也只会砸钉子。

增加了一个人手之后,除第1秒外,每一秒都有“砸钉子”的动作,所以第一分钟内可以砸入59根钉子,在第二分钟以后,每分钟能砸60个。

以上表4-13的过程便是一个流水线的执行过程,由于砸钉子分为两个步骤,所以以上流水线称为二级流水线。

这种情况在cpu中也是一样的,指令执行单元EU是执行指令的唯一部件,一次只能执行一个指令,单核cpu的情况下,只有一个指令处于执行中。cpu中的各部分也是同时只能做一件事,但它们就像身体器官一样,也是在并行工作,相当于多个“人手”。cpu的指令执行过程分为取指令、译码、执行三个步骤。每个步骤都是独立执行的,cpu可以可以一边执行指令,一边取指令,一边译码。cpu中的时序不是秒,对cpu来说,秒就是天文数字。它的时序是时钟周期。按照这三个步骤,其三级流水线如表

 

以上在第2周期后,都有指令在执行,这是最基本的流水线啦。为了更好的理解以后的分支预测,在此提醒一下大伙儿:虽然在一个时钟周期内cpu同时干了三件事,但一定要清楚,这三件事不属于同一个指令,是三个指令重叠在一起了,这和砸钉子的流水线是一样的道理。同时完成的是当前指令的第三步、下一条指令的第二步,第三条指令的第一步。cpu中每条指令必须经过取指、译码、执行三步才算完成。

cpu是按照程序中指令顺序来填充流水线的,也就是说按照程序计数器PC(x86中是cs:ip)中的值来装载流水线,当前指令和下一条指令在空间上是挨着的。如果当前执行的指令是jmp,下一条指令已经被送上流水线译码了,第三条指令已经被送上流水线取指啦。仔细想想看,其实这个流水线没用了,因为cpu早已经跳到别处去执行了,第二、三条指令用不上了,所以cpu在遇到无条件转移指令jmp时,会清空流水线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apollo进阶课程㉚丨Apollo ROS背景介绍

原文链接:进阶课程㉚丨Apollo ROS背景介绍 ROS是机器人学习和无人车学习最好Linux平台软件,资源丰厚。无人车的规划、控制算法通常运行在Linux系统上,各个模块通常使用ROS进行连接。 上周阿波君为大家详细介绍了「进阶课程㉙Apollo控制技术详…

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

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

【HDU - 5492】Find a path(dp,tricks)

题干: Frog fell into a maze. This maze is a rectangle containing NN rows and MM columns. Each grid in this maze contains a number, which is called the magic value. Frog now stays at grid (1, 1), and he wants to go to grid (N, M). For each step,…

Apollo进阶课程㉜丨Apollo ROS原理—1

原文链接:进阶课程㉜丨Apollo ROS原理—1 ROS在开发过程中,基于功能把整个自动驾驶系统分成多个模块,每个模块负责自己消息的接收、处理、发布。当模块需要联调时,通过框架可以把各个模块快速的集成到一起。 上周阿波君为大家详细…

Ubuntu下安装Chrome浏览器的两个方法

一、通过直接下载安装Google Chrome浏览器deb包。 打开Ubuntu终端,以下为32位版本,使用下面的命令。 wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb 以下为64位版本,使用下面的命令。 wget https://dl.…

Apollo进阶课程㉝丨Apollo ROS原理—2

原文链接:进阶课程㉝丨Apollo ROS原理—2 在ROS系统中,从数据的发布到订阅节点之间需要进行数据的拷贝。在数据量很大的情况下,很显然这会影响数据的传输效率。所以Apollo项目对于ROS第一个改造就是通过共享内存来减少数据拷贝,以…

Java 10 常用集合继承关系图

概述 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用。 类图如下: 1、Iterable与Iterator接口之间的区别 我看到好多网上的文章类图里面Collection 是继承Iterator接口&a…

【CodeForces - 673D】Bear and Two Paths(构造,tricks)

题干: Bearland has n cities, numbered 1 through n. Cities are connected via bidirectional roads. Each road connects two distinct cities. No two roads connect the same pair of cities. Bear Limak was once in a city a and he wanted to go to a cit…

Apoll进阶课程㉞丨Apollo ROS原理—3

原文链接:进阶课程㉞丨Apollo ROS原理—3 机器人操作系统(ROS)是一个成熟而灵活的机器人编程框架。ROS提供了所需的工具,可以轻松访问传感器数据,处理数据,并为机器人的电机和其它执行器生成适当的响应。整个ROS系统被设计为在计…

SM3密码杂凑算法原理

目录 1.概述 2、算法描述 2.1 概述 2.2 填充 2.3 迭代压缩 2.3 消息扩展 2.4 压缩函数 2.5 杂凑值 1.概述 SM3是我国采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。 在商用密码体…

动手学无人驾驶(1):交通标志识别

今天主要介绍无人驾驶当中深度学习技术的应用。 本文是根据博客专家AdamShan的文章整理而来,在此表示感谢。 关于深度学习的图像分类技术,网上已有很多关于深度学习的课程(如吴恩达老师的深度学习专项课程),故本文不对…

《操作系统真象还原》-阅读笔记(上)

第一章 配置bochs,进入bochs simulator后一直是黑屏,原来默认是调试模式,需要输入C(continue)来让调试继续。 第二章 主讲MBR及进入MBR前的步骤 1.实模式只能访问1MB的内存空间。 2.BIOS在ROM中。 3.开机上电后CS&a…

Apollo进阶课程㉟丨Apollo ROS原理—4

原文链接:进阶课程㉟丨Apollo ROS原理—4 ROS是一个强大而灵活的机器人编程框架,从软件构架的角度说,它是一种基于消息传递通信的分布式多进程框架。 ROS本身是基于消息机制的,可以根据功能把软件拆分成为各个模块,每…

《操作系统真象还原》-阅读笔记(中)

第七章 操作系统是由中断驱动的。 中断分为外部中断和内部中断。 外部中断分为可屏蔽中断和不可屏蔽中断,内部中断分为软中断和异常。 外部中断 来自CPU外部的中断。可屏蔽中断:通过INTR引脚进入CPU,外部设备如硬盘、网卡、打印机等发出的…

动手学无人驾驶(2):车辆检测

上一篇博客介绍了无人驾驶中深度学习在交通标志识别中的应用(动手学无人驾驶(1):交通标志识别)。 本文介绍如何使用深度学习进行车辆检测,使用到的模型是YOLO模型,关于YOLO模型的具体检测原理&a…

《操作系统真象还原》-阅读笔记(下)

第十一章 任意进程的页目录表第0~767个页目录项属于用户空间,指向用户页表。第768~1023个页目录项指向内核页表。每创建一个新的用户进程,就将内核页目录项复制到用户进程的页目录表,其次需要把用户页目录表中最后一个页目录项更新为用户进程自己的页目…

Apollo进阶课程㊱丨Apollo ROS深入介绍

原文链接:进阶课程㊱丨Apollo ROS深入介绍 ROS是一个强大而灵活的机器人编程框架,从软件构架的角度说,它是一种基于消息传递通信的分布式多进程框架。ROS本身是基于消息机制的,可以根据功能把软件拆分成为各个模块,每…

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

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

Apollo进阶课程㊲丨Apollo自动驾驶架构介绍

原文链接:进阶课程㊲丨Apollo自动驾驶架构介绍 自动驾驶硬件架构:一般采用激光雷达作为主要感知传感器,同时结合摄像头、GPS/IMU、毫米波雷达、超声波雷达等,以NVIDIA Drive PX2 或 Xavier作为主要计算平台,在工业PC机…

Apollo进阶课程㊳丨Apollo平台的快速入门

原文链接:进阶课程㊳丨Apollo平台的快速入门 Apollo是向汽车行业及自动驾驶领域的合作伙伴提供一个开放、完整、安全的软件平台,帮助他们结合车辆和硬件系统,快速搭建一套属于自己的完整的自动驾驶系统。 上周阿波君为大家详细介绍了「进阶课…