美文网首页
计算机组成原理——学习笔记

计算机组成原理——学习笔记

作者: 观海_听涛 | 来源:发表于2019-12-28 18:01 被阅读0次

    21天打卡行动#

    课程:《深入浅出计算机组成原理》

    笔记#1:

    这次21天打卡行动,之所以选择这门课程主要是因为组成原理是基础课程,我们非常有必须去认真的学习它,虽然上学的时候,计算机专业的大多数人可能都学习过它,但是可能都没学进去,或者说学习的角度不一样。

    随着学习的不断深入,总有一天我们会遇到一个瓶颈,我们会吃惊的发现,我们写了这么多年程序,居然不了解这个我们天天朝夕相处的伙伴——计算机。正如苏格拉底所说我们每个人最需要做的事就是——认识自己,我们每个程序员最需要做的事就是——认识计算机。

    这门课程大概有60篇文章,一天3篇差不多可以完成。

    21天打卡行动#

    课程:《深入浅出计算机组成原理》

    笔记#2:

    1、冯.诺伊曼体系结构

    即存储程序计算机=可编程+存储计算机与可编程对应的是“不可编程”,即将计算程序固定到电路板中,如计算器。与存储计算对应的是“不能存储程序的计算机”,典型代表是Plugboard,真个计算机是一个巨大额插线板。

    2、计算机组成=运算器+控制器+存储器+输入是被+输出设备
    3、学习计算机组成原理,在学习什么?

    1)学习控制器、运算器的工作原理,即CPU是怎么工作的,为什么这么设计;
    2)学习内存的工作原理,从基本的电路设计=》CPU=》应用程序接口;
    3)CPU是如何与IO设备打交道。

    4、计算机组成原理知识地图

    计算机的基本组成:硬件设备组成(CPU+主板+内存+硬盘+鼠标键盘+显示器)
    冯.诺伊曼结构:运算器/处理器单元,控制器,存储器,输入设备,输出设备
    计算机性能:CPU主频+相应时间+吞吐率
    计算机功耗(散热,能耗,电力)
    计算机的指令和运算:指令(机器码、程序执行)、运算(二进制编码、数字电路)
    存储器和I/O系统:存储器的层次结构、存储器和IO系统
    处理器设计:CPU、其它处理器

    21天打卡行动#

    课程:《深入浅出计算机组成原理》

    笔记#3:

    计算机性能
    程序实际花费的 CPU 执行时间(CPU Time),就是 user time 加上 sys time
    CPU Time=user time + sys time
    排除主板、内存等硬件影响
    程序的 CPU 执行时间 =CPU 时钟周期数×时钟周期时间

    ** CPU 时钟周期数=,指令数×每条指令的平均时钟周期数(Cycles Per Instruction,简称 CPI)**

    程序的 CPU 执行时间 = 指令数×CPI×Clock Cycle Time
    要提高计算机性能我们可以从右侧三个指标着手。

    1、时钟周期时间,就是计算机主频,这个取决于计算机硬件。
    2、每条指令的平均时钟周期数 CPI,就是一条指令到底需要多少 CPU Cycle。
    3、指令数,代表执行我们的程序到底需要多少条指令、用哪些指令。

    21天打卡行动#

    课程:《深入浅出计算机组成原理》

    笔记#4:

    浮点数在计算机中如何表示。

    写程序的时候大家应该都知道浮点数不能直接用等号对比,但可能很多人不太明白为什么。

    今天学习了浮点数在计算机中的表示方法,这个问题算是彻底明白了。
    并不是所有浮点数都不能用==好比较是否相等,只是大多数浮点数无法精确表示,只能近似表示。
    无论时整数还是浮点数在计算机中最终都会表示为二级制数。
    浮点数在计算机中表示为:符号位s+指数位e+有效位数f

    符号位s占1位
    指数位e占8位
    有效位f占23位
    当有效位被截图时就不能准确表达一个浮点数。

    21天打卡行动#

    课程:《深入浅出计算机组成原理》

    笔记#5:

    CPU周期
    指令周期(Instruction Cycle),CPU在永不停歇的执行“Fetch - Decode - Execute”的循环,一次循环称之为一个指令周期。

    Fetch(取得指令)-Decode(指令译码)-Execute(执行指令)

    机器周期(Machine Cycle)或CPU周期,从内存中读取一条指令的最短时间称为CPU周期。

    时钟周期(Clock Cycle)或振荡周期,时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位,在一个时钟周期内CPU仅完成一个基本动作。

    一个CPU周期通常会有几个时钟周期。
    一个指令周期,至少需要两个CPU周期。
    一个指令周期包含多个CPU周期,一个CPU周期包含多个时钟周期。

    21天打卡行动#

    课程:《深入浅出计算机组成原理》

    笔记#6:

    1)数据通路

    由两类原件组成,操作原件(也叫组合逻辑元件)、存储原件(也叫状态元件)。
    通过数据总线,将他们连接起来,就可以完成数据的存储、处理和传输了。

    2)控制器

    CPU支持的所有指令,都在控制器中被解析成不同的输出信号。
    CPU有2000多种信号,控制器输出的信号,至少要有2000种不同的组合。

    3)ALU和各种组合逻辑电路

    可以认为他们是一个固定的电路。控制器翻译指令输出不同的控制信号,ALU去做不同的计算。
    控制器让我们可以“编程”。

    21天打卡行动#

    课程:《深入浅出计算机组成原理》

    笔记#7:

    如何搭建CPU电路?

    1)需要ALU——一个没有状态的,根据输入计算输出结果的电路。
    2)寄存器——一个能够进行状态读写的电路元件。
    锁存器、D触发器
    3)一个自动电路,按照固定的周期,不停的实现寄存器自增,自动的执行“Fetch_Decode_Execute”
    4)我们需要一个译码电路

    CPU所需电路类型:

    1)组合逻辑电路——给定输入,给出固定输出。如:加法器
    2)时序逻辑电路——解决自动运行、存储问题,并让各个功能按时序协调。
    3)反馈电路,把电路输出信号作为输入信号。
    通过一个在打开和关闭之间不断切换的电路实现时钟信号。

    0、1脉冲电路

    反相器——非门

    通过D触发器实现存储功能,寄存器。
    有了时钟信号,可以提供定时的输入;
    有了D型触发器,可以在时钟信号控制的时间写入数据。
    以上两个功能配合就可以实现程序计数器。
    许多D型触发器放在一起,就可以形成一块很大的存储控件,甚至可以当做内存使用。
    寻址电路——译码器

    CPU=D触发器+自动计数+译码器+ALU

    CPU结构图

    21天打卡行动#

    课程:《深入浅出计算机组成原理》

    笔记#8:

    1)单指令周期处理器

    一个时钟周期可以执行一条执行,CPI=1。
    CPU指令的复杂度不同,为保证在一个时钟周期内可以执行完一条指令,我们只能将时钟周期设置为与耗时最长的指令一致。
    那么在执行其它简单指令时会有一部分时间CPU处于空闲状态。

    2)指令流水线设计

    为提高CPU的吞吐率,引入了流水线设计。
    将一条指令拆分为多个子过程,比如将指令拆分为“取指令、译码、执行”三部分,这就是一个三级流水线。

    进行指令拆分之后,执行一条执行就三个时钟周期,需要的时钟周期多了,但我们可以提高CPU的主频。

    引入指令流水线设计之后,我们不需要确保最复杂的指令在一个周期种执行完成,

    只需要保证一个最复杂的流水线在一个时钟周期内执行完成。

    ARM或Intel的CPU流水线级别为14。

    3)超长流水线的瓶颈

    既然流水线设计可以提高CPU的吞吐量,我们是不是可以无限加长流水线级数呢?

    流水线过程时,我们维护流水线执行的开销就会增加。

    过沈的流水线不仅不能提升计算机指令的吞吐率,更会加大计算的功耗和散热问题。

    流水线设计并不是越多越好。

    在实际的使用过程种,我们还需要解决直径之间的依赖问题。

    21天打卡行动#

    课程:《深入浅出计算机组成原理》

    笔记#9:

    流水线设计种的三大冒险:结构冒险(Structural Hazard)、数据冒险(Data Hazard)、控制冒险(Control Hazard)。

    1)结构冒险(Structural Hazard)

    CPU在同一时钟周期,同时运行两条指令的不同阶段。但是两个不同的阶段可能会用到相同的硬件电路。

    例如:薄膜键盘多个按钮公用一个线路,同一时间按下两个共用一条线路的按键时只能传出一个按键的信号;

    机械键盘或者电容键盘,每个按键都有独立的传输线路,可以做到全键无冲。

    现代CPU借用哈佛结构,将CPU内部的高速缓存分为了指令缓存(Instruction Cache)和数据缓存(Data Cache)。

    该解决方案,是通过增加资源解决冒险问题。

    2)数据冒险(Data Hazard)

    数据冒险分为三类:

    先写后读(数据依赖)
    先读后写(反依赖)
    写后再写(输出依赖)

    通过流水线停顿解决数据冒险。

    3)控制冒险(Control Hazard)

    操作数前推、乱序执行、分支预测

    21天打卡行动#

    课程:《深入浅出计算机组成原理》

    笔记#10:

    前面我们通过“堆资源”和“等排期”方式解决了结构冒险及数据冒险问题,但是这只是无奈之举,只能避免冲突无法提高效率。

    1)流水线里的接力赛:操作数前推 或者叫做操作数转发

    操作数前推通过在硬件层制造一条旁路让一条指令的结果,可以直接传输给下一条指令。

    不再需要指令1写回寄存器,指令2从寄存器种读取。

    2)填上空白的NOP:上菜的顺序不必是点菜的顺序——乱序执行

    在指令执行阶段通过一个类似线程池的保留站,让系统自己取动态调度先执行那些指令。可以有限解决流水线阻塞问题,

    指令执行的先后顺序不再和程序种的顺序有关。

    在现代的Intel CPU的乱序执行过程种,只有指令的执行阶段是乱序的。这种保证内存数据访问顺序的模式,叫做强内存模式。

    3)控制冒险解决方案——分支预测:今天下雨,明天还会继续下雨吗

    在指令译码阶段,提供对应的判断比较电路。
    静态分支预测:假装分支不发生,按照顺序执行,一旦发生跳转就丢弃之前的操作。

    动态分支预测:

    一级分支预测,用一个比特记录当前分支的比较情况,使用当前分支比较情况,预测下一次比较情况;

    双模态预测器:用两个比特记录对应状态。

    相关文章

      网友评论

          本文标题:计算机组成原理——学习笔记

          本文链接:https://www.haomeiwen.com/subject/ooisoctx.html