【计算机组成原理】计算机硬件的基本组成、详细结构、工作原理

news2025/6/8 6:36:31

引言

计算机如同现代科技的“大脑”,其硬件结构的设计逻辑承载着信息处理的核心奥秘。从早期程序员手动输入指令的低效操作,到冯诺依曼提出“存储程序”概念引发的革命性突破,计算机硬件经历了从机械操控到自动化逻辑的蜕变。本文将深入拆解计算机硬件的底层架构,从冯诺依曼结构的五大部件出发,逐步剖析现代计算机以存储器为中心的优化设计,揭示主存、运算器、控制器如何通过总线协同工作,最终实现指令的解析与数据的运算——这不仅是理解计算机工作原理的基石,更是窥探数字世界运行规律的钥匙。
在这里插入图片描述

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

1.1 早期的冯诺依曼机构

最初的计算机需要手动输入每个指令,工作方式:程序员输入一个指令,计算机处理该指令,然后程序员再输入一个指令,机器接着处理该指令(一直循环)…

冯诺依曼提出“存储程序”:
存储程序”的概念是指将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。
在这里插入图片描述
各硬件的工作:
在这里插入图片描述
总线的作用
数据总线:传输数据(如指令、运算数据、结果),双向交互(CPU↔主存、主存↔外设)。
地址总线:指定内存或外设的地址(单向,由 CPU 或控制器发出)。
控制总线:传输控制信号(如读写命令、中断请求),协调各部件时序和操作。

当软件的指令传输到输入设备后,输入设备把信息转换成机器能识别的二进制形式,然后数据流入到运算器,运算器进行运算,然后把内容存放到存储器,控制器解析存储器的每条指令后指挥运算器做出正确的运算,最后把运算的结果给输出设备,输出设备把内容转换成人类熟悉的形式。

冯·诺依曼计算机的特点:
1.计算机由五大部件组成
2.指令和数据以同等地位存于存储器,可按地址寻访
3.指令和数据用二进制表示
4.指令由操作码和地址码组成
5.存储程序
6.以运算器为中心:输入/输出设备与存储器之间的数据传送通过运算器完成

可以把计算硬件的工作原理理解为一个加工厂:
在这里插入图片描述
通过图可以发现,采购部门采购的原材料其实更应该放在存储部门,而冯诺依曼的结构设计的是放在加工部门,这其实不太合理,所以现代的计算机结果做了一些改进

1.2 现代计算机结构

1.2.1 现代计算机结构

冯诺依曼结构有一定的不合理性,对冯诺依曼结果做出了改进,改进后的结果就是现代计算机结构:
在这里插入图片描述
数据与程序输入
输入设备(如键盘、鼠标等)将外部的信息,包括数据和程序,转换为计算机能够处理的二进制数据形式,然后传输给计算机。

存储环节
存储器分为内存(主存)和外存 。输入的程序和数据首先进入内存,内存用于临时存储正在运行的程序和数据,速度快但断电后数据丢失;外存(如硬盘、固态硬盘等)用于长期存储大量数据,断电后数据不丢失。此外,还有缓存(Cache),位于CPU内部,可高速存取常用数据,提升数据访问效率。

运算与控制流程

  • 指令执行:控制器从内存中(存储器)按顺序读取指令(取指令),对指令进行分析解读(解码),确定要执行的操作以及操作数的地址等信息 ,然后指挥运算器执行相应操作(执行),比如算术运算(加、减、乘、除等)和逻辑运算(与、或、非等)。运算器执行完指令后,将结果写回内存或寄存器(写回) 。这一过程不断循环,实现程序的逐步执行。
  • 控制协调:控制器是计算机的指挥中心,它根据指令的要求,协调计算机各个部件的工作,确保整个计算机系统有序运行。例如控制数据在各部件之间的流动方向和时机等。

结果输出
运算器处理完数据后,将最终的计算结果存回存储器,然后通过输出设备(如显示器、打印机等)将计算机处理的结果转换为人类能够感知的形式(如文字、图像、声音等)呈现出来。

在整个过程中,数据以二进制形式在各部件之间通过总线(包括数据总线、地址总线、控制总线 )进行传输。数据总线传输数据,地址总线指定内存位置,控制总线传输指令和控制信号 ,各部件协同工作,实现计算机对数据的处理和任务的执行。

