计算机原理

计算机的流水处理过程同工厂中的流水装配线类似。为了实现流水,首先必须把输入的任务分割为一系列的子任务,使各子任务能在流水线的各个阶段并发地执行。将任务连续不断地输入流水线,从而实现了子任务的并行。因此流水处理大幅度地改善了计算机的系统性能,是在计算机上实现时间并行性的一种非常经济的方法。

1流水线的实现

计算机原理
程序操作计算机

线程是CPU调度的一个基本单位,一个CPU同时只能执行一个线程的任务;同样,一个线程任务只能在一个CPU上执行。

1.计算机的发展

  计算机的发展包括了硬件和软件的发展,硬件的发展为计算机提供了更快的处理速度,而软件的发展为用户提供了更好的体验。两者相辅相成,密不可分。

  • 第一阶段: 60年代中期以前,是计算机系统发展的早期时代。在这个时期通用硬件已经相当普遍,软件却是为每个具体应用而专门编写的,大多数人认为软件开发是无需预先计划的事情。这时的软件实际上就是规模较小的程序,程序的编写者和使用者往往是同一个(或同一组)人;

  • 第二阶段:从60年代中期到70年代中期,是计算机系统发展的第二代。在这10年中计算机技术有了很大进步。多道程序、多用户系统引入了人机交互的新概念,开创了计算机应用的新境界,使硬件和软件的配合上了一个新的层次;

  • 第三阶段:计算机系统发展的第三代从20世纪70年代中期开始,并且跨越了整整10年。在这10年中计算机技术又有了很大进步。分布式系统极大地增加亍计算机系统的复杂性,局域网、广域网、宽带数字通信以及对“即时”数据访问需求的增加,都对软件开发者提出了更高的要求;

  • 第四阶段:在计算机系统发展的第四代已经不再看重单台计算机和程序,人们感受到的是硬件和软件的综合效果。由复杂操作系统控制的强大的桌面机及局域网和广域网,与先进的应用软件相配合,已经成为当前的主流。计算机体系结构已迅速地从集中的主机环境转变成分布的客户机/服务器。

流水线的原理。流水线的基本原理是把一个重复的过程分解为若干个子过程,前一个子过程为下一个子过程创造执行条件,每一个过程可以与其它子过程同时进行。流水线各段执行时间最长的那段为整个流水线的瓶颈,一般地,将其执行时间称为流水线的周期。加速比 = 采用流水线后的速度/未采用流水线的速度。= 未采用流水线的时间/采用流水线后的时间。流水线的设备利用率,在时空图上表现为n个任务占用的时空区与k个 功能段总的时空区之比。

  首先必须把输入的任务分割为一系列子任务,使各子任务能在流水线的各个阶段并发的进行。

计算机软硬化层次结构:

所以如果运行node.js的机器是像i5、i7这样的多核CPU,那么将无法充分利用多核CPU的性能来为Node.js服务。

2. 计算机基本原理

  Copy了点计算机的发展历史,现在可以来看看计算机的基本工作原理了。现代计算机,大部分都是基于冯诺依曼体系结构,而我们这里谈论的也是此问前提。冯诺依曼的核心是:存储程序,顺序执行。所以不管计算机如何发展,基本原理是相同的。计算机程序实际上是告诉计算机做什么。

  • 冯诺依曼体系结构
    冯诺依曼体系结构有以下特点:

计算机处理的数据和指令一律用二进制数表示;
指令和数据不加区别混合存储在同一个存储器中;
顺序执行程序的每一条指令;
计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。

冯诺依曼体系结构的计算机必须具有如下功能:

把需要的程序和数据送至计算机中;
必须具有长期记忆程序、数据、中间结果及最终运算结果的能力;
能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力;
能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作;
能够按照要求将处理结果输出给用户。

图片 1

2流水线的时间效率分析

图片 2

 

2.2 计算机工作原理

对于我们现代计算机来说,最关键的2个部件就是CPU和内存。内存存储了要执行的程序指令,而CPU就是用来执行这些指令。CPU首先要知道这些指定存放在存储器的那个区域,然后才能执行,并且把执行的结果写入到执行区域。

(1)使用流水线

计算机层次结构.png

 

2.2.1 CPU指令和编程语言

在了解CPU和存储器工作原理之前,先来了解一下CPU指令和我们编程语言之间的一些关系。

