内容基于中国大学MOOC的2023考研计算机组成原理课程所做的笔记。

感谢LY,他帮我做了一部分笔记。由于听的时间不一样,第四章前的内容看起来可能稍显啰嗦,后面会记得简略一些。

西电的计算机组织与体系结构课讲法和王道考研的课不太一样,要应付校内考试建议还是跟着老师学比较好。以下是20年西电计科院车向泉老师这门课的录播下载链接(请勿将录像上传到B站等网站!!):

链接:https://pan.baidu.com/s/1bFs3ajhy8ZcbHopS9izGsw

提取码:fdez

期中考试占20分,一般只考前两章内容,期末考试占60分,一般前两章内容不考,考察内容一般考前的复习课都会讲清楚,请务必认真听复习课。

其他各章节的链接如下:

计算机组成原理笔记(王道考研) 第一章:计算机系统概述

计算机组成原理笔记(王道考研) 第二章:数据的表示和运算1

计算机组成原理笔记(王道考研) 第二章:数据的表示和运算2

计算机组成原理笔记(王道考研) 第三章:存储系统

计算机组成原理笔记(王道考研) 第四章:指令系统

计算机组成原理笔记(王道考研) 第五章:中央处理器

计算机组成原理笔记(王道考研) 第六章:总线

计算机组成原理笔记(王道考研) 第七章:输入输出系统

其他各科笔记汇总

计算机系统概述

导言

计算机组成原理研究计算机硬件在底层是如何相互协调工作的。

以玩游戏为例。CPU性能如何决定了玩游戏的时候图像处理的速度。运行内存越大,同时开多个应用程序会更流畅。机身存储决定了可以存多少资料。

以一款笔记本标出的硬件参数为例:I7-9750H(CPU型号,处理能力如何),8G(内存大小),512G固态(硬盘存储容量,读写速度如何),GeForce GTX1660Ti 6G独显(显卡)

计算机唯一能识别的数据是二进制0/1。用低/高电平分别表示0/1,通过电信号来传递数据。通过很多条电路(如主板上的印刷电路),可以传递多个二进制数位。每个二进制数位称为1 bitbitbit(比特)。

此处的低/高电平理解成低/高电压即可

计算机系统的发展

什么是计算机系统

计算机系统=硬件+软件

  • 硬件:计算机的实体,如主机,外设等。外设就是鼠标,键盘,显示器这些设备。

  • 软件:由具有各类特殊功能的程序组成

软件又可以分为系统软件和应用软件

  • 系统软件:用来管理整个计算机系统

Eg:操作系统,数据库管理系统(DBMS),标准程序库,网络软件,语言处理程序,服务程序

名词的简单解释:

  • 标准程序库就是编程的时候使用的那些库函数
  • 网络软件是实现TCP-IP协议的那些软件模块
  • 语言处理软件是那些编译程序,汇编程序。把编程使用的高级语言翻译为更低级的机器语言
  • 服务类程序有很多。我们调试代码用的程序就是服务程序的一种
  • 应用软件:按任务需要编制成的各种程序

Eg:抖音,王者荣耀,迅雷,美图秀秀…

硬件的发展

发展阶段 逻辑元件 备注
第一代:电子管时代 电子管 体积超大,耗电量超大。使用机器语言编程
第二代:晶体管时代 晶体管 体积,功耗降低。出现面向过程的程序设计语言:FORTRAN。有了操作系统雏形
第三代:中小规模集成电路时代 中小规模集成电路 将元件集成在基片上。计算机主要用于科学计算等专业用途。高级语言迅速发展。开始有了分时操作系统
第四代:大规模,超大规模集成电路时代 大规模,超大规模集成电路时代 开始出现“微处理器”(CPU就是微处理器的一部分),微型计算机。个人计算机(PC)萌芽。操作系统:Windows,MacOsMacOsMacOs,Linux

微处理器的发展以微处理器技术为标志。微处理器不断发展,对应的机器字长不断增加。

机器字长:计算机一次整数运算所能处理的二进制位数

摩尔定律:集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,整体性能也将提升一倍

