计算机组成原理----计算机系统

目录

1.计算机的硬件和软件

2.硬件的发展

3.软件的发展

4.计算机硬件的基本组成

(1)早期冯诺依曼机的结构

(2)现代计算机的结构

5.各硬件的工作原理

(1)主存储器

(2)运算器

(3)控制器

(4)计算机工作过程:

取指令:

分析指令:

执行取数指令:

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

(1)低级语言

机器语言:

汇编语言:

(2)高级语言

(3)计算机系统的层次结构

(4)三种级别的语言


1.计算机的硬件和软件

计算机组成原理由硬件和软件组成:

硬件:计算机的实体,如主机,外设等。

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

计算机性能的好坏取决于"软","硬"件功能的总结

软件又可分为系统软件,应用软件:

系统软件:用来管理整个计算机系统。例如,操作系统、数据库管理系统(DBMS)、标准程序库、网络软件、语言处理程序、服务程序。

应用软件:按任务需要编制成的各种程序。例如各类APP等。

2.硬件的发展

第一代(电子管时代):

这一代计算机采用电子管作为逻辑元件,体积大,耗电量超大,程序员在纸带机上用机器语言编程,若纸带机上出现"死了的小虫子",可能会导致读程序错误,这就是bug(小虫子)的起源。

第二代(晶体管时代):

使用晶体管作为逻辑元件的电脑,体积比使用电子管作为逻辑元件的电脑体积更小,功耗较低,晶体管是手动焊接在电路板上的,所以很容易导致焊接错误。这一代中,出现了面向过程的程序设计语言:FORTRAN

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

集成电路就是将元件集成在基片上,集成电路的可靠性,比晶体管手动焊接的方式更可靠。这一代计算机主要用于科学计算等专业用途,高级语言迅速发展,开始有了分时操作系统。

第四代(大规模、超大规模集成电路时代):

开始出现"微处理器"、微型计算机,并且个人计算机(PC)萌芽

操作系统:Windows、MacOs、Linux...

3.软件的发展

(1)应用软件

编程语言的发展,决定了应用软件的丰富度。在计算机发展初期,程序都需要用机器语言编写,由于机器语言可读性差,所以发明了汇编语言。汇编语言将机器语言翻译为了更易懂的符号。而后出现了高级语言(C++,Java等)。

(2)系统软件

初期的操作系统,如DOS操作系统,只能用命令行操作,后期则出现了包含图形化界面的操作系统,如Windows,Android等

目前计算机存在"两极"分化的发展趋势:

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

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

4.计算机硬件的基本组成

(1)早期冯诺依曼机的结构

早期的ENIAC计算机是通过手动接线来控制计算的,即说一步做一步,为了解决这个问题,冯诺依曼提出了”存储程序“

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

冯诺依曼机的结构如下:

输入设备将信息转换成机器能识别的形式

数据程序通过输入设备的处理后,流向运算器,通过运算器中转,传递给存储器,存储器用于存放数据和程序。

运算器将数据进行算术运算和逻辑运算的处理后,会将数据传递给输出设备,输出设备会将结果转换成人们能看懂的形式。

控制器用于协调部件间协调工作,同时控制器也用于解析存储器中存储的数据,控制器解析数据后,才会指挥运算器进行相应操作。

在计算机系统中,软件和硬件在逻辑上是等效的,也就是说,对于某一种功能,既可以通过软件实现,也可以通过硬件实现,用软件实现成本更低,但效率不高,硬件实现成本更高,但效率也会提升很多。例如,对于乘法运算,可以设计一个专门的硬件电路实现乘法运算,也可以用软件的方式,执行多次加法运算来实现。

冯诺伊曼计算机的特点:

1.计算机由五大部件组成:输入/输出设备(I/O设备),控制器,运算器,存储器

2.指令和数据以同等地位存于存储器,只是存储位置不一样而已。可按地址寻访,无论要读出指令或数据,都需要给出其在主存中的位置。

往后看计算机工作过程会更加理解的,这里不太理解没关系。

