1.2 计算机硬件的基本组成

2024-08-26 07:52

本文主要是介绍1.2 计算机硬件的基本组成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.早期冯诺依曼计算机结构

世界上第一台计算机是ENIAC,需要手动接线来控制计算,所以它的计算速度受限,所以冯诺依曼提出了“存储程序”的概念,即将需要用到的指令以二进制的形式事先输入到计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直到程序执行结束。
在这里插入图片描述
早期冯诺依曼机的硬件结构图如图所示。

  • 输入设备:将信息转换成机器能够识别的形式,经过运算器存储在存储器里面。
  • 存储器:存放数据和程序。
  • 运算器:实现算术/逻辑运算。
  • 输出设备:将结果转换成人们所熟悉的形式。
  • 控制器:指挥程序运行

在计算机系统中,软件和硬件在逻辑上是等效的,即对于同一个功能,我们既可以用软件来实现,也可以用硬件来实现。比如:对于乘法运算,可以设计一个专门的硬件电路实现乘法运算,也可以用软件的方式,执行多次加法运算来实现。
在这里插入图片描述
冯·诺依曼计算机的特点:

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

缺点:输入/输出设备与存储器的数据传送通过运算器完成,导致数据计算的效率降低

2.现代计算机结构

以存储器为中心,运算器和控制器统称为cpu,cpu+主存称为主机。
在这里插入图片描述
在这里插入图片描述

3.各个硬件的工作原理

(1)主存储器

主存储器里用于存放指令和数据的称为存储体,由一个一个的存储单元构成,除此之外,还有两个寄存器,分别是MAR(Memory Address Register,存储地址寄存器)和MDR(Memory Data Register,存储数据寄存器)。
CPU把数据存在存储器中某个位置,取数据时,CPU需要给MAR一个地址,根据这个地址可以找到对应的存储单元,取出相应的数据到MDR中。类比于菜鸟驿站里面的货架,对货架进行编号,取快递需要告诉店员你的取件号,根据取件号将快递放在柜台,就可以拿到快递了。
在这里插入图片描述
存储体由一个个的存储单元构成的,存储单元中存放了一串二进制代码,每一位二进制代码的存放需要一个存储元件,存储单元中二进制代码的组合又称为存储字,二进制的位数称为存储字长。
在这里插入图片描述

(2)运算器

运算器的主要功能是实现算术运算和逻辑运算。
主要部件:

  • ACC(Accumulator ):累加器,用于存放操作数,或运算结果。
  • MQ(Multiple-Quotient Register):乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。
  • X:通用的操作数寄存器,用于存放操作数。
  • ALU(Arithmetic and Logic Unit): 算术逻辑单元,通过内部复杂的电路实现算术运算、逻辑运算。
    在这里插入图片描述

(3)控制器

控制器基本功能:产生指令执行过程所需要的所有控制信 号,控制相关功能部件执行相应操作。
基本组成:

  • CU(Control Unit ):控制单元,分析指令,给出控制信号。
  • PC(Program Counter):存放当前欲执行指令的地址,与MAR之间有一条直接通道,具有计数功能(PC)+ 1→PC。
  • IR(Instruction Register ) 存放当前执行的指令内容,来自主存的MDR。
    每完成一条指令需要分成3个阶段,第一个阶段为取指令,根据PC中的地址从内存中取出那条指令,取出的指令放在IR中,CU这个部件分析这条指令是要做什么的,分析完后控制其他部件完成这条指令
    在这里插入图片描述

(4)输入输出系统

输入设备:输入设备的任务是把编好的程序和原始数据送到计算机中去,并把它们转换成计算机能识别、能接受的信息形式。(键盘、鼠标、网卡、扫描仪等)

输出设备:输出设备的任务是把计算机的处理结果以人或者其它设备能接受的形式送出计算机。(显示器、声卡、网卡、打印机等)

4.计算机的工作过程

用C语言写了这样一段程序,定义了a,b,c,y 4个变量,执行了一个功能y=a*b+c,经过编译后变成机器语言装入到主存中。a,b,c,y 4个变量分别存放在5、6、7、8四个地址中,前5个地址存放机器指令。
在这里插入图片描述步骤:
取数操作:
(1)首先数据和指令存放在存储体中,在程序运行之前pc=0,指向第一条指令的存储地址,pc的值需要传给MAR,使得MAR的值为0;
(2)控制器向主存指明了接下来CPU要访问的是0号地址所对应的内容且是读操作,再根据MAR的内容找出0号地址所对应的二进制数据,并把这个数据给MDR。
(3)此时MAR的内容为00001 000000101
(4)将MDR的内容通过数据总线传给控制器的IR寄存器,(IR)=000001 0000000101
(5)将指令的操作码部分送到CU里进行分析,分析得知,这是“取数”指令
(6)将指令的地址码部分给MAR,导致(MAR)=5
(7)根据MAR的值找到对应的存储单元,取出a的值
(8)M(MAR)→MDR,导致(MDR)=0000000000000010=2
(9)(MDR)→ACC,导致(ACC)=0000000000000010=2

在这里插入图片描述

以此类推
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
从前面的步骤可知,任何一条指令的执行都需要经过取指令、分析指令和执行指令三个阶段。取指令和分析指令是必经步骤,执行指令不同的指令具体步骤不同。取指令阶段,MDR的数据肯定是要放到IR中,而在执行指令阶段,CU会根据这条指令来决定MDR数据放在ACC还是MQ中,所以根据指令周期的不同,CPU来区分取出来的是指令还是数据。
总结:
在这里插入图片描述

申明:本内容属于学习记录,如有侵权或者不对的地方,请联系作者进行更改。

这篇关于1.2 计算机硬件的基本组成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107980

相关文章

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

usaco 1.2 Milking Cows(类hash表)

第一种思路被卡了时间 到第二种思路的时候就觉得第一种思路太坑爹了 代码又长又臭还超时!! 第一种思路:我不知道为什么最后一组数据会被卡 超时超了0.2s左右 大概想法是 快排加一个遍历 先将开始时间按升序排好 然后开始遍历比较 1 若 下一个开始beg[i] 小于 tem_end 则说明本组数据与上组数据是在连续的一个区间 取max( ed[i],tem_end ) 2 反之 这个

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

C 语言的基本数据类型

C 语言的基本数据类型 注:本文面向 C 语言初学者,如果你是熟手,那就不用看了。 有人问我,char、short、int、long、float、double 等这些关键字到底是什么意思,如果说他们是数据类型的话,那么为啥有这么多数据类型呢? 如果写了一句: int a; 那么执行的时候在内存中会有什么变化呢? 橡皮泥大家都玩过吧,一般你买橡皮泥的时候,店家会赠送一些模板。 上

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

Java 多线程的基本方式

Java 多线程的基本方式 基础实现两种方式: 通过实现Callable 接口方式(可得到返回值):

Java基础回顾系列-第一天-基本语法

基本语法 Java基础回顾系列-第一天-基本语法基础常识人机交互方式常用的DOS命令什么是计算机语言(编程语言) Java语言简介Java程序运行机制Java虚拟机(Java Virtual Machine)垃圾收集机制(Garbage Collection) Java语言的特点面向对象健壮性跨平台性 编写第一个Java程序什么是JDK, JRE下载及安装 JDK配置环境变量 pathHe