计算机组成介绍

554 阅读5分钟

计算机组成概述

肉眼所见,计算机是由 CPU、内存、显示器这些设备组成的硬件,但是,大部分人毕业后从事各种软件开发工作。显然,在硬件和软件之间需要一座桥梁,,而“计算机组成原理”就扮演了这样一个角色,它既隔离了软件和硬件,也提供了让软件无需关心硬件,就能直接操作硬件的接口。

image.png

在计算机的组成原理之下,你可以深入学习数字电路相关的知识;之上,你可以学习编译原理,操作系统,计算机网络这些核心课程,再之上,你可以编写Web和手机APP这些应用层代码。

计算机基本硬件组成

计算最核心的硬件组成分为三大件: CPU、内存和主板

CPU:它是计算机最重要的核心配件,全名叫中央处理器,计算机的所有“计算”都是由 CPU 来进行的。

内存(Memory):你撰写的程序、打开的浏览器、运行的游戏,都要加载到内存里才能运行。程序读取的数据、计算得到的结果,也都要放在内存里。内存越大,能加载的东西自然也就越多。

主板是一个有着各种各样,有时候多达数十乃至上百个插槽的配件。我们的 CPU 要插在主板上,内存也要插在主板上。主板的芯片组(Chipset)和总线(Bus)解决了 CPU 和内存之间如何通信的问题。

image.png

有了三大件,只要配上电源供电,计算机差不多就可以跑起来了。但是现在还缺少各类输入(Input)/ 输出(Output)设备,也就是我们常说的I/O 设备。如果你用的是自己的个人电脑,那显示器肯定必不可少,只有有了显示器我们才能看到计算机输出的各种图像、文字,这也就是所谓的输出设备

同样的,鼠标和键盘也都是必不可少的配件。这样我才能输入文本,写下这篇文章。它们也就是所谓的输入设备

最后,你自己配的个人计算机,还要配上一个硬盘。这样各种数据才能持久地保存下来。绝大部分人都会给自己的机器装上一个机箱,配上风扇,解决灰尘和散热的问题。

还有一个很特殊的设备,就是显卡(Graphics Card)。现在,使用图形界面操作系统的计算机,无论是 Windows、Mac OS 还是 Linux,显卡都是必不可少的。如果你用计算机玩游戏,做图形渲染或者跑深度学习应用,你多半就需要买一张单独的显卡,插在主板上。显卡之所以特殊,是因为显卡里有除了 CPU 之外的另一个“处理器”,也就是GPU(Graphics Processing Unit,图形处理器), GPU 一样可以做各种“计算”的工作。

冯·诺依曼体系结构

image.png

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

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

性能

计算机的性能,其实和我们干体力劳动很像,好比是我们要搬东西。对于计算机的性能,我们需要有个标准来衡量。这个标准中主要有两个指标。

  • 响应时间或者叫执行时间(Execution time):可以理解为让计算机“跑得更快”
  • 吞吐率(Throughput)或者带宽(Bandwidth):可以理解为让计算机“搬得更多”

计算机的计时单位:CPU时钟

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

什么是时钟周期时间?你在买电脑的时候,一定关注过 CPU 的主频。比如我手头的这台电脑就是 Intel(R) Core(TM) i7-8700 3.2GHz,这里的 3.2GHz 就是电脑的主频(Frequency/Clock Rate)。这个 3.2GHz,我们可以先粗浅地认为,CPU 在 1 秒时间内,可以执行的简单指令的数量是 3.2G 条。

在我这个 3.2GHz 的 CPU 上,这个时钟周期时间,就是 1/3.2G。我们的 CPU,是按照这个“时钟”提示的时间来进行自己的操作。主频越高,意味着这个表走得越快,我们的 CPU 也就“被逼”着走得越快。

CPU 时钟周期数,我们可以再做一个分解,把它变成“指令数 × 每条指令的平均时钟周期数(Cycles Per Instruction,简称 CPI)”。不同的指令需要的 Cycles 是不同的,加法和乘法都对应着一条 CPU 指令,但是乘法需要的 Cycles 就比加法要多,自然也就慢。

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

因此,如果我们想要解决性能问题,其实就是要优化这三者。

  1. 时钟周期时间,就是计算机主频,这个取决于计算机硬件。
  2. 每条指令的平均时钟周期数 CPI,就是一条指令到底需要多少 CPU Cycle。对于 CPI 的优化,是计算机组成和体系结构中的重要一环。
  3. 指令数,代表执行我们的程序到底需要多少条指令、用哪些指令。这个很多时候就把挑战交给了编译器。同样的代码,编译成计算机指令时候,就有各种不同的表示方式。