如果一个任务的实现有k个子任务,假设每个子任务完成时间为t.既流水线的时钟周期为t。

硬件-->软件-->程序

2.2.1.1 CPU指令

因为在计算机中指令和数据都用二进制来表示,也就是说它只认识0和1这样的数字。最早期的计算机程序通过在纸带上打洞来人工操操作的方式来模拟0和1,根据不同的组合来完成一些操作。后来直接通过直0和1编程程序,这种称之为机器语言。这里就会有一个疑问,计算机怎么知道你这些组合的意思

图片 3

image

于是就出现了CPU指令,我们现在买CPU都会听到指令集这一说。CPU指令其实就对应了我们这里说的0和1的一些组合。每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。有了CPU指令集的文档你就可以通过这个编写CPU认识的机器代码了。所以对于不同CPU来说可能会有不同的机器码。比如下面我们就定义了一套我们CPU硬件电路可以完成的CPU指令。

指令 ** 格式** ** 说明**
0001 [address][register] **读取存储取值到寄存器 **
0010 [register][address] 写入寄存器的值到存储器
0011 [register1][register2] 加法操作

随着计算机的发展,CPU支持的指令也越来越多,功能也越来越强,上图就是现在Core I5处理器支持的指令集。

处理n个任务的时钟周期数:

系统软件 :操作系统 编译器 汇编器

2.2.1.2 汇编语言