软件的发展

机器语言/汇编语言→\to→FORTRAN/PASCAL/C++/Java…

使用高级语言编程的时候就不需要关心机器的具体特性如何,只需要专注于所需要解决的问题

DOS(只能用命令行的方式操作计算机)→\to→Windows,Android/iosiosios(拥有图形化的界面)

目前的发展趋势

目前计算机的发展趋势呈现两极分化:

一级是微型计算机向更微型化,网络化,高性能,多用途方向发展。

另一极是巨型机向更巨型化,超高速,并行处理,智能化方向发展。

计算机硬件的基本组成

早期冯诺依曼机的结构

冯诺依曼提出了“存储程序”的概念。指将指令以二进制代码的形式事先输入计算机的主存储器(内存),然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束

程序是指令和数据的集合

注意说的是主存储器不是存储器!存储器包括主存(内存)和辅存(固态硬盘),前者属于主机,后者则属于I/O设备。像我们平时手机里的APP就是存放在辅存里面的,只有需要启动运行的时候才会把辅存里面的APP相关程序代码数据读到主存里面

下图就是一个冯诺依曼机的示意图

控制器会利用电信号来协调其他部件相互配合的工作,也负责解析存储器里所存储的程序指令

冯诺依曼计算机的特点:

  • 计算机由五大部件组成
  • 指令和数据以同等地位存于存储器,可按地址寻访
  • 指令和数据用二进制表示
  • 指令由操作码和地址码组成
  • 存储程序
  • 以运算器为中心

输入/输出设备与存储器之间的数据传送通过运算器完成

这几个特点在学完下一节后再回头来看下会有更好的体会

现代计算机的结构

现代计算机以存储器为中心

我们常说的CPU=运算器+控制器,所以也可以上图的结构框图简化一下为下图

注意这里的主机和我们平常生活中说的主机是有区别的。平常说的主机除了有CPU和主存储器之外,还有硬盘,风扇之类。

各个硬件的工作原理

主存储器的基本组成

CPU从主存储器中取数据会先把它想要的数据存放的地址写到MAR中,主存储器根据MAR接收到的地址信息从存储体中拿出CPU想要的数据并存到MDR中。最后CPU通过数据线路从MDR中取走数据。

CPU写入数据时会指明它想要写入到哪个位置,写入的具体数据放到MDR中。最后CPU通过控制总线告诉主存储器要执行写操作。主存储器根据CPU发出的这三个信息就可以往对应的位置写入数据

接下来把注意力放到存储体上

运算器的基本组成

通用寄存器可能有多个。ALU是运算器的核心部件

控制器的基本组成

CU是控制器的核心部件

计算机最主要的工作就是执行代码,而我们所用的代码就是一条条的指令。每完成一条指令需要三个阶段。先取指令,根据PC里记录的指令地址从内存里取出对应的指令。取出的指令放在IR中,CU分析这条指令到底要干什么。分析完后CU控制其他部件配合着完成指令的具体执行

计算机的工作过程

下面举一个具体的例子来演示计算机的工作过程。

C语言写好的程序经过编译链接后从高级语言被翻译为机器语言并装入主存。

由上图可以看到每一个存储单元都是16个bitbitbit,也就是存储字长是16bitbitbit。每一条指令的两个部分也是占16bitbitbit,只不过在执行这些指令的时候CPU会自动把它们拆解成操作码和地址码两个部分

首先指令和变量的数据都存放在存储体当中。这个程序要执行的第一个指令存放在0号位置。所以在程序运行之前,PC指向0位置。

接下来把这个位置存放的指令取出执行,首先PC存放的指令需要通过地址总线传送到MAR中。因为PC=0,所以该操作导致(MAR)=0,也就是控制器向主存指明了接下来要访问的是0号地址所对应的数据。同时控制器会通过控制总线告诉主存储器这次要进行的是读操作。

把寄存器外面打一个括号表示的是寄存器里面的内容

接下来主存储器会根据MAR记录的地址信息去存储体中找出0号位置所对应的二进制数据并将这些数据放到MDR中。导致现在MDR当中存放的就是我们要读取的第一条指令。

