计算机基本硬件的内部结构

news2025/1/21 1:05:40

1.早期冯·诺依曼机结构

世界上第一台计算机ENIAC是使用手动接线来控制计算,十分麻烦。

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

于是第一台采用冯·诺依曼结构的计算机EDVAC诞生了,接下来让我们看看具体的冯·诺依曼计算机结构图(实线为数据线、虚线为控制线或反馈线):

在这里插入图片描述

输入设备将信息转化为机器能识别的形式,然后通过运算器的中转存入存储器,需要用到数据和程序时,就要经过运算器中转到输出设备,得出计算结果,而整个过程都是由控制器使用电信号来进行指挥的,另外这个控制器也会负责解析存储器里的存储指令。

另外,对于计算机系统来说,软件和硬件在逻辑上是等效的,例如:可以专门制作出一个乘法硬件(硬件),也可以利用现有的加法硬件实现乘法(软件)

冯·诺依曼计算机的特点:

  1. 计算机由五大部件组成

  2. 指令和数据化以同等地位存储在存储器里,可按地址寻址

  3. 指令和数据使用二进制表示。其中指令组成:操作码(指明指令的操作)、地址码(指明操作数据的内存地址)有的计算机指令采用多个地址码

  4. 整个体系以运算器为中心,以运算器为中转站,这样会导致数据计算效率降低(比如:输入设备本来是可以直接交给存储器的,但是却交给了运算器)

2.现代计算机体系结构

现代计算机有几个很不一样的特点

  1. 以存储器为中心

  2. 通常控制器和运算器被集成为一个CPU

在这里插入图片描述

因此我们可以改写一下结构,让这个体系变得更加模块化:
在这里插入图片描述

3.计算机硬件内部结构(现代)

3.1.主存储器

主存储器里用于存放数据的东西叫存储体

在这里插入图片描述

  1. 存储体内部可以分为一个一个“存储单光”,并且根据地址总线进行编址

  2. 每一个存储单元存储的二进制数据组合我们称为“存储字(word)”

  3. 存储单元存放二进制的最大长度称为“字长”,一般是8的整数倍。

  4. 用于存储二进制的电子元件简称“存储元”,利用电容的原理,每个存储元可存1bit,而存储单元由若干个存储元构成

主存储器内部还有两个寄存器

  1. 分别是MAR(存储地址寄存器)、MDR(存储数据寄存器)

  2. 主存储器里的控制逻辑会根据MAR存储的地址查找主存储器里的数据,然后取出存放到MDR中,而CPU就可以从这里拿走数据。

  3. 同理,CPU写入主存储器的方式也和读取类似:CPU想要写入的对应地址放在MAR里,想要写入的数据放在MDR里,最后通过控制总线告诉主存储器本次为写操作。

MAR是里有指向存储单元的地址,因此MAR反映存储单元的个数

MDR是有由要存储到MAR指向地址的数据内容,反映存储单元的存储字长

3.2.运算器

运算器是用于实现算术运算和逻辑运算的,内部有:

  1. ACC累加器:实际是一个寄存器,用于存放操作数或运算结果

  2. MQ乘商寄存器:在乘、除运算的时候,用于存放操作数或运算结果

  3. X通用寄存器:通用的操作数寄存器,用于存放操作数

  4. ALU算术逻辑单元:通过内部复杂的电路实现算术运算、逻辑运算,是运算器的核心部件,制作成本也是最高的。

ACC被加数、和被减数、差乘积高位被除数、余数
MQ乘数、乘积低位
X加数减数被乘数除数

在这里插入图片描述

乘积的高位表示了乘法结果的较高位数部分,而乘积的低位表示了较低位数部分。

3.3.控制器

控制器内部有:

  1. CU控制单元(Control Unit):分析指令,给出控制信号,内部有很复杂的电路,是控制器内最核心的部件

  2. IR指令寄存器(Instruction Register):本质是一个寄存器,存放当前执行的指令

  3. PC程序计数器(Program Counter):本质是一个寄存器,存放下一条指令地址,有自动+1的功能

在这里插入图片描述

在控制器内部的工作逻辑是:PC取得指令->IR分析指令->CU执行指令,前面两个过程为“取指阶段”,后面一个过程为“执行阶段”

