【CPU】理解CPU
CPU,全称Central Processing Unit,即中央处理器。
何为CPU? 计算机必须能够自动地从主存中取出一条条指令执行,专门来执行指令的就是CPU。
一、指令的执行过程
为了理解CPU的工作原理,我们首先了解一下指令的执行过程:
(1)取指令并计算下一条地址。(程序计数器PC、指令寄存器IR)
应该明确的是,指令存放在地址连续的内存空间中,其地址是由PC即程序计数器给出。故指令执行的第一步就是根据这个PC中的地址去内存中找到指令,并取出它,放在一个指令寄存器(IR)中,以供后续操作。然后,计算下一条指令地址,赋给PC。
(2)对指令操作码进行译码。(指令译码器)
不同指令的操作码不同,实现的功能也不同。这个过程就是根据不同的指令中包含的操作码(op),产生不同的控制信号,在物理逻辑上,控制实现不同的操作。
(3)计算源操作数地址并取源操作数。
简单讲就是,根据具体指令,确定寻址方式,再根据寻址方式去确定源操作数地址计算方式,再根据这个地址去找源操作数,找到后取它。
(4)数据操作。
对源操作数进行具体的数据操作。如可能是进行加减乘除运算。
(5)目的操作数地址计算并存结果。
与(3)对应,根据寻址方式计算目的操作数地址,再将(4)的结果写入目的地址处。
需要说明的是,对所有指令,(1)(2)过程都是必不可少的,而(3)(4)(5)则由具体的指令操作码产生的控制信号控制,可能有也可能不执行。如jump跳转指令就无需(3)-(5)。
二、CPU的基本功能和基本组成概述
不管CPU多复杂,其组成部分我都可以分成控制部件(control unit)和数据通路(datapath)。先对这两个概念简单的了解:
1. 数据通路
数据通路是指指令执行过程中数据所经过的路径,包括路径上的部件,如ALU(算数部件)、通用寄存器、状态寄存器等等。数据通路由控制部件进行控制。形象的说,datapath是数据流动的“路”,当然路上有许多“关卡”,“关卡”的开关由控制部件决定,而控制部件又是由指令产生的控制信号决定的。
2.控制部件
如上面提到的,控制部件根据具体指令功能的不同,产生对数据通路的控制信号,并正确控制指令的执行过程。
一个简易的CPU逻辑图是这样的:
(图片来自网络)
可以从图中大概看到,主要控制逻辑是:
程序计数器PC,即指令计数器,指令指针IP,存放指令的地址。顺序执行时,PC中拿出来地址,通过地址线,去拿地址,然后根据地址,指令寄存器通过数据线去取出这条指令,并存放在指令寄存器IR中,指令寄存器将指令传送指令译码器,译码器将操作码OP译码,传送给操作控制信号形成部件,并生成相应的控制信号。
上述过程是在时序信号的控制下进行的;这个时序信号,是由专门的“时序信号产生部件”产生,而这个部件最终由“脉冲源”与“启停控制线”控制。即,脉冲源产生一定频率的脉冲信号,作为整个机器的时钟脉冲,这是整个CPU的基准信号。启停控制线是在需要时开放或封锁脉冲源的部件,以此来控制时序信号的产生和停止。而时序信号产生部件就是以时钟脉冲为基准,产生不同指令对应的周期、节拍、工作脉冲等时序信号,实现对机器指令执行过程的控制。
生成控制信号后,则会根据这个信号,去控制其他逻辑部件,如取操作数、运算、送目的地址等。
三、CPU数据通路
上面提到了,数据通路就是数据存储、处理和传送的途径。讨论实现的控制部件是更加深入的学习内容,对于理解CPU逻辑,仅仅需要知道它完成了什么功能;而数据通路的理解是彻底理解CPU工作流程的不可或少的部分。下面详细分析数据通路。
指令执行过程中用到的元件有两类:组合逻辑元件(操作元件如ALU),和存储元件(也称状态元件,如通用寄存器)。
1. 组合逻辑元件
即输出只取决于当前的输入的元件。如加法器、多路选择器、算术逻辑部件、译码器等等。他们有的需要控制信号参与,有的则不需要,但他们的共同之处就在于,给定输入,立马得到输出。
2. 状态元件
具有存储功能的元件,输入状态在时钟控制下被写入到电路,并保持输出值不变,直到下一个时钟到达。输入状态由时钟决定何时被写入,输出状态随时可以读出。通过下面的例子分析,相信你能更好的理解。
下面是一个简单的状态单元:D触发器,时钟输入clk控制时钟到达,状态输入D和状态输出Q。
示意图
逻辑示意图
上面的图示,假定触发在时钟信号下跳沿进行,即当时钟信号下跳时,输入D被写入电路。而这一过程(输入被允许写入电路)之前,有一个setup time(建立时间),即,输入D的状态要保持稳定有效,稳住输入信号,在时钟信号下跳沿到来一段时间内,有一个Hold time(保持时间),即这段时间内,输入端D要保持稳定不变,这是为了等待输出端Q的延迟(为了确保Q是输入D的正确输出)。即下跳沿来临之时,输出端Q仍然有一个Clock to Q time,即锁存延迟,即在hold time内,输出经过Clock to Q time开始生效。Clock time就是输出开始生效的点。
3. 数据通路与时序控制
每个指令的执行过程,都有若干个操作步骤,而这些操作步骤,是有先后顺序的。为了使得正确的执行指令,CPU必须按照时序产生正确的控制信号。不同指令对应的操作步骤所需要的时间长短不一,控制他们考虑合适的时序方式。
1)早期计算机的三级时序控制系统
早期采用机器周期、节拍、脉冲三级时序对数据通路操作进行定时控制。一个指令可以分为取指令、读取操作、执行、写结果等多个基本操作步骤(每个步骤都是一个操作周期),这称为机器周期。需要说明的是,每个机器周期长短不同,比如读写的周期必定比在CPU中操作的周期长。所以,机器周期的长短由工作周期中最长的那个为基础来确定,如以主存工作周期确定。
一个机器周期内同样也要进行若干步动作。比如存储器读写操作中,又必须有发送地址、发读写命令、检测数据有无完备、取数据等等。因此一个机器周期划分为若干个节拍,使得一个动作在一个街拍内完成。
为了产生操作控制信号,并使某些操作在一排时间内配合工作,在一个节拍内设置一个或多个工作脉冲。例如,在一个节拍内完成动作:将一个寄存器的内容传送到另一个寄存器。这时就需要设置先后两个脉冲,以产生打开数据通路脉冲的接受脉冲。
这就是三级时序系统,不过我是没见过这种机器了,因为早已经淘汰了。
2)现代计算机的时钟信号
机器周期的概念已经消失了,现代计算机整个数据通路中的定时信号就是时钟,一个时钟周期就是一个节拍。其工作流程在上面状态元件讲述中已经阐明。
4. 单总线数据通路
意如其名,在CPU内部,将ALU以及所有寄存器通过一条内部的公共总线连接起来,就是单总线数据通路。注意不要把它与外部连接存储器、CPU、IO的外部系统总线混淆。图示如下:
中间就是内部总线。这种结构下,同一时刻仅有一个元件可以将数据传送到总线上,因而效率不高。
对于ALU运算,则必须设置缓存(临时)寄存器Y和Z,因为同一时刻仅有一个元件可以将数据传送到总线上,所以对于两个源操作数的操作,设置Y以缓存一个操作数,设置Z以传送到总线上进而送目标地址。这其中的每一步都是在时钟控制下进行的。
5. 三总线数据通路
提高性能,必须使得每条指令的时钟周期尽量少。为了克服单总线数据通路同一时刻仅仅有一个数据在总线上的缺点,可以采用多总线数据通路。
如三总线数据通路,就可以设置所有通用寄存机在一个“双口寄存器堆”总,允许两个寄存器的内容同时输出到两个不同的总线。
同样的,在ALU运算时,由于有多个总线可以同时传送多个数据,就无需再设置临时缓冲寄存器了。
四、总结
我以一个计算机系学生的角度看待CPU,并没有去通识性的讨论CPU的发展历史、性能和选购,旨在学习基本的底层知识,在高级程序设计当道的同时,学习底层,更好、系统的理解计算机。受知识水平所限,难免有谬误、不当之处,请大家批评指正。
【参考】计算机组成与系统结构(第二版) 袁春风老师主编
转载于:https://www.cnblogs.com/duye/p/8899306.html
【CPU】理解CPU相关推荐
- 阿里程序员工作小技巧:理解CPU分支预测,提高代码效率
技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,体现也会在优秀程序员在工作效率提升,产品性能优化和用户体验改善等小技巧方面的分享,以提高我们的工作能力 ...
- 上帝视角:程序员为什么需要理解 CPU?
来源 | 码农的荒岛求生(ID:escape-it) 可能有的同学会问,程序员写代码就好了,为什么需要去理解CPU啊?不嫌累啊?啊?啊?你倒是说啊. 计算机系统 != 汉堡包 在之前的文章中我把计算机 ...
- 解决win10cpu使用率100_如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了...
来自公众号:阿里巴巴中间件 CPU(Central Processing Unit)是计算机系统的运算和控制核心,是信息处理.程序运行的最终执行单元,相当于系统的"大脑".当 CP ...
- io密集型和cpu密集型_和小胖一起理解CPU负载和利用率
作者:小胖前言 凌晨一点,正整着炸鸡的小胖,微信一呼"你的服务器CPU持续超载 - " 麻溜的连上服务器,先把CPU负载摁下来.仔细一想,最近1分钟平均负载很大,但CPU利用率却≤ ...
- 阿里程序员工作小技巧 | 理解CPU分支预测,提高代码效率
技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也会体现在优秀程序员在工作效率提升.产品性能优化和用户体验改善等小技巧方面的分享,以提高我们的工作能力 ...
- 通过自制CPU来彻底理解CPU的工作原理
每天摸着CPU,摸了20多年,却总是无法彻底理解CPU的工作原理,还有比这更郁闷的事吗?所以我决定攻克这一世界(我个人的世界)难题,自己做一个CPU来理解CPU的工作原理. " 造一个什么样 ...
- 深入理解CPU上下文切换
我们都知道,Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行.当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时 ...
- 【CPU】如何正确理解 CPU 使用率和平均负载的关系?
什么是 CPU 使用率? CPU 使用率就是 CPU 非空闲态运行的时间占比,它反映了 CPU 的繁忙程度. 比如,单核 CPU 1s 内非空闲态运行时间为 0.8s,那么它的 CPU 使用率就是 8 ...
- 从Java视角理解CPU缓存(CPU Cache)
http://coderplay.iteye.com/blog/1485760 众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存 ...
- 怎么理解cpu load?
前言 本着不重复造轮子的原则,总结一些可靠可重现的结论. 直接上结论 什么是cpu load? (以下说的cpu load,都是linux cpu load) cpu load反应了一个系统的&quo ...
最新文章
- 笔记-项目干系人管理-规划干系人管理
- linux下tomcat服务器的启动和关闭以及查看实时打印日志
- qq聊天界面 java程序 51cto_Java QQ项目详细设计之:组操作模块
- .net得到ip(引)
- Git笔记(37) 替换
- (06)VHDL实现计数器
- flask第二十篇——模板【3】
- python音频分析工具_『开发技巧』Python音频操作工具PyAudio上手教程
- Awvs 12.x安装及使用教程
- css空心半圆的实现,css – 透明空心或切出圆
- 使用vue-video-player播放视频 一个页面多个视频,并且只能唯一播放
- Linux 使用shell命令复制文件
- 我们都有过一段很美好的时光
- N-Tiers开发方式(COM+组件的注册、修改)
- Cocos2d-x 屏幕适配
- 深度学习——BRNN和DRNN
- Verification和Validation
- Salesforce Apex 中常用技能总结(持续更新)
- Proxy—Linux服务器代理
- 学习OpenBlas