总之,
现代计算器一存储器为中心

由于运算器控制器的关系十分紧密,所以在大规模集成电路出现后把运算器和控制器集成在一个芯片上,即CPU

1.2.2 CPU

CPU = 运算器 + 控制器

在这里插入图片描述

输入设备(如键盘、鼠标等) 将外部数据(如用户指令、文件内容)和程序转换为二进制形式,通过总线传输至 主存储器(内存) 存储。这些数据和程序是计算机后续处理的 “原材料”。

CPU(运算器 + 控制器) 从主存中 取指令(Fetch):

  • 译码(Decode)控制器解析指令,确定操作类型(如算术运算、数据传输)和操作数地址。
  • 执行(Execute)控制器给出指令,运算器根据指令执行算术逻辑运算(如加减乘除、与或非等),处理数据。

写回(Store):运算结果写回主存,供后续指令使用。

输出设备(如显示器、打印机) 从主存接收处理后的二进制数据,转换为人类可感知的形式(如文字、图像)呈现结果。

注意:
这里的主机和我们看到的电脑主机不一样,这里的主机指:CPU + 主存,看到的电脑主机:CPU + 主存 + 硬盘 + 风扇 + 外壳 + …

1.2.3 总结

在这里插入图片描述
注意:
主存:我们通常叫做运行内存
辅存:通常叫做硬盘、外存

2. 计算及硬件的详细结构

2.1 主存储器的基本组成

2.1.1 主存储器的基本组成

在这里插入图片描述

  1. 存储体(Memory Array):实际存储数据和指令的物理单元,由大量存储单元组成,每个单元对应唯一地址,可进行读写操作。

  2. 存储地址寄存器(MAR, Memory Address Register):暂存访问主存的目标地址。CPU或控制器通过MAR指定存储单元位置,决定寻址范围。

  3. 存储数据寄存器(MDR, Memory Data Register):暂存读写主存的数据。读操作时,存储体数据先入MDR再传输到CPU;写操作时,CPU数据先入MDR再写入存储体,起数据缓冲和同步作用。

主存储器的结构可以比作为一个菜鸟驿站:
在这里插入图片描述

2.1.2 存储体的结构

在这里插入图片描述

  1. MAR对应存储体的的地址,MAR的大小 == 存储单元的个数。
  2. MDR对应存储体的存储单元,MDR的大小 == 存储单元的大小。
  3. MAR和MDR的工作原理:CPU传输地址给MAR,存储体根据MAR提供的地址把地址对应的存储单元储存到MDR。

2.2 运算器的基本组成

运算器用于实现算术运算(如:加减乘除)、逻辑运算(如:与或非)
在这里插入图片描述
解释:

  1. ACC:累加器,用于存放操作数,或运算结果。
  2. MQ:乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。
  3. X:通用的操作数寄存器,用于存放操作数
  4. ALU:算术逻辑单元,通过内部复杂的电路实现算数运算、逻辑运算

做不同的运算时各元件的存储内容:
在这里插入图片描述

总览:
在这里插入图片描述

2.3 控制器的基本组成

控制器的组成及说明:
在这里插入图片描述
执行过程:
在这里插入图片描述
PC进行取指令,取到的指令存入IR

PC和IR的工作也叫做取指

3. 工作原理

3.1 编译结果

当我们在编译器中写一个代码,该代码会被编译成一个机器指令:
在这里插入图片描述
指令区(地址 0~4)

  1. 操作码:表示指令功能(如取数、乘法、加法、存储、停机)。
  2. 地址码:指向操作数的主存地址(或直接数据,如停机指令的地址码无实际意义)。

存储程序与程序控制

  • 指令和数据同存主存,CPU按PC顺序取指(地址0→1→2→3→4),依次执行(取数、乘、加、存数、停机)。
  • 每条指令通过操作码(定义功能)地址码(定位数据/存储地址),在控制器(CU)协调下,利用运算器(ACC)完成算术逻辑运算,最终将结果存入主存(y=7)。

