前言

目前正在备考 24 考研,现将 24 计算机 408 学习整理的知识点进行汇总整理。

博主博客文章目录索引:博客目录索引 (持续更新)

起步:认识计算机

计算机中通过电信号来传递数据:计算机识别二进制数据的原理

熟悉硬件:

  • 主板上的印刷电路如何传输数据:可以看到有多个电路,这个就是各个部件之间传输电路的通道。

一、计算机发展历程

1.1、什么是计算机系统

软件的分类:

计组中主要去探究硬件部分!

1.2、计算机硬件的发展

1.2.1、总览四代发展

主要是利用电路来进行运算,下面是各个时代发展阶段:

1.2.2、四代发展详细介绍

第一代:电子管时代

在这一代时,程序员都是使用机器语言来进行编程

第二代:晶体管时代,替代了电子管

体积减小、功耗降低,计算速度也达到了质的飞跃,此时出现面向过程的语言:FORTRAN,有了操作系统雏形。

第三代:中小规模集成电路时代,集成电路

计算机变得越来越小,功耗变低,集成电路比手动焊接的晶体管的可靠性更好,此时高级语言迅速发展,此时有了分时操作系统。

  • 其实就是将晶体管、电容元器件高密度的存在了电路板上。

此时阶段主要用于科学计算,暂时还没有步入个人生活:

第四代:大规模,超大规模集成电路

随着集成电路的提升,出现第四代,此时开始出现微处理器,也就是 CPU,例如苹果的 A13。

芯片技术的进步导致微处理器的诞生,同时也导致微型计算机的诞生,之后微型计算机开始逐步步入每一个人的生活。

看一下 Intel 公司处理器的发展:

  • 例如采用 8080 的 8 位 CPU 处理 16 位字长,则需要处理两次,而采用 8086 则只需要处理一次即可。

1.2.3、计算机硬件的发展历史

1.2.4、摩尔定律介绍

摩尔定律出自仙童公司的摩尔提出的:

1.3、计算机软件的发展

1.3.1、软件的发展

1.3.2、目前的发展趋势

知识回顾与重要考点

二、计算机的层次结构

2.1、计算机硬件的基本组成

2.1.1、冯诺依曼基本思想及特点(以运算器为中心,包含五大部件)

早期的冯诺依曼机器

原本的手动接线需要程序员或操作员先去手动的操作布线,之后才操作完成之后才能够进行运算。

而冯诺依曼提出了存储程序的概念,提前可以将二进制代码输入计算机的主存储器,之后按照存储器的首地址执行程序的第一条指令,接着就往后执行其他指令直到结束。

  • 存储器 控制器中的传输线:控制器从存储器中读取指令的一个数据流

对于同一个功能可以使用软件来实现,也可以使用硬件来实现。

  • 软件实现成本更低,效率更低。
  • 硬件实现成本更高,效率更高。

冯诺依曼计算机特点

以运算器为中心,那么相当于所有的数据都要经过运算器,那么就会导致效率降低,针对于这个问题,现代计算机做了优化,实际加工厂例子

  • 有些计算机的指令可执行多个地址码的,例如一条指令包含两条地址,这种指令被称为二地址指令。
  • 存储程序:在程序运行之前,会将指令与数据提前存储到内存当中。

2.1.2、现代计算机的结构(以存储器为中心)

优化之前冯诺依曼以运算器为核心的架构,现代计算机的机构是以存储器为核心,如下图:

输入设备的数据是直接放入到存储设备中去的,当运算器处理完毕之后,输出设备也会直接从存储器中取出数据,此时就可以更多的解放运算器的时间,让运算器进行更多的计算。

注:由于运算器、控制器之间的逻辑关系十分紧密,在大规模集成电路工艺出现了之后,这两个部件通常是集成到同一个部件上的,整合了整两个部件就是现在的 CPU。

看一下硬件的组成部分及主机、IO 设备的包含范围

知识点回顾与重要考点

2.2、各个硬件的工作原理