M(MAR)→\to→MDR。括号外M表示主存储器,主存储器里的MAR地址所指明的数据放到MDR当中

这条指令会沿地址总线被放到IR当中,导致IR中存放此次要执行的指令。

这条指令的前6个bitbitbit(操作码,对应00001)会被送到CU控制单元里。CU分析得出这是“取数”指令。所以接下来要把地址码所指明的内存单元里的数据取出并放到ACC寄存器当中。

既然要读取主存的这个地址的信息,就需要把地址码信息(0000000101,转换为二进制为5)送到主存的MAR当中,导致(MAR)=5。5号存储单元所指向的刚好就是a这个变量所存放的位置。

接下来主存储器根据MAR指明的地址去存储体当中找出5号单元的这些数据并且把这些数据放到MDR当中,也就是把a这个变量的值放到MDR里。

最后在控制单元的指挥下,MDR里的数据会被传送到ACC当中。

到此为止我们就完成了取数的指令,最终导致a这个变量的值被放到ACC当中。

在上一步的取指令动作完成之后PC值就自动加一了,0+1=1指明了下一条我们要执行的指令应该在1这个单元。

接下来根据PC所指向的位置取得第2条指令,取指令的过程和之前是类似的。通过前4步把第2条指令放到IR当中。

取完指令之后就要分析指令。和之前一样会把操作码部分(00100)送到CU控制单元,CU控制单元分析得出这是乘法指令。接下来CU会指挥其他部件来协调完成乘法操作。

现在这步要完成的是 a×ba\times ba×b 的操作。而a变量之前已经被送到ACC中。所以现在这条乘法指令的地址码(0000000110=6)指明的是另一个乘数b的存放位置,这条指令的地址码会被送到MAR中指明我要取出6号存储单元里的数据。

接下来主存会根据MAR所指明的地址取出相应的数据,也就是把b变量的值放到MDR当中。

接下来b的值会通过数据总线送到MQ中。

接下来还要把a的值放到x中。

当CPU执行乘法操作的时候,它会把被乘数放到x中,然后把被乘数放到MQ中

接下来CU通过控制线告诉ALU让它进行乘法运算。ALU会把x和MQ里面存储的数进行相乘操作然后把最终结果放到ACC中。

在这个例子中相乘的两个数很小,如果两个数很大,ACC可能存不下结果,这时就需要MQ辅助存储。MQ里面会用来存放乘法结果的低位。

到此为止就完成了第2条指令也就是乘法指令

和前边的一条指令相比,其实第1步到第5步每一步要做的事情都是一模一样的。只有当CU分析出这条指令是乘法指令的时候接下来的操作才会产生区别。取指令结束后PC的值也会自动加1指向下一条要执行的指令。

上次取指令结束的时候,PC的值也会自动加1,所以这条指令执行结束之后得到的效果就是PC指向了2,也就是指向了下一条要执行的指令。ACC里面存储了上一个运算的结果,即a×b=6a\times b=6a×b=6。

接下来执行2这个地址存放的指令,前面的几个步骤都是一样的。通过5个步骤可以完成取指令和分析指令的操作。最终CU分析得到这是“加法”指令。接下来CU会根据”加法“指令的步骤来指挥其他部件协调工作。

这次要计算的是 a×b+ca\times b+ca×b+c。a×ba\times ba×b的结果已经存放在ACC当中,所以这个加法指令的地址码(0000000111=7)指明的是c这个变量的存放地址。

接下来要取出7这个地址存放的数据。需要把这个地址码送到MAR,主存根据MAR指明的地址取出相应的数据,也就是把c的值放到MDR当中。

接下来这步会把MDR的值传送到x中。

当我们进行加法运算的时候,ACC里面会先存入被加数,x里面存放加数。

然后控制单元会向ALU发送一个信号,告诉其此次要执行的是加法操作。ALU就会把ACC和x里面存放的值进行相加,并且把加得的值结果再次存回ACC当中。

因此这就导致了(ACC)=7,也就是把a×b+ca\times b+ca×b+c的值存放到了ACC里面。