4.计算机硬件协调流程(现代)

下面是高级语言C语言的一段代码:

int a = 2, b = 3, c = 1, y = 0; 
int main() 
{
    y = a * b + c; 
    return 0; 
}

接下来让我们看看这段代码在计算机硬件中运作流程:

在这里插入图片描述

4.1.执行指令0

  1. (PC)=0,(PC)++CPU内部的PC存储的是下一条指令的地址,因此PC=0,即:PC存储了第一条指令的代码地址,在执行后续的步骤后PC自动+1(PC是程序计时器,可以存放下一条指令地址,有自动+1的功能)

  2. (PC)->MAR,(MAR)=0,(MAR)->存储体->MDR,(MDR)=0000 01|00 0000 0101PC将指令地址交给MARMAR通过这个指令地址在存储体内部查找指令数据,存储到MDR

  3. (MDR)->IR:从MDR得到的指令数据存放到IR中(IR负责存放当前执行的指令)

  4. (IR)->CU,(IR)->MAR,(MAR)->存储体->MDR,(MDR)=0000 0000 0000 0010=2:而在当前要执行的指令中,前六位0000 01操作码会被送到CU分析,得知这是“取数dACC”的命令,后10位代表这个数的地址在主存储器存储体的5处。因此IR把后续的10位交给MARMAR再去存储体内找主存地址5处的a的数据0000 0000 0000 0010=2存入MDR中(CU控制单元负责分析指令,给出控制信号)

  5. (MDR)->ACC:因此0000 0000 0000 0010=2被拷贝到IR内部,然后CU控制MDR送到ACC

4.2.执行指令1

根据“4.1.执行指令0”中的步骤1,OP(PC)=1,(ACC)=2,然后就会发生:

  1. (PC)=1,(PC)->MAR,(MAR)=1,(MAR)->存储体->MDR,(MDR)=0000 01|00 0000 0101,(PC)++PC内部存储了当前要第二条指令的地址,在执行了后续的步骤了+1,然后MAR得到的指令地址是“1”,传递给MAR后,MAR在存储体中找到指令0000 01|00 0000 0101

  2. (MDR)->IR,(IR)->CU,(IR)->MAR,(MAR)->存储体->MDR,(MDR)=0000 0000 0000 0011=3:接下来MDR将内部的指令传给IRIR交给CU分析后得知前六位0001 00为“乘法操作,将ab并且存储到ACC中” ,后10位00 0000 0101为操作数地址,于是这个地址就被IP传给MAR在存储体中找到并且存储给MDR

  3. (MDR)->MQ,(MQ)=0000 0000 0000 0011=3:接下来CU控制MDR内部的数据拷贝到MQMQ乘商寄存器:在乘、除运算的时候,用于存放操作数或运算结果,这里是存储了乘数b

  4. (ACC)->X,(X)=0000 0000 0000 0010=2,ALU->(X)*(MQ)->ACC,(ACC)=6CU控制ACC里的值拷贝到通用寄存器X里,然后控制ALU把通用寄存器X里的值和乘商寄存器MQ里的值相乘,然后存储到ACC中(如果乘积太大,MQ也会辅助存储,存储的是乘积低位,ACC那边则是乘积高位)

4.3.执行指令2

根据“4.2.执行指令1”中的步骤1,OP(PC)=2,(ACC)=6,然后就会发生:

  1. (PC)->MAR,(MAR)=2,(MAR)->存储体->MDR,(MDR)=0000 11|0000 0000 0000 0111,(PC)++PC将指令地址拷贝给MARMAR在存储体内查找到指令,拷贝给MDR,然后PC内部的计时器+1,存储了指向下一条指令的地址

  2. (MDR)->IR,(IR)->CU,(IR)->MAR,(MAR)=0000 0000 0000 0111=7,(MAR)->存储体->MDR,MDR=0000 0000 0000 0001=1:MDR内部的指令值拷贝给IRIR传递给CU分析指令,得知0000 11为“加法指令ab+c,并且最终存储在ACC中”,于是CU控制IR剩下的0000 0000 0000 0111,传递给MARMAR在存储体内找到指令数据0000 0000 0000 0001,传递给MDR

  3. (MDR)->X,(x)=0000 0000 0000 0001=1,ALU->(ACC)+(X)->ACC:然后MDR将内部数据拷贝到通用寄存器X内,接下来控制单元CUALU发生信号,让XACC里的值相加,最后存储到ACC内部