寄存器也是存放二进制数据,MAR 是存放与地址相关的二进制数据,MDR 是存放实际的数据

2.2.1、主存储器的基本组成

左边是主存储器的结构,而右边则是去仿照主存储器来说明的现实应用:

接下来理解一下 MAR 与 MDR 的作用

对于存储器来说,CPU 可以指明要写入到哪个位置 (放入到 MAR),写入的哪个数据 (放入到 MDR),最后 CPU 会通过控制总线告诉主存储器说这次要进行的操作是写操作,那么主存储器根据 CPU 发出的这三个信息,就可以往对应的位置写入 CPU 想要写的数据了。

接着来理解下存储体:一个存储体包含多个存储单元,一个存储单元对应一个地址

  • 一个字的大小要看主存储器的计算机硬件如何设计,有 8、16、32 位的。不要将其和 1 个字节混淆,还有 1B、1b。

额外扩展:例如宽带的 100Mbps 换算对应的迅雷下载为 B,则中间有 8 倍的关系,实际下载为 10MB/s。

2.2.2、运算器的基本组成

主要有三个不可或缺的寄存器以及一个核心部件。

运算器里面制造成本最高的是 ALU,其他基本都是存放操作数的。

2.2.3、控制器的基本组成

在控制器中 CU 才是真正的核心,很多时候会将 PC、IR 统称为取指阶段,CU 表示为执行阶段:

2.2.4、计算机的工作过程

高级语言示例并分析指令执行

下面执行一段程序,我们来看在计算机硬件部分是如何运行的:

接下来看一下对于一条 y=a*b+c 指令在硬件指令的运行过程

①第一条指令:执行取数指令

执行主存地址 0 的一条指令流程:其是一条取数指令,包含下面的多个硬件执行步骤

初步:PC(0):取出地址为 0 的指令并执行。

#1:(PC)MAR:会导致 (MAR)=0,控制器向主存指明了接下来要访问的是 0 号地址的这一串数据,同时控制器会通过控制总线告诉主存储器这次要进行的是读操作,接下来主存储器会根据 MAR 记录的这条地址去存储器里找出 0 号地址所对应的二进制数据,并将二进制数据放入到 MDR 当中。

  • (MAR) 有括号,表示的是里面的内容。
    M(MAR)MDR:表示将主存储器中的 MAR 地址中的数据放入到 MDR 当中。

  • M(MAR):表示的是主存储器里的 MAR
    (MDR)IR:会将当前 MDR 中的数据放入到 IR 寄存器中。
    OP(IR)CU:会将 IR 的前 6 位送到 CU 中,CU 识别 6 位二进制为取数指令。
    Ad(IR)MAR:此时会将在 IR 中的地址码送到 MAR 中,导致 (MAR)=5
    M(MAR)MDR:表示将主存储器中的 MAR 地址中的数据放入到 MDR 当中。

最终在控制单元的操作下,会将 MDR 的数据传输到 ACC 中。
(MDR)ACC:将 MDR 中的值传输到 ACC 累加器中。

上面的多个步骤实际上可分为取指令、分析指令以及执行指令:

此时当一条指令执行完成之后,PC 会自动 + 1,也就是说会去执行主存地址为 1 的指令。

②第二条指令:执行乘法指令

接下来执行第二条指令:很明显中间过程也是让 CU 去处理识别操作码 000100,即为乘法指令,对应的地址码指定主存地址为 6 的

执行第二条指令的完成步骤如下图所示:

注意在这一个阶段将 MDR 中的数据会传输到 MQ 当中去,此时 b=3。

接着会将对应的被乘数 2,也就是 (ACC)x,将 ACC 中的值放入到 x 中,令 (x)=2。

最终执行由 ALU 执行完乘法操作,(MQ)*(x)ACC,将乘法求得的数放置到 ACC 中。

注意:其中的取指令、分析指令过程与执行指令一一致,对于执行 xx 指令的步骤不相似。

③第三条指令:执行加法指令

上面第二条指令执行完毕之后,PC 同样会加 1,此时开始执行主存地址为 2 的 PC 指令:

