计算机组成原理-知识体系以及基础知识介绍

 女神镇楼

1、计算机的基本硬件组成===CPU、内存和主板

  (1)CPU

      计算机最重要的核心配件,叫做中央处理器。计算机的所有“计算”都是由 CPU 来进行的。CPU 也是整台计算机中造价最昂贵的部分之一。CPU,一般都被叫作超大规模集成电路(Very-Large-Scale Integration,VLSI)。这些电路,实际上都是一个个晶体管组合而成的。CPU 在计算,其实就是让晶体管里面的“开关”不断地去“打开”和“关闭”,来组合完成各种运算和功能。

  (2)内存

      程序、打开的浏览器、运行的游戏,都要加载到内存里才能运行。程序读取的数据、计算得到的结果,也都要放在内存里。内存越大,能加载的东西自然也就越多。存放在内存里的程序和数据,需要被 CPU 读取,CPU 计算完之后,还要把数据写回到内存。然而 CPU 不能直接插到内存上,反之亦然。

  (3)主板

      主板是一个有着各种各样,有时候多达数十乃至上百个插槽的配件。CPU 要插在主板上,内存也要插在主板上。主板的芯片组(Chipset)和总线(Bus)解决了 CPU 和内存之间如何通信的问题。芯片组控制了数据传输的流转,也就是数据从哪里到哪里的问题。总线则是实际数据传输的高速公路。因此,总线速度(Bus Speed)决定了数据能传输得多快。

  (4)其他非必要组件

      电源、输入(Input)/ 输出(Output)设备,也就是 I/O 设备、机箱、风扇、硬盘、显卡(GPU)等

2、冯·诺依曼体系结构

  (1)包含算术逻辑单元(Arithmetic Logic Unit,ALU)和处理器寄存器(Processor Register)的处理器单元(Processing Unit),用来完成各种算术和逻辑运算

  (2)包含指令寄存器(Instruction Register)和程序计数器(Program Counter)的控制器单元(Control Unit/CU),用来控制程序的流程,通常就是不同条件下的分支和跳转。

  (3)用来存储数据(Data)和指令(Instruction)的内存。以及更大容量的外部存储(通常指硬盘);

  (4)输入输出设备。个人电脑的鼠标键盘是输入设备,显示器是输出设备。智能手机,触摸屏既是输入设备,又是输出设备。而跑在各种云上的服务器,则是通过网络来进行输入和输出。

      任何一台计算机的任何一个部件都可以归到运算器、控制器、存储器、输入设备和输出设备中,而所有的现代计算机也都是基于这个基础架构来设计开发的。

      而所有的计算机程序,也都可以抽象为从输入设备读取输入信息,通过运算器和控制器来执行存储在存储器里的程序,最终把结果输出到输出设备中。而我们所有撰写的无论高级还是低级语言的程序,也都是基于这样一个抽象框架来进行运作的。

      学习计算机组成原理,其实就是学习和拆解冯·诺依曼体系结构。

      学习控制器、运算器的工作原理,也就是 CPU 是怎么工作的,以及为何这样设计;学习内存的工作原理,从最基本的电路,到上层抽象给到 CPU 乃至应用程序的接口是怎样的;学习 CPU 是怎么和输入设备、输出设备打交道的。

      理解从控制器、运算器、存储器、输入设备以及输出设备,从电路这样的硬件,到最终开放给软件的接口,是怎么运作的,为什么要设计成这样,以及在软件开发层面怎么尽可能用好它。

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

4、“性能”介绍:性能可以看做时间的倒数

    计算机性能中,有两个重要的指标:、吞吐率

      (1)响应时间指的就是,我们执行一个程序,到底需要花多少时间。花的时间越少,自然性能就越好。

      (2)吞吐率是指在一定的时间范围内,到底能处理多少事情。这里的“事情”,在计算机里就是处理的数据或者执行的程序指令。

