CPU 工作原理(附详细图解)

本文介绍了计算机的发展历程,重点讲解了冯诺依曼体系结构及其在现代计算机中的应用。CPU作为计算机的核心,由运算器和控制单元组成,负责指令的执行。文章详细阐述了CPU的基本工作过程,包括取指令、指令译码、执行指令、访存取数和结果写回五个阶段,并提及了中断模式。通过生动的比喻,帮助读者理解CPU如何处理数据和控制程序流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🌸学习目标🌸

本章我们将从软件工程师的角度去了解计算机是如何工作的,通过对计算机核心工作机制的学习,有利于理解我们平时编程时的一些行为,动作的历史渊源。

在学习 CPU(中央处理器)之前,我们先来简单的了解一下💻计算机💻的发展历史。

让我们一起出发吧!!!😀😀😀

一. 计算机发展史

计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。计算机的发展大体经历了从一般计算工具到机械计算机到目前的电子计算机的发展历程。

冯诺依曼体系(Von Neumann Architecture)

约翰·冯·诺依曼(John von Neumann,1903年12月28日-1957年2月8日),美籍匈牙利数学家,计算机科学家,物理学家,是20世纪最重要的数学家之一。冯·诺依曼是罗兰大学数学博士,是现代计算机,博弈论,核武器和生化武器等领域内的科学全才之一,被后人称为“现代计算机之父”、“博弈论之父”。

现代的计算机, 大多遵守 冯诺依曼体系结构。

  • CPU,即中央处理器,是一台计算机的运算核心和控制核心。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU由运算器、控制器、寄存器、高速缓存及实现它们之间联系的数据、控制及状态的总线构成
  • 存储器分为外存和内存, 用于存储数据(使用二进制方式存储)
  • 输入设备,用户给计算机发号施令的设备
  • 输出设备,计算机个用户汇报结果的设备

二. CPU 的基本工作过程

CPU = ALU ➕ CU 

ALU 算术逻辑单元(Arithmetic&logical Unit)是中央处理器(CPU)的执行单元,是所有中央处理器的核心组成部分,由"And Gate"(与门) 和"Or Gate"(或门)构成的算术逻辑单元,主要功能是进行二位元的算术运算,如加减乘(不包括整数除法)。基本上,在所有现代CPU体系结构中,二进制都以补码的形式来表示。

CU 控制单元(Control Unit):负责程序的流程管理。控制单元是整个 CPU 的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操作控制器OC(Operation Controller)三个部件组成,对协调整个电脑有序工作极为重要。

 我们用一个例子来说明一下:假设 CPU 是一个工厂,一个核心就是工厂的一个车间

那么运算器 就是工厂里的普工,只负责生产(运算)

而 寄存器 呢,就是一个工具人,有时需要传递信息(数据),有时需要搬运物资(数据)。

控制器则是车间主管,管理调剂所有普工和工具人,压榨他们的劳动价值。

直到有一天,工厂发现一个车间(核心)效率不够,就只能增加车间(核心)来提高整个工厂效率。 

但是,渐渐的,又有新问题出现,工具人虽然效率高,但是数量不多,而随着越来越多的原材料(数据)涌入,工具人搬不过来。这时工厂就整了一个小板车(cache),专门用来运输、寄存工具人搬不过来的数据,而且各工厂可以共享其中一部分(intel 的 L3 cache)。

随着车间数量(核心数目)增加到八,工厂发现有些时候出货量挺高的(全车间都开工),但有些时候只有一两个个车间开工,其它车间都在围观(调度问题)。

而且整个工厂一起开工,用电量和发热量也急剧上升,但是各车间的效率(频率)就是上不去,此外,还要担心电力供给、散热、物资(数据)运输等各类问题。

终于,在投入了大研发后,工厂的厂房布局设计(架构)有了大改进。

各部门之间的交通更便利了;并且,工厂也重新招聘短小精悍的工人(提升制程工艺),将以前那种牛高马大,光吃不干的大块头全部淘汰了。至此,同样大的车间,能融入更多的工人干活了,而且短小精悍的工人,吃的饭还少(功耗低)。

CPU的工作过程