到此为止我们完成了第三条指令也就是加法指令。

前面的5个步骤和之前的两条指令没有任何区别。另外在取完指令之后也会自动地进行PC加1的操作,也就是PC会指向下一条我们应该执行的指令

接下来这条指令的执行前边的步骤都是一样的。根据PC记录的地址取出这条指令并且放到IR寄存器当中,然后第5个步骤会把操作码送到CU中进行分析得到这是“存数”指令。也就是要把ACC里面的数据存到地址码(0000001000=8)所指明的存储单元中,而8这个存储单元刚好对应的是y这个存储单元的位置。现在ACC里面存的是7,也就是a×b+ca\times b+ca×b+c的值。

接下来执行存数指令。首先会把指令的地址码部分送到MAR中,用来指明此次我要存入的是哪个存储单元。另外还需要把ACC里面的运算结果通过数据总线送到MDR当中。也就是说此时MDR里面保存了a×b+ca\times b+ca×b+c的值,并且此时MAR里边指明了这个值是要存到内存地址为8的地方。

接下来CU控制单元会通过控制总线告诉主存储器说此次要进行的是写操作。于是主存储器会根据MAR的地址把MDR当中的数据放到相应的位置当中。这就导致了8号存储单元的值变为了7,也就是最终我们想要得到的结果y=a∗b+cy=a*b+cy=a∗b+c。

同样存数指令的执行,取指令和分析指令的阶段做的事情和前面那些指令没有什么区别。只有分析出了指令之后才会在CU控制单元的控制之下执行一些不一样的操作。同样PC会加1指向下一条应该执行的指令

接下来执行这条指令。和之前一样首先需要取出指令,把这个指令取到IR中。接下来要把操作码部分送到CU里面,CU分析得到这是“停机”指令。

执行到这一步就知道我们的这段程序运行结束了。学过操作系统就会知道要停止一个进程的运行需要通过系统调用或者中断机制来通知操作系统终止该进程。于是接下来执行的指令就不是这一系列指令,而是操作系统相关的指令,后续的部分就不需要再关心了。

到此为止我们就一步一步模拟了这个程序执行的过程

总结一下

“取数”指令的执行可以分为取指令,分析指令和执行指令这三个阶段。任何一条指令的执行一定都是这样3个阶段。

无论我们执行的是什么指令,前面取指令和分析指令的步骤其实都是一模一样的,只有分析完指令之后,CU才会知道这条指令到底要做什么。于是接下来的步骤对于不同的指令来说就有可能不一样。

在取指令的阶段,MDR里的数据肯定是要传到IR,而在执行指令的阶段CU会根据具体的这条指令来决定MDR里的数据应该是放到ACC还是MQ还是其他的通用寄存器里面。所以根据指令执行周期的不同,它处于不同的阶段,CPU就会区分出我们这次从内存里取出的到底是指令还是数据了。

我们这个小节给的例子中,每一条指令只有一个操作码和一个地址码。但有的计算机它所支持的指令有可能有多个地址码,比如后面会讲的二地址指令。

计算机系统的多级层次结构

高级语言编写的代码最终要翻译成机器语言才能被CPU执行(机器语言指的就是用二进制表述的指令)。传统意义上的机器只能识别机器语言。CPU在执行用二进制表示的机器指令时还需要把这些机器指令分为更细的小步骤(微指令,微操作)执行。

像上一节的例子中第一条机器指令(取数的指令)就需要被划分为9个微指令依次执行才能完成

可以把下图中的微程序机器看成对上层传统机器的分解。也就是用微程序机器的微指令来解释并执行传统机器的每一条机器指令

显然这样编程很不方便,所以出现了符号式的设计语言,也就是汇编语言。对于使用汇编语言的程序员来说,他所看到的机器似乎是可以直接识别他所编写的汇编语言程序的。所以使用汇编语言的程序员所看到的机器被称为虚拟机器。

之所以叫虚拟是因为任何一台机器都不可能直接识别汇编语言,汇编语言编写的程序想要执行必须通过汇编程序的翻译翻译为等价的机器指令才可以执行。