在执行加法的时候,X 中存放被加数,ACC 中存放加数。

④第四条指令:执行存储操作

第三条指令执行完成后,执行主存地址为 3 的指令:实际就是将之前的y=a*b+c=2*3+1=7存储到指定 0000000000000111 地址空间中

第五条指令:执行停机指令

知识点回顾与总结

2.3、计算机系统的层次结构

2.3.1、计算机的层次结构

上面计算机工作过程中执行多条指令中的一个指令的多个命令,实际上就是微指令:

像这里的层次结构 (与操作系统有些不同) 更多的是从编程人员与硬件设计人员角度来考虑的。

2.3.2、三种级别的语言(机器、汇编与高级语言,汇编、编译与解释程序)

部分语言并不是直接通过编译程序来进行一步步编译到机器语言的,而是通过解释程序来翻译成与之对等的机器语言程序。

编译程序与解释程序区别

  • 编译程序是可以编译成. exe 文件来最终执行的。(只需要翻译一次)
  • 解释程序则是翻译一句就立即执行,每次执行都要翻译。(每次执行都要翻译一次)

知识回顾与重要考点

2.4、计算机体系结构 vs 计算机组成原理

两者的不同点

  • 计算机体系结构:探讨的指令系统怎么设计,我设计的计算机需要对上层的程序员提供什么样的指令,有无乘法指令,若是不提供乘法指令,那么想要实现乘法功能的程序员,那么就只能通过执行多次加法来得到最终结果。
  • 计算机组成原理:如果我要给上层提供乘法指令,那么对于乘法指令我如何用硬件来实现。

三、计算机的性能指标

3.1、存储器的性能指标

主要包含 MAR 与 MDR:

注意下下面的一些注意点

点 1:MAR 的位数可以直接表示实际的容量,也就是按照最大值来算就可以了。

  • 因为在现实情况中并不是都有满的容量情况,考试直接按照最大来算即可。

点 2:关于 MAR 多少位,为什么就可以直接使用 232 来计算呢?

3.2、CPU 的性能指标

指标:CPU 时钟频率、CPU 主频、CPI

主频越高,速度也越快,很大程度上反应了 CPU 的性能。并不是只有主频才会影响 CPU 运行,还有如 CPI 等一些指标。

CPI:不同的指令,CPI 也有可能会不同,甚至是相同的指令,也会有变化。

  • 一般来说我们都是去计算的一条指令平均耗时:一条指令的耗时 = CPI x CPU的时钟周期

此时我们可以做一题示例

  • 其中 3* (1 / 1000) 就是一条指令的耗时,那么 100 条指令耗时就得到了上面的式子。

指标:IPS、FLOPS

  • 例如:2MIPS 表示每秒钟 2 百万条指令。2GIPS 表示每秒二十亿条指令。
  • 3TFLOPS:表示 3 万亿次的浮点运算,拆分为 3、T、FLOPS。

3.3、系统整体的性能指标

3.4、基准程序(整体的性能指标,动态测试)

本质上就是给你设计好了一大段程序代码,在这段代码中包含了各种各样的指令,各种指令出现的频次,频率是不一样的,会根据你电脑所运行指令的耗时来评定打分。

关于电脑机器性能好是否只由主频、CPI 或者基准测试程序分数决定?

结论:决定执行指令速度的快慢与主频、CPI(一条指令执行的时间)、指令系统(不同的指令系统指令不一样都有,例如若是乘法指令没有就需要执行多条加法指令)有关

** 问 1:主频高 CPU 一定比主频低 CPU 快?** 并不是,若是 CPI 快,后者可能执行的指令也很快!

问 2:若是问 1 中 CPI 一样呢,是否还是主频高的 CPU 快

问 3:基准程序跑分越好,电脑机器性能越好

分数越高未必越好,要根据你的实际用途来进行测试,例如你的电脑对于运算十分擅长,但是你却用来进行显卡测试,明显不会高分。

知识点回顾与重要考点