CPU的基本工作是执行存储的指令序列,即程序。程序的执行过程实际上是不断地取出指令、分析指令、执行指令的过程。

 CPU指令的执行流程

一、取指令阶段
取指令(Instruction Fetch,IF)阶段是将一条指令从主存中取到指令寄存器的过程。

程序计数器PC中的数值,用来指示当前指令在主存中的位置。当一条指令被取出后,PC中的数值将根据指令字长度而自动递增。

二、指令译码阶段
取出指令后,计算机立即进入指令译码(Instruction Decode,ID)阶段。

在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别以及各种获取操作数的方法。

三、执行指令阶段
在取指令和指令译码阶段之后,接着进入执行指令(Execute,EX)阶段。

此阶段的任务是完成指令所规定的各种操作,具体实现指令的功能。为此,CPU的不同部分被连接起来,以执行所需的操作。

四、访存取数阶段
根据指令需要,有可能要访问主存,读取操作数,这样就进入了访存取数(Memory,MEM)阶段。

此阶段的任务是:根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算。

五、结果写回阶段
作为最后一个阶段,结果写回(Write Back,WB)阶段把执行指令阶段的运行结果数据“写回”到某种存储形式。

结果数据经常被写到CPU的内部寄存器中,以便被后续的指令快速地存取;

在有些情况下,结果数据也可被写入相对较慢、但较廉价且容量较大的主存。许多指令还会改变程序状态字寄存器中标志位的状态,这些标志位标识着不同的操作结果,可被用来影响程序的动作。

在指令执行完毕、结果数据写回之后,若无意外事件(如结果溢出等)发生,计算机就接着从程序计数器PC中取得下一条指令地址,开始新一轮的循环,下一个指令周期将顺序取出下一条指令。

CPU 的中断模式(Interrupt Mode)

在正常情况下,CPU 可以顺序执行,也可以分支执行。但总归是按照既定顺序去执行。

但现实中,很多时候,需要暂时中断 CPU 的当前执行流,先让 CPU 去做点其他的工作,再回头来继续原来的执行流。

 CPU 硬件中提供了一种机制(中断)让 CPU 停下:

  1. 保存当前的 PC 的值到内存的某个位置
  2. 修改 PC 的值,让执行其他执行流
  3. 其他执行流执行结束之后,通过将刚才保存的 PC 值恢复到 PC 寄存器
  4. 继续原来的执行流