4.4.执行指令3

根据“4.3.执行指令3”中的步骤1,OP(PC)=3,(ACC)=7,然后就会发生:

  1. (PC)->MAR,(MAR)=3,(MAR)->存储体->MDR,(MDR)=0000 10|0000 0000 0000 1000,(PC)++

  2. (MDR)->IR,(IR)->CU,(IR)->MAR,(MAR)=0000 0000 0000 1000=8,(MAR)->存储体->MDR,MDR=0000 0000 0000 0000=0

  3. (ACC)=7,(ACC)->MDR,(MDR)=7,(MAR)=0000 0000 0000 1000=8:这里就有个地方需要注意,CU控制了ACC寄存器的值拷贝到MDR,此时MAR也有y变量的主存地址,此时CU再控制MARMDRab+c存入y

4.5.执行指令4

根据“4.4.执行指令4”中的步骤1,OP(PC)=4,然后像上面一样类似的流程,取得000110停机指令,接下来就会执行操作系统的相关指令了,这后面的我们不再讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【递归、搜索与回溯算法练习】day1

文章目录 一、面试题 08.06. 汉诺塔问题1.题目简介2.解题思路3.代码4.运行结果 二、21. 合并两个有序链表1.题目简介2.解题思路3.代码4.运行结果 三、206. 反转链表1.题目简介2.解题思路3.代码4.运行结果 总结 一、面试题 08.06. 汉诺塔问题 1.题目简介 面试题 08.06. 汉诺塔…

玩转LaTeX(二)【特殊字符、插图设置、表格、浮动体】

特殊字符: 导言区:(添加几个宏包) \usepackage{xltxtra} %\XeLaTeX(提供了针对XeTeX的改进并且加入了XeTeX的LOGO)\usepackage{texnames} %LOGO\usepackage{mflogo}\usepackage{ctex} 正文区: \begin{document}…

vue拖拽改变宽度