随着计算机的发展,慢慢出现了各种高级语言。用高级语言编写的代码需要经过编译程序翻译成汇编语言程序。

另一方面我们所编写的这些程序难免会用到操作系统所提供的各种服务,比如说某些系统调用。所以一般来说用汇编语言编写的程序同样也需要请求操作系统的服务,也就是通过系统调用的方式来请求。系统调用又可以被称为广义指令。因此下图的层次结构中在汇编语言的下方再插入操作系统机器。

操作系统及其之上的部分属于软件的部分,而传统机器和微指令机器属于硬件的部分。

刚才我们提到了三种级别的语言。高级语言编写的源程序需要通过编译程序翻译为与之等价的汇编语言程序。汇编语言本质上是一些助记符,一些方便人类记忆的符号而已,本质上它和机器语言是一一对应的。汇编语言在经过汇编程序翻译后就能得到与之对应的机器语言程序。机器语言程序才是可以让CPU执行的程序。C/C++就需要一步编译和一步汇编才能得到可执行的程序。

当然如果你的程序里调用了其他的库函数,那么在经过汇编之后还要再经过链接的操作,也就是把你的程序还有你所调用的其他一些东西联系起来。

也有一些语言经过编译程序编译之后可以直接由源程序得到最终可以执行的机器语言程序。

还有一些高级语言(很多脚本语言,例如JavaScript,Python,Shell)通过解释程序翻译为对等的机器指令。编译程序和解释程序是不一样的,区别见下图。

想想C语言编译汇编之后得到的.exe文件,这个文件就是机器语言描述的程序

后面讲了下计算机体系结构和计算机组成原理两门课内容的区别,略过不记

计算机的性能指标

存储器的性能指标

CPU性能指标

系统整体的性能指标

系统整体的性能指标(动态测试)

常说的“跑分软件”比如鲁大师之类就是基准程序

下面看几个问题

1.主频高的CPU一定比主频低的CPU快吗?

不一定,如两个CPU,A的主频为2GHz,平均CPI=10;B的主频1GHz,平均CPI=1

2.若A、B两个CPU的平均CPI相同,那么A一定更快吗?

也不一定,还要看指令系统,如 A不支持乘法指令,只能用多次加法实现乘法;而B支持乘法指令

3.基准程序执行得越快说明机器性能越好吗?

基准程序中的语句存在频度差异,运行结果也不能完全说明问题