使用0和1这样的机器语言好处是CPU认识,可以直接执行,但是对于程序本身来说,没有可读性,难以维护,容易出错。所以就出现了汇编语言,它用助记符(代替操作码指令,用地址符号代替地址码。实际是对机器语言的一种映射,可读性高。

指令 汇编指令 格式 说明
0001 READ [addLable][regLab] 读取存储取值到寄存器
0010 WRITE [addLable][regLab] 写入寄存器的值到存储器
0011 ADD [var1][var2] 加法操作

把汇编语言转换为机器语言需要一个叫做汇编器的工具。对于目前的CPU厂商,在推出的CPU指令时都会同时退出新的汇编器。如果你还在使用老版本的汇编器那么只能使用机器码来使用新的指令了。

T1=k (n-1)

程序的执行过程:

2.2.1.3 高级语言

汇编语言的出现大大提高了编程效率,但是有一个问题就是不同CPU的指令集可能不同,这样就需要为不同的CPU编写不同的汇编程序。于是又出现了高级语言比如C,或者是后来的C ,JAVA,C#。 高级语言把多条汇编指令合成成为了一个表达式,并且去除了许多操作细节(比如堆栈操作,寄存器操作),而是以一种更直观的方式来编写程序,而面向对象的语言的出现使得程序编写更加符合我们的思维方式。我们不必把尽力放到低层的细节上,而更多的关注程序的本身的逻辑的实现。

对于高级语言来说需要一个编译器来完成高级语言到汇编语言的转换。所以对比不同的CPU结构,只需要有不同编译器和汇编器就能使得我们的程序在不同CPU上都能运行了。如下图在VS2010中,我们可以选择程序编译的目标平台,X86,X64,ARM等。当然除了这些编译类的语言之外还有解释类型的语言如JS,就不在此讨论范围内。

图片 4

image

到这里有一个疑问:当CPU的指令集更新后高级语言会有什么影响和变化?对于目前来说,一般出现了新的指令,会有对应的新的汇编器和编译器。所以编译器可以把一些高级语言的表达式编译成新的汇编指令,这样对于高级来说不会有任何变化; 当然还有一种情况就是高级语言会增加新的语法来对应一些新的汇编语言和指令。但是这种情况出现的几率很小。所以如果编译器不支持新的指令,那么只有只用汇编会来实现了。

即第一个任务所需时间为k,次数流水线被装满,剩下的n-1个任务只需n-1个时钟周期数。

图片 5

2.2.1.4 小结

从上面的我们可以看出,我们写的程序最终都将变成机器认识的二进制可执行程序,然后加载到内存顺序的执行。 从机器码到汇编到高级语言,我们可以看到计算机中无处不在的分层,抽象的思想。不光光是软件,硬件同样适用。最后留下一个问题在这里: C#和JAVA程序编译出来的文件不是二进制的机器码,而是中间语言,那么他们又是怎么运行的呢?

(2)不使用流水线

2017-06-24 08-03-57屏幕截图.png

2.2.2 CPU工作原理

前面已经了解了现代计算机的大致结构,也知道CPU是按照CPU指令来执行操作,那么就看看CPU的结构和他是如何执行顺序操作的。

完成n个任务所需的时钟周期数

图片 6

2.2.2.1 CPU功能

  1. 指令控制: 指令控制也称为程序的顺序控制,控制程序严格按照规定的顺序执行。
  2. 操作控制: 将取出的指令的产生一系列的控制信号(微指令),分别送往相应的部件,从而控制这些部件按指令的要求进行工作。
  3. 时间控制: 有些控制信号在时间上有严格的先后顺序,如读取存储器的数据,只有当地址线信号稳定以后,才能通过数据线将所需的数据读出,否则读出的数据是不正确的数据,这样计算机才能有条不紊地工作。
  4. 数据加工: 所谓数据加工,就是对数据进行算术运算和逻辑运算处理。 所谓数据加工,就是对数据进行算术运算和逻辑运算处理

T2=n*k

图片.png

2.2.2.2 CPU基本组成

以前CPU主要由运算器控制器两大部分组成,随着集成电路的发展,目前CPU芯片集成了一些其它逻辑功能部件来扩充CPU的功能,如浮点运算器、内存管理单元、cache和MMX等。下面2张图分别是8086和Pentium CPU的结构图。

图片 7

image

.

图片 8

image

对于一个通用的CPU来说,我们只需要关注他的核心部件算数逻辑单元和操作控制单元

图片 9

image

  1. 控制器的组成和功能: 控制器由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成。它是计算机指挥系统,完成计算机的指挥工作。尽管不同计算机的控制器结构上有很大的区别,当就其基本功能而言,具有如下功能:
    • 取指令 从内存中取出当前指令,并生成下一条指令在内存中的地址。
    • 分析指令 指令取出后,控制器还必须具有两种分析的功能。一是对指令进行译码或测试,并产生相应的操作控制信号,以便启动规定的动作。比如一次内存读/写操作,一个算术逻辑运算操作,或一个输入/输出操作。二是分析参与这次操作的各操作数所在的地址,即操作数的有效地址。
    • 执行指令 控制器还必须具备执行指令的功能,指挥并控制CPU、内存和输入/输出设备之间数据流动的方向,完成指令的各种功能。
    • 发出各种微操作命令 在指令执行过程中,要求控制器按照操作性质要求,发出各种相应的微操作命令,使相应的部件完成各种功能。
    • 改变指令的执行顺序 在编程过程中,分支结构、循环结构等非顺序结构的引用可以大大提供编程的工作效率。控制器的这种功能可以根据指令执行后的结果,确定下一步是继续按原程序的顺序执行,还是改变原来的执行顺序,而转去执行其它的指令。
    • 控制程序和数据的输入与结果输出 这实际也是一个人机对话的设计,通过编写程序,在适当的时候输入数据和输出程序的结果。
    • 对异常情况和某些请求的处理 当计算机正在执行程序的过程中,发生了一些异常的情况,例如除法出错、溢出中断、键盘中断等。
  1. 运算器的组成和功能: 运算器由算术逻辑单元(ALU)、累加寄存器、数据缓冲寄存器和状态条件寄存器组成,它是数据加工处理部件,完成计算机的各种算术和逻辑运算。相对控制器而言,运算器接受控制器的命令而进行动作,即运算器所进行的全部操作都是由控制器发出的控制信号来指挥的,所以它是执行部件。运算器有两个主要功能:
  • 执行所有的算术运算,如加、减、乘、除等基本运算及附加运算;
  • 执行所有的逻辑运算,并进行逻辑测试,如与、或、非、零值测试或两个值的比较等。

(3)流水线的加速比

案例:

2.2.2.3 CPU工作流程

CPU的基本工作是执行存储的指令序列,即程序。程序的执行过程实际上是不断地取出指令、分析指令、执行指令的过程。几乎所有的冯•诺伊曼型计算机的CPU,其工作都可以分为5个阶段:取指令、指令译码、执行指令、访存取数和结果写回。

图片 10

image

图片 11

image

C=T2/T1=n*k/[k (n-1)]

#include<stido.h>
int main(){
    int c;
    c=18 40;
    printf("result is :%dn",c);
    }

2.2.2.4 指令周期

  1. 指令周期: CPU取出一条指令并执行该指令所需的时间称为指令周期。指令周期的长短与指令的复杂程度有关。

  2. CPU周期:从主存读取一条指令的最短时间来规定CPU周期。指令周期常常用若干个CPU周期数来表示。

  3. 时钟周期:时钟周期是处理操作的最基本时间单位,由机器的主频决定。一个CPU周期包含有若干个时钟周期。

图片 12

image

从上面的定义可以知道,对于CPU来说取出和执行任何一条指令所需的最短时间为两个CPU周期。所以频率越高,那么时钟周期越短,这样CPU周期和指令周期也就越短,理论上程序执行的速度也越快。但是频率不能无限的提高,而且频率的提高也带来了功耗,发热等问题,所以目前也有超线程,流水线等技术来提高CPU执行的速度。

当n远大于k时,k (n-1)趋近于n,k级流水线的速度可提高k倍。

一条指令的执行过程可以简单的分为两个操作,取指阶段和执行阶段

2.2.2.5 时序发生器

  1. 时序信号: 在计算机高速运行的过程中,计算机内各部件的每一个动作都必须严格遵守时间规定,不能有任何差错。计算机内各部件的协调动作需要时间标志,而时间标志则是用时序信号来体现的。计算机各部分工作所需的时序信号,在CPU中统一由时序发生器来产生。
  2. 时序发生器: 时序信号发生器是产生指令周期控制时序信号的部件,当CPU开始取指令并执行指令时,操作控制器利用时序信号发生器产生的定时脉冲的顺序和不同的脉冲间隔,提供计算机各部分工作时所需的各种微操作定时控制信号,有条理、有节奏地指挥机器各个部件按规定时间动作。

在这里有一个疑问:指令和数据都存放在内存中,那么CPU怎么区分是指令还是数据呢?

从时间上来说,取指令事件发生在指令周期的第一个CPU周期中,即发生在“取指令”阶段,而取数据事件发生在指令周期的后面几个CPU周期中,即发生在“执行指令”阶段。从空间上来说,如果取出的代码是指令,那么一定送往指令寄存器,如果取出的代码是数据,那么一定送往运算器。

# 参考:https://blog.csdn.net/cc_net/article/details/10419645

操作系统:用户程序和硬件的接口
编译器:将高级语言翻译成汇编语言语句的程序
汇编器:汇编语言是一台计算机指令系统的符号化表示
<a href="" target="_blank"><img src=""/></a>
指令系统是软/硬件的交界面

存储程序原理:将事先实际好,用于描述计算机解题过程的程序如同数据一样,采用二进制形式存储在机器中,计算机在工作时自动高速地从机器中逐条取出指令加以执行。核心思想 <i>存储程序</i>

图片 13

图片.png

图片 14

图片.png

计算机设计的主要思想:分层 抽象

处理器 (CPU - Central Processing Unit)
功能:执行程序(Execute programs)
组成:Control Unit Data path
Control Unit(控制单元): 对指令进行译码,产生控制信号

处理器 (CPU - Central Processing Unit)
功能:执行程序(Execute programs)
组成:Control Unit Data path
Control Unit(控制单元): 对指令进行译码,产生控制信号
Datapath (数据通路): 完成指令的执行
核心:ALU(Arithmetic Logic Unit) Register(寄存器)

图片 15

图片.png

计算机性能评价:不同的性能评价指标会导致不同的结论。
计算机性能评价指标:

图片 16

图片.png

用户cpu时间
系统cpu时间

图片 17

图片.png

图片 18

图片.png

图片 19

图片.png

图片 20

图片.png

图片 21

图片.png

计算机操作的最小单位时间是时钟周期
4GHz==0.25纳秒

图片 22

图片.png

图片 23

图片.png

图片 24

图片.png

图片 25

图片.png

图片 26

图片.png

cpu的寄存器对c语言是透明的
实际应用程序的测试结果并不能全面代表计算机的性能
软件和硬件在逻辑功能上是等价的

在cpu中,指示下一条指令的地址寄存器是pc

冯诺依曼计算机根据指令周期的不同阶段区分从存储器中取出的是指令还是数据,在取指周期根据PC所指示的地址,取出的是指令;在执行周期根据指令中所指示的地址,取出的是数据。

cpu包括运算器 控制器 寄存器 不包括存储器

图片 27

图片.png

本文由mg4155娱乐电子游戏官网发布于mg4155电子游戏,转载请注明出处:计算机原理