执行流程

  1. 地址 0(取数 a):将主存地址 5(a=2)的数据加载到累加器(ACC)。
  2. 地址 1(乘 b):ACC 中的a与地址 6(b=3)的数据相乘,结果(6)存回 ACC。
  3. 地址 2(加 c):ACC 中的ab与地址 7(c=1)的数据相加,结果(7)存回 ACC。
  4. 地址 3(存储 y):将 ACC 结果存入地址 8(y的初始值为 0,更新后为7)。
  5. 地址 4(停机):结束程序执行。

数据区(地址 5~8):存储原始数据(a=2、b=3、c=1、y=0),以二进制形式表示(如地址 5 的000…010即十进制2)。

3.2 详细工作原理

(1)取数过程(取2放到ACC中):
在这里插入图片描述
说明:

  1. (PC)->MAR 表示 取PC里面的值给MAR
  2. M(MAR)->MDR 表示 在主存体中取出地址为(MAR)存储单元,然后放入MDR中。
  3. OP(IR) -> CU 表示 取IR中的操作码给CU,CU进行分析是什么操作
  4. Ad(IR) -> MAR 取IR中的地址码给MAR

(2)下一个取数在这里插入图片描述

为什么(ACC)还要移动到 X呢?
在这里插入图片描述
由上图可知,被乘数需要放在X中,乘积的结果放在ACC中。

(3)取下一个数
在这里插入图片描述
为什么最后一步的(MDR)直接放到X中?
在这里插入图片描述
由上图可知,被加数放在ACC中,加数放在X中。

(4)存数
在这里插入图片描述
指令执行流程:

  1. 取指阶段

    • PC→MAR:PC(3)送MAR,定位主存地址3(指令“存数”)。
    • 主存→MDR→IR:读取地址3的指令(000010 0000001000)到MDR,再存入IR。
    • PC更新:PC自动+1(指向下一条指令地址4,停机)。
  2. 分析阶段

    • 操作码→CU:CU解析IR中的操作码(000010,存数指令),生成控制信号(如写主存、ACC输出)。
    • 地址码→MAR:地址码(0000001000,地址8)送MAR,指定存储目标地址(y的内存位置)。
  3. 执行阶段

    • ACC→MDR:ACC(7,运算结果)送MDR。
    • MDR→主存地址8:将7写入地址8(更新y的值为7,右侧表格绿色行)。

(5)停机
在这里插入图片描述

指令执行流程:

  1. 取指阶段

    • PC→MAR:上一条指令(地址3,存数)执行后,PC=4(指向下一条指令地址4),送MAR(MAR=4)。
    • 主存→MDR→IR:读取地址4的指令(000110 0000000000,停机指令)到MDR,再存入IR。
    • PC更新:PC自动+1(指向地址5,无实际作用,因程序已终止)。
  2. 分析阶段

    • 操作码→CU:CU解析IR中的操作码(000110,停机),生成控制信号(如通知操作系统终止进程,释放资源)。
  3. 执行阶段

    • CU触发停机:通过中断机制(如软件中断)终止程序执行,CPU不再取指,硬件进入空闲或低功耗状态。

4. 总结

4.1 从冯・诺依曼到现代计算机的架构变革

存储程序的核心思想:冯・诺依曼体系奠定了 “指令与数据同存于主存、按地址顺序执行” 的基础,通过运算器、控制器、存储器、输入 / 输出设备五大部件协同,实现 “取指 - 译码 - 执行” 的循环。

现代架构的优化:从 “以运算器为中心” 进化为 “以存储器为中心”,引入多级存储体系(寄存器、Cache、主存、外存)和总线结构(数据 / 地址 / 控制总线),通过多核 CPU、流水线技术等提升并行处理能力,缓解 “冯・诺依曼瓶颈”。

4.2硬件部件的协同逻辑

主存储器:通过存储体、MAR、MDR 实现指令与数据的读写,是 CPU 与外存的数据中转站;
运算器:以 ALU 为核心,借助 ACC、MQ、X 等寄存器完成算术逻辑运算,是数据处理的 “加工厂”;
控制器:通过 PC(程序计数器)、IR(指令寄存器)和 CU(控制单元),按序调度指令执行,是硬件协同的 “指挥中心”。