3.指令和数据用二进制表示

4.指令由操作码地址码组成,地址码可以有多个,例如二地址指令就有2个地址码

5.存储程序,将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。
6.以运算器为中心,输入/输出设备与存储器之间的数据传送通过运算器完成。

运算器本来的工作为数据的运算,现在还要兼任数据的中转,这会导致数据计算的效率降低。所以改进了计算机的结构。

(2)现代计算机的结构

现代计算机以存储器为中心,也就是输入设备输入的数据都是直接存储在存储器中的,当运算器处理完数据后,输出设备也直接从存储器取走数据。

由于运算器和控制器两者的逻辑关系十分紧密,所以这两个芯片通常被集成在同一芯片中,这一芯片就是CPU:CPU=运算器+控制器

如下图所示,控制器通过控制线告诉运算器执行何种运算,同时控制器会控制主存储器的读/写,也会控制外设的启动和停止。

主存储器与CPU会进行数据交换,例如需要参与运算的数据,如x,y等变量,还有一些是指令,指令会放到控制器中,由控制器解析指令的含义,并且发出相应的控制信号。

输入/输出设备会与主存储器进行数据交换。 

所以现代计算机的结构如下:

5.各硬件的工作原理

(1)主存储器

主存储器包含存储体,MAR(Memory Address Register,存储地址寄存器),MDR(Memory Data Register,存储数据寄存器),地址寄存器用于保存地址相关的二进制数据,数据寄存器用于保存数据。

CPU往主存储器读数据流程如下:

CPU想从主存中取某个数据,那么CPU会将该数据的地址保存在地址寄存器中,主存储器会根据MAR的地址信息,从存储体中取相应数据,并写到数据寄存器中,最后CPU就可以通过数据线,取走他想要的数据了。

CPU往主存储器写数据流程如下:

CPU会指明写入到主存的什么位置,该地址会通过地址线保存在MAR中,要写入的数据则通过数据线保存在MDR中,并且CPU会通过控制总线,告诉主存储器这次执行的操作是写操作。通过CPU发出的这3个信息,主存储器就能在相应的位置写入信息了。

存储体:

数据在存储体内按地址存储,每个地址对应一个存储单元。一个存储体会被分为一个个的存储单元,每个存储单元存放一串二进制代码,这个二进制代码就是存储字(word),而二进制代码的位数就是存储字长。通常每个单元存放的二进制数的位数为8bit的整数倍。存储元就是存储二进制的电子元件,每个存储元可存 1bit。

存储单元:每个存储单元存放一串二进制代码

存储字(word):存储单元中二进制代码的组合

存储字长:存储单元中二进制代码的位数
存储元:即存储二进制的电子元件,每个存储元可存1bit

MAR指明了MAR的地址,所以MAR位数反映存储单元的个数,而MDR是要保存存储单元数据的,所以MDR位数=存储字长。

例如MAR=4位,那么总共有24个存储单元。MDR=16位,那么每个存储单元可存放16bit,也就是1个字(word)

注:其实现在的计算机通常把MAR、MDR也集成在CPU内

(2)运算器

用于实现算术运算(如:加减乘除)、逻辑运算(如:与或非)

运算器的结构如下:

ACC:累加器,用于存放操作数,或运算结果。
MQ:乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。

X:通用的操作数寄存器,用于存放操作数。
ALU:算术逻辑单元,通过内部复杂的电路实现算数运算、逻辑运算。由于电路成本复杂,所以成本也是最高的。

ACC,ALU,MQ三个部件在进行不同运算时,存放的数据各不相同:

(3)控制器

控制器的结构如下:

CU(control Unit):控制单元,分析指令,给出控制信号

IR(Instruction Register):指令寄存器,存放当前执行的指令

PC(Program Counter):程序计数器,存放下一条指令地址,有自动加1功能

计算机执行一条指令需要完成以下阶段:

1.取指令:根据PC记录的下一条指令的地址,取出指令。

2.分析指令:取出的指令会被放到IR中,CU就会分析这条指令的功能。