5、CPU指针:计算机的计时单位

   虽然时间是一个很自然的用来衡量性能的指标,但是用时间来衡量时,有两个问题。

      (1)时间不准:计算机可能同时运行着好多个程序,CPU 实际上不停地在各个程序之间进行切换。在这些走掉的时间里面,很可能 CPU 切换去运行别的程序了。而且,有些程序在运行的时候,可能要从网络、硬盘去读取数据,要等网络和硬盘把数据读出来,给到内存和 CPU。所以说,要想准确统计某个程序运行时间,进而去比较两个程序的实际性能,我们得把这些时间给刨除掉。

      (2)即使已经拿到了 CPU 时间,也不一定可以直接“比较”出两个程序的性能差异。即使在同一台计算机上,CPU 可能满载运行也可能降频运行,降频运行的时候自然花的时间会多一些。

       除了 CPU 之外,时间这个性能指标还会受到主板、内存这些其他相关硬件的影响。所以,需要对“时间”这个可以感知的指标进行拆解,把程序的 CPU 执行时间变成 CPU 时钟周期数(CPU Cycles)和 时钟周期时间(Clock Cycle)的乘积。

程序的 CPU 执行时间 =CPU 时钟周期数×时钟周期时间

      时钟周期时间:CPU内部有一个叫做晶体振荡器(Oscillator Crystal)的东西,简称为晶振。我们把晶振当成 CPU 内部的电子表来使用。晶振带来的每一次“滴答”,就是时钟周期时间。

      最简单的提升性能方案,自然缩短时钟周期时间,也就是提升主频。换句话说,就是换一块好一点的 CPU。如果能够减少程序需要的 CPU 时钟周期数量,一样能够提升程序性能。

 

      对于 CPU 时钟周期数,可以再做一个分解,把它变成“指令数×每条指令的平均时钟周期数(Cycles Per Instruction,简称 CPI)”。不同的指令需要的 Cycles 是不同的,加法和乘法都对应着一条 CPU 指令,但是乘法需要的 Cycles 就比加法要多,自然也就慢。在这样拆分了之后,我们的程序的 CPU 执行时间就可以变成这样三个部分的乘积。

程序的 CPU 执行时间 = 指令数×CPI×Clock Cycle Time

 

   提升性能需要优化的3个方面:

      (1)时钟周期时间,就是计算机主频,这个取决于计算机硬件。

      (2)每条指令的平均时钟周期数 CPI,就是一条指令到底需要多少 CPU Cycle。

      (3)指令数,代表执行我们的程序到底需要多少条指令、用哪些指令。这个很多时候就把挑战交给了编译器。同样的代码,编译成计算机指令时候,就有各种不同的表示方式。

6、从哪些方面提升“性能”

  CPU性能里面有一个公式:

程序的 CPU 执行时间 = 指令数×CPI×Clock Cycle Time

     提升计算机的性能,我们可以从指令数CPI 以及 CPU 主频这三个地方入手。

      (1)在 CPU 上多放一点晶体管,不断提升 CPU 的时钟频率,这样就能让 CPU 变得更快,程序的执行时间就会缩短。但是这样会有一个极限,导致功耗增加太多,就会导致 CPU 散热跟不上。

      (2)并行提高性能,提升吞吐率,现在用的 2 核、4 核,乃至 8 核的 CPU就是这种方式。

              并不是所有问题,都可以通过并行提高性能来解决。如果想要使用这种思想,需要满足这样几个条件。

              第一,需要进行的计算,本身可以分解成几个可以并行的任务。好比上面的乘法和加法计算,几个人可以同时进行,不会影响最后的结果。

              第二,需要能够分解好问题,并确保几个人的结果能够汇总到一起。

              第三,在“汇总”这个阶段,是没有办法并行进行的,还是得顺序执行,一步一步来。

              这就引出了我们在进行性能优化中,常常用到的一个经验定律,阿姆达尔定律(Amdahl’s Law)。这个定律说的就是,对于一个程序进行优化之后,处理器并行运算之后效率提升的情况。具体可以用这样一个公式来表示:

        优化后的执行时间 = 受优化影响的执行时间 / 加速倍数 + 不受影响的执行时间

             现在无论是简单地通过提升主频,还是增加更多的 CPU 核心数量,通过并行来提升性能,都会遇到相应的瓶颈。仅仅简单地通过“堆硬件”的方式,在今天已经不能很好地满足我们对于程序性能的期望了。

 

原文地址:https://www.cnblogs.com/pangchunlei/p/12341820.html