4.3指令执行的本质流程

以 “y = a*b + c” 为例,从高级语言到机器指令的转换与执行,本质是:

(1) 编译阶段:高级语言转为二进制指令(操作码 + 地址码),存入主存;
(2) 执行阶段:CPU 按 PC 顺序取指,通过 MAR/MDR 与主存交互,CU 解析操作码后控制运算器完成乘加运算,结果存回主存;
(3) 终止阶段:停机指令触发硬件资源释放,程序执行结束。

4.4硬件设计的核心哲学

计算机硬件的演进始终围绕 “效率与成本的平衡”:通过寄存器加速数据访问、Cache 缓解主存延迟、总线拓宽数据通路,同时以标准化接口(如 PCIe、USB)实现部件扩展。从机械到电子、从单核到多核,其底层逻辑始终遵循冯・诺依曼 “存储程序” 的设计范式,而这一范式也成为连接硬件架构与软件逻辑的桥梁,支撑着现代计算技术的持续创新。

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

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

相关文章

MVC分层架构模式深入剖析

🔄 MVC 交互流程 #mermaid-svg-5xGt0Ka13DviDk15 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5xGt0Ka13DviDk15 .error-icon{fill:#552222;}#mermaid-svg-5xGt0Ka13DviDk15 .error-text{fill:#552222…

新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案

新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案 摘要:突破续航焦虑的关键在热能循环! 👉 本文耗时72小时梳理行业前沿方案,含特斯拉/比亚迪等8家车企热管理系统原理图 一、热管理为何成新能源车决胜关键&am…

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1开通指南及使用心得

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站排名top 28。 🏆数年电商行业从业经验,AWS/阿里云资深使用用…

运行示例程序和一些基本操作

欢迎 ----> 示例 --> 选择sample CTRL B 编译代码 CTRL R 运行exe 项目 中 Shadow build 表示是否 编译生成文件和 源码是否放一块 勾上不在同一个地方 已有项目情况下怎么打开项目 方法一: 左键双击 xxx.pro 方法二: 文件菜单里面 选择打开项目

学习数字孪生,为你的职业发展开辟新赛道

你有没有想过,未来十年哪些技能最吃香? AI、大数据、智能制造、元宇宙……这些词频繁出现在招聘市场和行业报告中。而在它们背后,隐藏着一个“看不见但无处不在”的关键技术——数字孪生(Digital Twin)。 它不仅在制造…

WebRTC源码线程-1

1、概述 本篇主要是简单介绍WebRTC中的线程,WebRTC源码对线程做了很多的封装。 1.1 WebRTC中线程的种类 1.1.1 信令线程 用于与应用层的交互,比如创建offer,answer,candidate等绝大多数的操作 1.1.2 工作线程 负责内部的处理逻辑&…

MySQL中的内置函数

文章目录 一、日期函数1.1 获取当前的日期1.2 获取当前时间1.3 获取当前日期和时间1.4 提取时间日期1.5 添加日期1.6 减少日期1.7 两个日期的差值 二、字符串处理函数2.1 获取字符串的长度2.2 获取字符串的字节数2.3 字符串拼接2.4 转小写2.5 转大写2.6 子字符串第⼀次出现的索…

YOLOv8n行人检测实战:从数据集准备到模型训练

YOLOv8n行人检测实战:从数据集准备到模型训练 一、为什么选择YOLOv8?二、环境准备2.1 环境配置解析 三、安装Ultralytics框架四、数据集准备与理解4.1 数据集下载4.2 数据集结构4.3 YOLO标签格式解析 五、数据集可视化:理解标注数据5.1 可视化…

国标GB28181设备管理软件EasyGBS远程视频监控方案助力高效安全运营

一、方案背景​ 在商业快速扩张的背景下,连锁店门店数量激增,分布范围广。但传统人工巡检、电话汇报等管理方式效率低下,存在信息滞后、管理盲区,难以掌握店铺运营情况,影响企业效率与安全。网络远程视频监控系统可有…

网络寻路--图论

所以我们固定题中M条边&#xff08;因为这M条一定联通&#xff09; P8605 [蓝桥杯 2013 国 AC] 网络寻路 - 洛谷 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<int,int> pii; int n,m; int d[N],u[N],v[N]…