3.执行指令:分析过后,CU这一部件就会配合其他部件执行指令。

(4)计算机工作过程:

计算机会将高级语言翻译为机器能读懂的机器语言,并且将其装入主存储器中,如下图所示,存储体中每个存储单元的存储字长为16bit

取指令:

程序运行前,(PC)=0,指向第一条指令的存储地址

PC的值通过地址总线传送到主存储器的MAR中。此时(PC)=0,所以(MAR)=0,即

(PC)--->MAR

经过这个操作,控制器向主存指明了此时需要访问0号主存地址对应的数据,同时通过控制总线告诉主存,此时要进行的是读操作。

主存储器会根据MAR记录的信息去存储体中找到0号主存地址对应的存储单元,并且将存储单元的数据存放到MDR中,此时MDR中存放的就是CPU想读取的第一条指令,即

M(MAR)--->MDR        主存储器中MAR存放的地址对应的存储单元的数据放到MDR中

(MDR)=000001 0000000101

这个数据起始就是一条指令,解释为"取数a至ACC",这条指令会通过数据总线放到IR中,导致(IR)=000001 0000000101,即

(MDR)-->IR

分析指令:

该指令的操作码(前6bit)会被送到CU中,CU分析后得知这是"取数"指令,即

OP(IR)--->CU,OP(IR)表示取操作码

执行取数指令:

接下来就需要将指令中的地址码指明的主存中数据取出来,并且放到ACC寄存器中,既然要读取地址码指向的数据,那么就需要先将地址码放到主存的MAR中,如下图所示,该存储单元存放的地址码=0000000101,就是要取5主存地址中的数据到ACC中,即

Ad(IR)--->MAR,Ad(IR)表示取地址码         (MAR)=5

⑥ 接下来主存会根据MAR的地址到存储体中找相应的数据,并把这一数据放到MDR中,即

M(MAR)---->MDR        导致(MDR)=0000000000000010=2

⑦ 最后在控制单元的指挥下,MDR中的数据会被送到ACC(累加寄存器)中,即

(MDR)--->ACC        导致(ACC)=0000000000000010=2

:之前提到PC有自动+1的功能,在取指令这个动作完成后,PC就会自动+1了,即指明了下一条会执行的指令(主存地址为1的位置)

所以上一条指令完成取指后,(PC)=1,执行完该条指令后,(ACC)=2

如图所示,第二条指令是乘法指令:

对应上面的第⑦步,现在MDR中数(3),就会被放到MQ(乘商寄存器)中,即

MDR--->MQ        导致(MQ)=0000000000000011=3

接下来把a的值放到通用寄存器X中,即CPU执行乘商操作时,会把被乘数放到通用寄存器X中,即ACC寄存器中的数据放到X中,而乘数放到MQ中,就是下面的第10步

(ACC)--->X        导致(X)=2

接下来CU会通过控制总线告诉ALU(算术逻辑单元),让其进行乘法运算,那么ALU会将X与MQ中的数据进行相乘操作,并将最终的结果放到ACC中,如下面的11所示,即

(MQ)*(X)--->ACC        由ALU实现乘法运算,导致(ACC)=2*3=6,如果乘积太大,则需要MQ辅助存储,MQ会用来存储乘商运算结果的低位

此时ACC就存放了a*b的值了。

借这个例子就很好理解下图了:

分析完两条指令后,我们可以看到,取指令与分析指令的流程都是一样的,只有当CU分析出指令的不同功能时,操作才会产生区别,所以接下来就从CU分析指令后讲解:

第三条指令的执行:

上一条指令取指后(PC)=2,执行完上一条指令后,(ACC)=6,即ACC中存放了上一条指令执行的结果。

同理,CU分析后,得知这是一个"加法"指令。CPU将指令的地址码送到MAR(0000000111),导致(MAR)=7,即:Ad(IR)--->MAR

接着主存储器会根据MAR,到存储体中寻找对应数据,即主存地址为7的位置存放的数据,放到MDR中