<think>嗯,用户之前让我比较单总线、双总线和三总线的性能特点,现在又问了DMA的主要作用和外设进行DMA操作的过程。看来他们可能在学习计算机组成原理或者系统结构相关的知识,需要理解数据传输机制。 首先,我需要确保自己对DMA的理解准确。DMA是直接存储器访问,主要作用是让外设直接和内存交换数据,而不需要CPU的参与,这样可以减轻CPU的负担,提高系统效率。用户可能已经知道总线结构,所以需要将DMA的作用和总线结构联系起来,比如在三总线结构中DMA总线的作用。 然后,外设进行DMA操作的过程可能需要分步骤说明。比如初始化阶段,CPU设置DMA控制器的参数,比如内存地址、传输数据量等。然后外设发出DMA请求,DMA控制器接管总线,开始数据传输,完成后中断CPU。这个过程需要详细但简洁,避免过于技术化。 还要考虑用户可能的疑问,比如为什么需要DMA,和传统的中断方式相比有什么优势。可能需要提到减少CPU中断次数,提高并行处理能力。但用户的问题主要是作用与过程,所以重点放在这两部分。 另外,用户之前的问题涉及总线结构,可能在理解DMA时需要考虑总线的使用情况。例如在DMA传输时,总线由DMA控制器控制,CPU暂时无法访问总线,这可能影响系统性能,但整体上DMA还是利大于弊。 需要确保回答结构清晰,分点说明主要作用和过程,可能用步骤化的方式让用户更容易理解。同时避免使用过多专业术语,或者适当解释术语,比如DMA控制器、总线仲裁等。 最后检查是否有遗漏的部分,比如DMA的应用场景,比如磁盘I/O、网络数据传输等,这样用户能更好地理解DMA的实际用途。可能还需要对比有无DMA的情况,突出其重要性。 总结下来,回答应包括DMA的定义、主要作用(减轻CPU负担,提高效率),然后分步骤描述DMA操作过程,强调初始化、请求、传输、完成中断等阶段,最后可能简要提及应用或优势。确保语言简洁,逻辑清晰。</think>--- ### **一、DMA的核心作用** **DMA(Direct Memory Access,直接存储器访问)** 是一种允许外设**直接与内存交换数据**的技术,无需通过CPU中转。其主要作用为: 1. **降低CPU负载**:避免CPU陷入频繁的中断与数据搬运操作。 2. **提升数据传输效率**:外设与内存间直接传输,减少中间环节延迟。 3. **支持高带宽设备**:适用于磁盘I/O、网络数据包传输等大数据量场景。 --- ### **二、DMA操作过程详解** 外设通过DMA传输数据的典型流程如下: #### **步骤1:DMA初始化** - **CPU配置DMA控制器**: - 设置**内存起始地址**(如接收数据的缓冲区地址)。 - 指定**传输数据量**(如字节数或数据块数量)。 - 选择**传输方向**(外设→内存 或 内存→外设)。 - **示例**:网卡接收数据时,CPU告知DMA控制器将数据存入内存地址`0x8000`,共传输`1500`字节。 #### **步骤2:外设发起DMA请求** - **外设准备就绪后**(如磁盘读取到数据或网卡收到数据包),向DMA控制器发送**DMA请求信号(DREQ)**。 - **DMA控制器接管总线**: - 向CPU发送**总线请求(HOLD)**,申请总线控制权。 - CPU完成当前总线周期后,释放总线并回复**总线授权(HLDA)**。 #### **步骤3:DMA数据传输** - **DMA控制器控制总线**: - 直接访问内存,按预设地址和长度完成数据搬运。 - 外设与内存间通过总线**批量传输数据**(如一次传输一个数据块)。 - **传输模式**: - **单次传输**:每次请求传输一个数据单元。 - **块传输**:连续传输整个数据块后释放总线。 #### **步骤4:传输完成与中断通知** - **DMA控制器完成传输**: - 若传输数据量达到预设值,DMA控制器释放总线控制权(撤销HOLD信号)。 - 向CPU发送**中断信号(IRQ)**,通知CPU处理数据。 - **CPU恢复总线控制**:继续执行原任务。 --- ### **三、DMA与CPU的协同关系** | **阶段** | **CPU角色** | **DMA控制器角色** | |----------------|----------------------------|----------------------------| | **初始化** | 配置DMA参数 | 等待请求 | | **传输中** | 执行其他任务(无需干预) | 控制总线,完成数据传输 | | **传输完成** | 响应中断,处理数据 | 释放总线,等待下一次请求 | --- ### **四、DMA的应用场景** 1. **磁盘I/O**:硬盘直接向内存写入文件数据。 2. **图形处理**:GPU通过DMA快速读取纹理数据。 3. **网络通信**:网卡收发数据包时绕过CPU。 4. **音频/视频流**:实时采集或播放时减少延迟。 --- ### **五、DMA的优势与局限** | **优势** | **局限性** | |-----------------------------------|---------------------------------| | 1. 显著减少CPU中断次数 | 1. 需硬件支持(DMA控制器) | | 2. 提升系统并行性 | 2. 总线竞争可能引发延迟 | | 3. 适合大数据量、实时性要求高的场景 | 3. 配置不当可能导致内存覆盖错误 | --- ### **六、对比传统中断驱动传输** - **无DMA**: - CPU需逐个字节从外设读取数据并写入内存。 - 频繁中断导致CPU利用率低下(如传输1MB数据需触发10^6次中断)。 - **有DMA**: - CPU仅参与初始化和最终中断处理,实际传输过程由DMA控制器完成。 - 中断次数降至1次(传输完成时),CPU可专注计算任务。 --- ### **:DMA操作流程图解** ``` [CPU初始化DMA] → [外设请求DMA传输] → [DMA接管总线] → [内存↔外设直接传输] → [传输完成中断CPU] → [CPU处理数据] ```
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值