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

记得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时,会清空流水线

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

  1. 知识补给站:处理器微架构

    前言: 在这个补给站,我稍微简单介绍一下处理器中的一些架构(设计上的一些小trick),顺便再来讲讲保护模式到底保护了哪些东西 一,处理器微架构 ①,流水线 流水线大家肯定经常听说过,富士康工厂经常就 ...

  2. 一步步编写操作系统 71 直接操作显卡,编写自己的打印函数71-74

    一直以来,我们在往屏幕上输出文本时,要么利用bios中断,要么利用系统调用,这些都是依赖别人的方法.咱们还用过一个稍微有点独立的方法,就是直接写显存,但这貌似又没什么含量.如今我们要写一个打印函数了, ...

  3. 一步步编写操作系统 69 汇编语言和c语言共同协作 70

    由于有了上一节的铺垫,本节的内容相对较少,这里给大家准备了两个小文件来实例演示汇编语言和c语言相互调用. 会两种不同语言的人,只是掌握了同一件事物的两种表达方式.人在学习一种新语言时,潜意识里是建立了 ...

  4. 科普:什么是处理器微架构?

    本次来分享一些芯片相关的小科普文.作为嵌入式开发工程师,我们对芯片都需要有一定的了解. 指令集 1.指令集的体现 指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合.而指令集的先进与否,也关 ...

  5. 一步步编写操作系统 62 函数调用约定

    由于我们要将c语言和汇编语言结合编程啦,所以一定会存在汇编代码和c代码相互调用的问题,有些事情还是要提前交待给大家的,本节就是要给大家说下函数调用规约中的那些事儿. 函数调用约定是什么? 调用约定,c ...

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

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

  7. 一步步编写操作系统 22 硬盘操作方法

    硬盘中的指令很多,各指令的用法也不同.有的指令直接往command寄存器中写就行了,有的还要在feature寄存器中写入参数,最权威的方法还是要去参考ATA手册.由于本书中用到的都是简单的指令,所以对 ...

  8. 一步步编写操作系统 2 部署工作环境 2

    1.22汇编语言编译器新贵,NASM "新"是相对于旧来说的,老的汇编器MASM和TASM已经过时了,从名称上可以看出字母n是在m之后,其功能必然有所超越才会被大家接受. 请用一句 ...

  9. 一步步编写操作系统(1)

    为什么80%的码农都做不了架构师?>>>    平台:VMwave workstation 虚拟机,linux 5操作系统. 安装arm-elf-gcc 1.下载leeos_tool ...

最新文章

  1. Bounding box regression详解
  2. dede 删除文章的同时自动删除生成的html文件夹,删除织梦自带编辑器自动加DIV的方法...
  3. Linux下kafka的部署
  4. 转载:CSS垂直居中总结
  5. 浪潮之巅——IT产业的三大定律
  6. oracle到pg不停机增量迁移,研究 Oracle 到 PostgreSQL 的数据迁移 – 以 pgloader 为例 – Phy 的博客...
  7. python yield
  8. CLR探索系列:托管PE/COFF文件格式侧窥
  9. 拓端tecdat|R语言画ROC曲线总结
  10. ubuntu 使用gspca安装摄像头
  11. Python3学习笔记(1): print函数用法总结
  12. 学习分享 | 适合初学者练习的C/C++开源项目
  13. HTML制作简单的页面
  14. 干货 | 五千字长文带你快速入门FlinkSQL
  15. Linux安装conda未找到命令
  16. 首届博华深圳联展将于12月14日-16日在深圳国际会展中心举办
  17. unity室内渲染(白模渲染篇)
  18. 销售管理系统er图_销售是什么?
  19. Win7资源管理器打开ftp站点自动跳转浏览器解决方法
  20. USB-HID 设备扫盲

热门文章

  1. DevExpress.Utils.ToolTipLocation
  2. 第六章 参数估计(续)
  3. 【数据结构与算法】快排、归并 O(nlogn) 基于比较
  4. HDU 6168 Numbers 思维
  5. oracle控制文件全备失败,Oracle数据库案例整理-恢复数据库失败-主备机控制文件所在目录不同...
  6. 5d4的白平衡模式_佳能5D4/5D3/6D2系列中高端单反相机和全画幅微单EOS R专题系列课程...
  7. python怎么读取github_六行代码获取Github排名前10的Python项目
  8. C语言 system函数
  9. 收藏夹库计算机网络的关系,云南省计算机一级考试题库 计算机网络及基础.pdf...
  10. html加注算法源码,200种加密算法(源码)