1.封装组件ResizeBox.vue <template><div ref"resize" class"resize"><div ref"resizeHandle" class"handle-resize" /><slot /></div> </template> <script> export default {name: Resi…

【八】mybatis 日志模块设计

mybatis 日志模块设计 简介&#xff1a;闲来无事阅读一下mybatis的日志模块设计&#xff0c;学习一下优秀开源框架的设计思路&#xff0c;提升自己的编码能力 模块设计 在Mybatis内部定义了4个级别&#xff1a;Error:错误 、warn:警告、debug:调试、trance&#xff0c;日志优…

C++STL序列式容器——vector容器详解

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 &#x1f4ac;文章目录 一.vector容器基本概念二.vector常用操作①vector构造函数②特性操作③元素操作④赋值操作⑤交换操作⑥比较操作⑦插入和删除操作 一.vector容器基…

MATLAB编程实践12、13

生命游戏 游戏的宇宙是无限可扩展的二维矩形网格&#xff0c;群体是那些标注为存活的网格的集合。群体可以依照称为代的离散时间步距进化。在每一步中&#xff0c;每个网格的命运由它周围最近的8个网格邻居的活度决定&#xff0c;规则如下&#xff1a; 如果一个存活的网格有两个…

想阻止BOT攻击?一起聚焦灵活有效的F5解决方案

伴随着突如其来的数字创新&#xff0c;使潜在的欺诈无处不在。现在&#xff0c;帮我们查找机票交易、位置理想的演唱会座位的 BOT技术正在为网络犯罪分子所利用。权威数据表示&#xff0c;在过去5年&#xff0c;撞库攻击已成为造成经济损失的最大原因之一&#xff0c;几乎每个企…

小研究 - 基于解析树的 Java Web 灰盒模糊测试(二)

由于 Java Web 应用业务场景复杂, 且对输入数据的结构有效性要求较高, 现有的测试方法和工具在测试Java Web 时存在测试用例的有效率较低的问题. 为了解决上述问题, 本文提出了基于解析树的 Java Web 应用灰盒模糊测试方法. 首先为 Java Web 应用程序的输入数据包进行语法建模创…

前端技术周刊 2023-07-30:Promise.withResolvers 进入 Stage3

项目地址&#xff1a;olivewind/weekly[1] 微信公众号&#xff1a;依赖注入 发布时间&#xff1a;2023.07.30 本周内容&#xff1a;资讯x2、开源x8、文章x4 动态 Promise.withResolvers 进入 Stage3 某些情况下需要在 Promise 外部获取 resolve 和 reject 句柄&#xff0c;我们…

【云原生】一文学会Docker存储所有特性

目录 1.Volumes 1.Volumes使用场景 2.持久将资源存放 3. 只读挂载 2.Bind mount Bind mounts使用场景 3.tmpfs mounts使用场景 4.Bind mounts和Volumes行为上的差异 5.docker file将存储内置到镜像中 6.volumes管理 1.查看存储卷 2.删除存储卷 3.查看存储卷的详细信息…

RWEQ模型参量提取

土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2&#xff0c;占国土总面积的16.7%&#xff0c;严重影响这些地区的资源开发和社会经…

机器学习深度学习——Dropout

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——权重衰减 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们有所帮助 Drop…

【MTI 6.S081 Lab】traps

【MTI 6.S081 Lab】traps RISC-V assembly (easy)Backtrace (moderate)实验任务Hints解决方案backtracesys_sleep Alarm (hard)实验任务test0: invoke handlerHint test1()/test2()/test3(): resume interrupted codeHints 解决方案trap.c中的时钟中断处理程序sys_sigalarmsys_…

大促之前全链路压测监控

1. skywalking服务监控 1.1 skywalking简介 Skywalking 是一个APM系统&#xff0c;即应用性能监控系统&#xff0c;为微服务架构和云原生架构系统设计 它通过探针自动收集所需的指标&#xff0c;并进行分布式追踪&#xff0c;通过这些调用链路以及指标&#xff0c;Skywalking …

使用Postman如何在接口测试前将请求的参数进行自定义处理

1、前言 当我们使用 Postman 进行接口测试时&#xff0c;对于简单的不需要处理的接口&#xff0c;直接请求即可&#xff0c;但是对于需要处理的接口&#xff0c;如需要转码、替换值等&#xff0c;则就麻烦一些&#xff0c;一般我们都是先手动把修改好的值拷贝到请求里再进行请…

计算机的大小端模式

计算机的大小端模式 大端/小端字节序字节序转换函数判断Linux字节序的方法string有字节序的说法吗64位系统和32位系统的区别 大端/小端字节序 计算机硬件有两种储存数据的方式&#xff1a;大端字节序&#xff08;big endian&#xff09;和小端字节序&#xff08;little endian…

MySQL数据库——DQL操作——基本查询

文章目录 前言事前准备——测试数据整表查询指定列查找别名查询MySQL运算符条件查询模糊查询排序查询聚合查询分组查询分组之后的条件筛选 分页查询将整张表的数据插入到另一张表中 前言 MySQL数据库常见的操作是增删查改&#xff0c;而其中数据的查询是使用最多&#xff0c;也…

玩转LaTeX(三)【数学公式(基础)、​矩阵、多行公式】

数学公式基础 导言区&#xff08;引包&#xff09; \usepackage{amsmath} %带星号的eqution 正文区 \begin{document}%数学公式初步 \section{简介} \LaTeX{}将排版内容分为文本模式和数学模式。文本模式用于普通文本排版&#xff0c;数学模式用于数学公式排版。 …

小白带你学习linux的mysql服务(主从mysql服务和读写分离三十一)

目录 二、MySQL Replication优点&#xff1a; 三、MySQL复制类型 1、异步复制&#xff08;Asynchronous repication&#xff09; 2、全同步复制&#xff08;Fully synchronous replication&#xff09; 3、半同步复制&#xff08;Semisynchronous replication&#xff09;…

用pip给python安装第三方包

2023年7月30日&#xff0c;周日晚上 目录 搜索包安装包升级包卸载包查看安装了哪些包查看指定的包的详细信息查看pip把某个包安装到了哪里 搜索包 现在只能去专门的网站搜索python的第三方包了 Search results PyPI 安装包 通过下面这条指令就可以安装包 pip install pac…