计算机组成原理笔记(王道考研) 第一章:计算机系统概述相关推荐

  1. 计算机组成原理诺,计算机组成原理与系统结构 第8章 计算机系统结构.ppt

    文档介绍: 第八章计算机系统结构8.1超标量处理机和超流水线处理机8.2向量处理机8.3并行处理机8.4多处理机8.5互连网络8.6计算机系统结构新发展炸捐硼娩腔氓馒受赂胞支缨秆泼殃涌旦闷涤嘎哎辫贮专 ...

  2. 计算机键盘录入指法视频,第一章计算机文录入键盘指法.ppt

    第一章计算机文录入键盘指法 计算机文字录入 主编 沙 申 主题一 计算机文字录入键盘指法 第一章 计算机文字录入键盘指法 正确的"指法"是每一个计算机文字录入员的必修课, 它的开始 ...

  3. 计算机基础知识上教案,第一章 计算机基础知识教案

    <计算机文化基础>教案 第一章计算机基础知识 一.课程的性质和任务 "计算机文化基础"是大学非计算机各专业学生必修的公共基础课.课程内容着重计算机的基础知识.基本概念和 ...

  4. l计算机中数的表示教案,计算机组成原理电子教案-第2章 计算机中数据的表示法.ppt...

    计算机组成原理电子教案-第2章 计算机中数据的表示法 2.1.1 字符表示法 图2.1 字符串的存放 2.1.2 汉字表示法 2.2 数值数据表示法 (1)定点小数 2.浮点表示法 (2)浮点数的表示 ...

  5. 计算机组成原理子教案第三章,计算机组成原理电子教案第3章.ppt

    <计算机组成原理电子教案第3章.ppt>由会员分享,可在线阅读,更多相关<计算机组成原理电子教案第3章.ppt(78页珍藏版)>请在人人文库网上搜索. 1.第三章计算方法和计算 ...

  6. 人工操作阶段计算机是如何工作的,第一章计算机基础概述全解.ppt

    第一章计算机基础概述全解 1.2.3 汉字编码 汉字的编码 国标码:中文内码之一,汉字信息交换的标准编码.国标码是不可能在计算机内部直接采用.于是, 汉字的机内码采用变形国标码 . 国标码:作为转换为 ...

  7. 第一章计算机基础知识作业答案,第一章 计算机基础知识.doc第一次作业

    交流 借鉴 第一章 计算机基础知识 一.单选题 1. 第四代电子计算机是( C )计算机. A.电子管 B.晶体管 C.大规模集成电路 D.人工智能 2.第一台电子计算机是1946年在美国研制的,该机 ...

  8. 医学计算机基础ppt,医学计算机应用第一章计算机基础知识ppt课件.ppt

    文档介绍: 作者姓名:王宏伟作者单位:大连医科大学第一章计算机基础知识任务1-1选购一台电脑任务1-2计算机中数据的表示与存储目录第一章计算机基础知识掌握计算机系统的基本组成;计算机各部分硬件的功能及 ...

  9. 医用计算机基础 刘燕,1第一章 计算机基础知识1.ppt

    1第一章 计算机基础知识1.ppt CT断层扫描成像设备 眼底成像仪 获取病例数据 数据处理(三维重构) 利用计算机软硬件技术.网络通讯技术等现代化手段,对医院及其所属各部门对人流.物流.财流进行综合 ...

  10. 计算机专业英语基础知识,第一章 计算机专业英语基础知识

    1.1 计算机专业英语的特点 :清晰.精练.严密.准确 1.1.1 用词和语法的特点 用词:专业术语多,缩略词汇多且都仍在扩充. 语法:被动语态为主体,常用非谓语动词,名词化结构和从句等. 1.1.2 ...

最新文章

  1. 优达学城《DeepLearning》2-2:迁移学习
  2. Python下Selenium PhantomJs设置header的方法
  3. 6.5 如何确定聚类数-机器学习笔记-斯坦福吴恩达教授
  4. 如何用ASP获取真实IP地址_草根编程
  5. error MSB8008: 指定的平台工具集(v110)未安装或无效。请确保选择受支持的 PlatformToolset 值
  6. VTK:几何对象之TriangleStrip
  7. Web前端开发CSS基础(2)
  8. LeetCode之Construct the Rectangle
  9. 线条边框简笔画图片大全_儿童简笔画画大全人物
  10. java 多线程合并结果集_多线程计算数据,然后合并数据
  11. xgboost: 速度快效果好的boosting模型
  12. java smtp pop3_POP3/SMTP指令
  13. java方法语句错误需要标识符_java错误需要标识符_Java错误 找不到符号
  14. python气象数据分析_气象数据分析--数据预处理
  15. MATLAB去除人声
  16. 如何处理条码打印机打出来是空白的故障
  17. 光盘/硬盘“无法复制:数据错误(循环冗余检查)”的解决方案
  18. 重装Ubuntu系统
  19. 币圈炒币只有四种人能赚到钱其中之一是使用炒币机器人的玩家
  20. android手机时钟、闹钟、计时器、秒表app源码

热门文章

  1. ps缩略图补丁 安装一次之后 失效,卸载重新安装提示这个,是什么原因
  2. LINUX安装中文字体SimHei
  3. 携程、快手、平安银行、哈啰出行是怎么落地数据治理和DataOps的?丨DAMS峰会...
  4. dsoframer.ocx java_DSOFramer.ocx 控件使用
  5. 价值1680元的python实战全套教学视频
  6. Linux系统的镜像文件iso下载地址
  7. vscode 配置c++环境 万能头文件
  8. 有哪些适合女生练字的字帖?
  9. uni-app+flask 快速开发图像识别小程序
  10. word论文排版插件_Word自动排版软件