LangChain4j 学习教程项目

LangChain4j 学习教程 项目地址项目简介主要功能使用的技术和库项目环境配置环境要求 依赖版本每天学习内容和目标Day 01Day 02Day 03Day 04Day 05Day 06Day 07Day 08Day 09Day 10Day 11Day 12重点学习内容 RAG 经过为期12天&#xff08;日均1小时&#xff09;的LangChain4j源码…

【读论文】U-Net: Convolutional Networks for Biomedical Image Segmentation 卷积神经网络

摘要1 Introduction2 Network Architecture3 Training3.1 Data Augmentation 4 Experiments5 Conclusion背景知识卷积激活函数池化上采样、上池化、反卷积softmax 归一化函数交叉熵损失 Olaf Ronneberger, Philipp Fischer, Thomas Brox Paper&#xff1a;https://arxiv.org/ab…

Linux 文件系统与 I/O 编程核心原理及实践笔记

文章目录 一、理解文件1.1 狭义理解1.2 广义理解1.3 文件操作的归类认识1.4 系统角度&#xff1a;进程与文件的交互1.5 实践示例 二、回顾 C 文件接口2.1 hello.c 打开文件2.2 hello.c 写文件2.3 hello.c 读文件2.4 输出信息到显示器的几种方法2.5 stdin & stdout & st…

vite+tailwind封装组件库

前言 演示视频 https://www.bilibili.com/video/BV1EST3zPEyP/?spm_id_from333.1387.homepage.video_card.click 参考 https://juejin.cn/post/7112295067682865166 https://juejin.cn/post/7046187185615142949 代码仓库 https://gitee.com/malguy/vite-components-li…

【Java学习笔记】包装类

包装类&#xff08;Wrapper&#xff09; 1. 介绍 &#xff08;1&#xff09;针对八种基本数据类型相应的引用类型 --> 包装类 &#xff08;2&#xff09;有了类的特点&#xff0c;就可以调用类中的方法 2. 分类和继承关系 基本数据类型包装类父类booleanBooleanObjectc…

【高效开发工具系列】Blackmagic Disk Speed Test for Mac:专业硬盘测速工具

博客目录 一、Blackmagic Disk Speed Test 概述二、软件核心功能解析三、v3.3 版本的新特性与改进四、实际应用场景分析五、使用技巧与最佳实践六、与其他工具的比较及优势 一、Blackmagic Disk Speed Test 概述 Blackmagic Disk Speed Test 是 Mac 平台上广受专业人士青睐的一…

UniRig:如何在矩池云一站式解决 3D 模型绑定难题

在 3D 动画制作中&#xff0c;绑定&#xff08;Rigging&#xff09;是一个至关重要但复杂耗时的步骤。它包括为 3D 模型创建骨架并分配蒙皮权重&#xff0c;以实现流畅的动画效果。由清华大学与 Tripo 联合开发的 UniRig 框架&#xff0c;为这一难题提供了全新的解决方案。 什…

字符串字典序最大后缀问题详解

字符串字典序最大后缀问题详解 一、问题定义与背景1.1 问题描述1.2 实际应用场景 二、暴力解法及其局限性2.1 暴力解法思路2.2 代码示例2.3 局限性分析 三、双指针算法&#xff1a;高效解决方案3.1 算法核心思想3.2 算法步骤3.3 代码实现3.4 与暴力解法对比 四、复杂度分析4.1 …

VScode打开后一直显示正在重新激活终端 问题的解决方法

一、问题 本人打开“.py”文件后&#xff0c;同时会出现以下两个问题。 1、VScode一直循环在”正在重新激活终端“ 2、日志显示intellicode报错&#xff1a; Sorry, something went wrong activating IntelliCode support for Python. Please check the “Python” and “VS I…

pe文件结构(TLS)

TLS 什么是TLS? TLS是 Thread Local Storage 的缩写&#xff0c;线程局部存储。主要是为了解决多线程中变量同步的问题 如果需要要一个线程内部的各个函数调用都能访问&#xff0c;但其它线程不能访问的变量&#xff08;被称为static memory local to a thread 线程局部静态变…