M(MAR)--->MDR        导致(MDR)=0000000000000001=1

由于是"加法"指令,MDR会将数据传送到通用寄存器X中

(MDR)--->X        导致(X)=0000000000000001=1

到这一步,ACC中存放的是被加数,而X中存放的是加数,控制单元CU会向ALU发出信号,指明这是一个加法操作,那么ALU就会将ACC与X中的值相加,并且将加和的结果放到ACC中,即下面的第10步:

(ACC)+(X)--->ACC        导致(ACC)=7

此时ACC就存放了a*b+c的值了。

第四条指令的执行:

上一条指令取指后(PC)=3,执行后,(ACC)=7

由CU分析后,这是一条"存数"指令,接着IR会将该数据的地址码(0000001000)送到MAR中,导致(MAR)=0000001000=8,即:Ad(IR)--->MAR

另外ACC会通过数据总线将数据送到MDR中,即(ACC)--->MDR,导致(MDR)=7,此时MDR中存放的就是a*b+c的值了。

(MAR)=8,(MDR)=7,CU通过控制总线告诉主存储器此次是一次写主存的操作,那么主存储器会根据MAR所指明的地址,把MDR中的数据放到相应的位置中,也就是将a*b+c的值7存放到主存地址为8的位置。

第五条指令的执行:

上一条指令取指后(PC)=4

CU分析后,得知这是一条"停机"指令,那么利用中断机制通知操作系统终止该进程。

总结:

根据指令周期的不同阶段(取指令,分析指令,执行指令),CPU就能区分其从主存中取出的是指令还是数据,例如"取指令阶段"就是取的指令,"执行指令阶段"就是取的数据。

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

(1)低级语言
机器语言:

传统意义的计算机只能识别机器语言,也就是二进制表示的指令,CPU在执行二进制表示的指令时,还需要将这些机器指令细分为更细的指令执行,即微指令或微操作。也就是用微指令解释并执行每一条机器指令。

例如下图,主存地址为0的指令,就需要分为9个微操作。

汇编语言:

由于二进制指令用于编程是很不方便的,所以出现了汇编语言,使用汇编语言的程序员看到的机器就是"虚拟机器",为什么是"虚拟机器"?

因为在使用汇编语言的程序员看来,好像机器能直接识别汇编语言,但是机器其实无法直接识别汇编语言,而是需要通过汇编程序翻译成等价的机器语言程序,才可以执行。

一条汇编语言对应一条机器指令:

用汇编语言编写的程序,只是更便于理解而已,但本质上依然属于低级语言。

(2)高级语言

在程序员看来,可以识别高级语言的机器,也称为"虚拟机器",因为机器不能直接识别高级语言,高级语言需要用编译程序翻译成汇编语言程序,用汇编程序翻译成机器语言程序,机器才能识别。

(3)计算机系统的层次结构

高级语言编写的程序可能会用到操作系统提供的服务,例如通过系统调用请求操作系统的服务,汇编语言编写的程序同理,那么完善的层次如下图所示:

操作系统与操作系统之上的部分就为软件部分用机器语言的机器及以下的部分就为硬件部分

下层是上层的基础,上层是下层的扩展。

(4)三种级别的语言

如上图所示,高级语言需要用编译程序翻译成汇编语言程序,用汇编程序翻译成机器语言程序,机器才能识别。事实上也有一些语言,经过编译程序的编译后,就能直接得到机器可识别的机器语言程序。

还有一些高级语言的执行,并不是通过编译程序编译,而是通过解释程序,将高级语言翻译为对应的机器语言指令,例如:JavaScript、Python、Shell

编译程序与解释程序的区别:

编译程序:将高级语言编写的源程序全部语句一次全部翻译成机器语言程序,而后再执行机器语言程序(只需翻译一次),例如执行完C语言后生成的.exe文件,这个文件就是用机器语言描述的程序,只要生成这一文件,之后就不需要再进行编译了。

若要运行这一程序,只需要加载这一文件即可。

解释程序:将源程序的一条语句翻译成对应于机器语言的语句,并立即执行。紧接着再翻译下一句(每次执行都要翻译)

所以编译程序执行效率更高,解释程序执行效率较低。

注:编译、汇编、解释程序,可统称“翻译程序”,他们的作用都是将更高级的语言翻译为更低级的语言。

补充:计算机体系结构与计算机组成原理的区别

计算机体系结构探讨的是如何设计硬件与软件之间的接口。而计算机组成原理探讨的是如何用硬件实现所定义的接口。这对程序员来说是“透明”的,即程序员是看不见的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/397873.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端|Day2:列表、表格、表单(黑马笔记)

Day2:列表、表格、表单 目录 Day2:列表、表格、表单一、列表1.无序列表2.有序列表3. 定义列表 二、表格1.基本使用2. 表格结构标签(了解)3.合并单元格 三、表单1.input 标签2.input 标签占位文本3.单选框4.上传文件5.多选框6.下拉菜单7.文本域8.label 标…

【论文精读】MAE

摘要 将掩码重建任务从nlp引入到cv,提出非对称掩码自编码器。 框架 概述 如上图,本文提出掩码自编码器,即将给定原始信号的部分观测值的情况下重建原始信号,编码器将观察到的部分信号(没有掩码标记)映射到潜在表示,采…

电大考试哪个搜题软件好用?分享6个可以搜答案的软件 #经验分享#其他#微信

当今社会,技术的发展给我们带来了许多便利,包括了许多实用的学习工具。 1.三羊搜题 这是一个公众号 它支持文本搜索、扫码搜书、拍照搜索,不会的题目直接对准书书本,或手打文字搜索题目,找到的后的题目都有详细的解…

【JVM篇】什么是运行时数据区

文章目录 🍔什么是运行时数据区⭐程序计数器⭐栈🔎Java虚拟机栈🎈栈帧的内容 🔎本地方法栈 ⭐堆⭐方法区 🍔什么是运行时数据区 运行时数据区指的是jvm所管理的内存区域,其中分为两大类 线程共享&#xf…

w29pikachu-ssrf实例

实验环境 php:7.3.4nts apache:2.4.39 浏览器:谷歌实验步骤 ssrf(curl) 打开ssrf(curl) 点击文字,跳转404页面,从反馈信息来看是找不到对应的页面。 查看源码,发现有个RD变量影…

sentinel的资源数据指标是如何采集

资源数据采集 之前的NodeSelectorSlot和ClusterBuilderSlot已经完成了对资源调用树的构建, 现在则是要对资源进行收集, 核心点就是这些资源数据是如何统计 LogSlot 作用: 记录异常请求日志, 用于故障排查 public class LogSlot extends AbstractLinkedProcessorSlot<Def…

使用 Docker 安装 Kibana 8.4.3

使用 Docker 安装 Kibana 8.4.3 一. 安装启动 Kibana 8.4.3二. 简单使用2.1 向 Elasticsearch 发送请求2.2 搜索2.3 整体页面 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 安装k…

十五、Object 类

文章目录 Object 类6.1 public Object()6.2 toString方法6.3 hashCode和equals(Object)6.4 getClass方法6.5 clone方法6.6 finalize方法 Object 类 本文为书籍《Java编程的逻辑》1和《剑指Java&#xff1a;核心原理与应用实践》2阅读笔记 java.lang.Object类是类层次结构的根…

医卫医学试题及答案,分享几个实用搜题和学习工具 #笔记#笔记#微信

收录了大量考试类型的题库&#xff0c;大到考公&#xff0c;小到知识竞赛&#xff0c;题库资源算是比较丰富的了。操作起来也不难&#xff0c;我们只需输入题目内容&#xff0c;即可快速搜索出答案&#xff0c;而且它在给出答案的同时还会附带解析。最重要的是&#xff0c;搜题…

软件工具安装遇到bug、报错不知道怎么解决?看这里!

前言 本文举例了几个常见的软件工具使用问题&#xff0c;文末会提供一些我自己整理和使用的工具资料 。 "在追逐零 Bug 的路上&#xff0c;我们不断学习、改进&#xff0c;更加坚定自己的技术信念。让我们相信&#xff0c;每一个 Bug 都是我们成长的机会。" 一、VM…

09MARL深度强化学习policy gradient

文章目录 前言1、Multi-Agent Policy Gradient Theorem2、Centralised State-Value Critics2、Centralised Action-Value Critics 前言 Independent learning算法当中每个智能体看待其他智能体为环境的一部分&#xff0c;加剧了环境非平稳性&#xff0c;而CTDE框架的算法能够降…

防火墙——计算机网络

前述基于密码的安全机制不能有效解决以下安全问题&#xff1a; 用户入侵&#xff1a; 利用系统漏洞进行未授权登录&#xff1b; 授权用户非法获取更高级别权限等。 软件入侵&#xff1a; 通过网络传播病毒、蠕虫和特洛伊木马。 拒绝服务攻击等。 解决方法&#xff1a; 防火墙&a…

Camera2 setRepeatingRequest源码分析

当createCaptureSession流程执行完成后&#xff0c;应用在回调方法onConfigured就可以获得创建的CameraCaptureSession&#xff0c;接下来就可以调用CameraCaptureSession#setRepeatingRequest来下发camera stream命令获取camera数据。在CameraCaptureSession#setRepeatingRequ…

离线升级esp32开发板升级包esp32-2.0.14(最新版已经3.0alpha了)

1.Arduino IDE 2.3.2最新 2024.2.20升级安装:https://www.arduino.cc/en/software 2.开发板地址 地址&#xff08;esp8266,esp32&#xff09; http://arduino.esp8266.com/stable/package_esp8266com_index.json,https://raw.githubusercontent.com/espressif/arduino-esp32…

【Redis高手修炼之路】④主从复制

主从复制 就是 redis集群的策略配从&#xff08;库&#xff09;不配主&#xff08;库&#xff09;&#xff1a;小弟可以选择谁是大哥&#xff0c;但大哥没有权利去选择小弟读写分离&#xff1a;主机写&#xff0c;从机读 一主二仆 准备三台服务器&#xff0c;并修改redis.co…

HTTP 与HTTPS笔记

HTTP 80 HTTP是一个在计算机世界里专门在【两点】之间【传输】文字、图片、音频、视频等【超文本】数据的约定和规范。 HTTP状态码 1xx 提示信息&#xff0c;表示目前是协议处理的中间状态&#xff0c;还需要后续的操作&#xff1b;2xx 200 204 026 成功3xx 重定向&#xff…

MySQL篇之覆盖索引

一、定义 覆盖索引是指查询使用了索引&#xff0c;并且需要返回的列&#xff0c;在该索引中已经全部能够找到。 二、例子 1. id为主键&#xff0c;默认是主键索引。 2. name字段为普通索引。 select * from tb_user where id 1 覆盖索引 select id&#xff0c;na…

OPPO公布全新AI战略,AI 手机时代再提速

2024年2月20日&#xff0c;深圳——今日OPPO 举办 AI 战略发布会&#xff0c;分享新一代 AI 手机的四大能力特征&#xff0c;展望由AI驱动的手机全栈革新和生态重构的趋势&#xff0c;并发布由OPPO AI 超级智能体和 AI Pro 智能体开发平台组成的OPPO 1N 智能体生态战略&#xf…

提升网络灵活性,SD-WAN助您快速应对备用线路需求

随着企业规模不断扩大&#xff0c;传统网络架构在面对快速扩张的业务需求时显得力不从心&#xff0c;如同狭窄的道路难以容纳日益增多的车流和人群&#xff0c;访问流量的激增可能导致网络拥堵和延误&#xff0c;极大地影响业务正常访问。本文将详细介绍SD-WAN如何快速调整备用…

【MySQL】Navicat/SQLyog连接Ubuntu中的数据库(MySQL)

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、安装…