了解CPU

By JackKing_defier

首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识。默认学过工科基础课。

一、总述

先从计算机的结构说起,在现代计算机中,CPU是核心,常常被比喻为人的大脑。现在的计算机都为“冯·诺依曼机”,“冯诺依曼机”的一个显著的特点就是由运算器、存储器、控制器、输入设备和输出设备组成。CPU是运算器和控制器合起来的统称,因为运算器和控制器在逻辑关系和电路结构上联系十分紧密,尤其在大规模集成电路制作工艺出现之后,所以这两个部件就集成在同一芯片上。

了解CPU怎么工作就转化为了解运算器和控制器的作用和功能。

二、CPU的运算

运算器由ALU(算术逻辑单元)和若干通用寄存器组成。//寄存器需要数字逻辑知识

ALU即为一个芯片,有相应的输入,会给出相应的输出,由逻辑运算功能表可确定不同针脚会有的相应的运算输出。//这里可以类比于数字逻辑中的74LS138芯片,只不过74181给出的是相应输入的运算结果。 
在这里我想到,很多同学并没有学习过数字逻辑这门课,简单介绍一下。我们高中物理就学过“与门”、“或门”和“非门”,也就是通过电路可以实现逻辑上的“与”、“或”和“非”运算。同时呢,有一个门叫做“与非门”,也就是A和B先做与运算,再做非运算取反。通过布尔代数的运算法则可以把所有“门”的运算都用“与非门”表示出来,也就是等价变换。这样我们就有了异或、同或、或非等各种门电路。

通过若干个输入的信号通过各种门电路之后会产生一个或多个结果,满足我们需要的功能。比如加法器、移位器、触发器、寄存器、译码器。

ALU就是这样一个满足我们运算功能的部件。由于ALU功能很多,你可以理解为能做各种基本算术运算和基本逻辑运算。

说到现在,你现在应该清楚CPU内部有一个专职做运算的部件ALU了,而且由电路就可以实现。用电路可以很方便地表达出二进制信息,比如高电平为“1”,低电平为“0”。CPU处理的数据都为二进制,可以通过原码、反码和补码完成加减乘除运算,这样就把一切运算通过电路实现。

三、指令系统

机器能做解题的运算是因为人们利用了机器语言,机器语言能被机器自身识别,同时也可以被人理解。机器语言是由一条条语句构成的,每一条语句有一定的含义。比如,它可以规定机器做什么操作,指出参与操作的数或其他信息在什么地方等。我们习惯把每一条机器语言的语句称为机器指令,全部机器指令系统的集合称为机器的指令系统。计算机的设计者主要研究如何确定机器的指令系统,如何用硬件电路、芯片、设备来实现机器指令系统的功能。计算机使用者则是依据指令系统,使用汇编语言来编制各种程序。

上面一段话的内容也就是说:我们利用计算机做的所有操作,本质上都被还原成一个个指令。

指令是由操作码和地址码组成的。也就是分为不同的字段。操作码来指明要进行的操作,地址码来指出该指令的源操作数的地址、结果的地址以及下一条指令的地址。(这里又涉及到指令的格式,指令以及数据的寻址方式等,容易绕而且限于篇幅,略)一条指令包含的信息:它是干什么的,它需要的参数在哪里。

指令存储在存储器中,也就是我们平常说的内存。

四、CPU的控制器

在第二小节中,我说了CPU的运算,这一段主要阐述CPU的控制。CPU的实质包含运算器和控制器两部分。对于冯·诺依曼结构的计算机来说,一旦程序放入存储器后,就可以通过计算机自动完成取指令和分析指令的任务,控制器就是专门做这个工作的。它负责协调并且控制计算机各部件执行程序的指令序列,其基本功能是取指令、分析指令和执行指令。

取指令,控制器必须具备能自动地从存储器中取出指令的功能。 
分析指令,第一,要分析完成什么操作,即为控制器需要发出什么样的操作命令;第二要分析参与这次操作的操作数的有效地址。 
执行指令,这一阶段就是根据分析指令产生的“操作命令”和“操作数地址”的要求,形成操作控制信号序列(不同的指令有不同的操作控制信号序列),通过对运算器、存储器以及I/O设备的操作,执行每一条指令。

除此之外,控制器还有其它控制的功能,全部罗列会让人头大。简短地讲,就是控制!

根据上文的内容,可以得出CPU必须有的功能:

  • 指令控制,控制程序的顺序执行。//程序运行时,指令一般是顺序执行的。
  • 操作控制,产生完成每条指令所需的控制命令。//根据指令的要求对硬件产生操作控制信号序列,通俗来讲,就是把指令转化为对硬件的直接操作。
  • 时间控制,对各种操作加以时间上的控制。//计算机的操作对时间比较敏感,后面会提到周期的概念。
  • 数据加工,对数据进行算数运算和逻辑运算。//这里主要是靠ALU。
  • 处理中断,//即为CPU被打断的操作,后面会提到中断,在CPU也是挺重要的一个概念。

五、CPU的结构

根据前面提到的CPU必须有的功能,要取指令,必须有一个寄存器专用存放当前指令的地址,告诉你从哪里取出现在需要执行的指令;要分析指令,必须有存放当前指令的寄存器和对指令操作码进行译码的部件,即为分析出这一个指令对应着什么操作,需要干什么;要执行指令,必须有一个能够发出各种操作命令序列的控制部件CU;要完成算术运算和逻辑运算,必须要有存放操作数的寄存器和实现运算的部件ALU;为了处理一些异常情况和特殊请求,还需要有中断系统。

CPU主要由四大部分组成:ALU、CU、寄存器、中断系统。

在数字逻辑中学到,寄存器就可以存放二进制信息。CPU中一些主要的寄存器和它们的功能:

  • MAR:存储器地址寄存器,用于存放将要被访问的存储单元的地址。
  • MDR:存储器数据寄存器,用于存放数据。这些数据将要被存放到存储单元或者刚从存储单元中读出。
  • PC:程序计数器,存放现行指令的地址,有计数功能。//一般下一条指令地址就是PC+1,即为顺序执行。直接修改这个值就是转移类指令,跳转到其他位置继续执行。
  • IR:指令寄存器,存放当前将要执行的指令。 
    主要通过这四个寄存器,CPU就可以和主存交换信息。//因为程序以及程序需要的数据都存在主存中。

这里可以举例,CPU从主存中取指令的通路。/MM代表存储器
取指令:PC–>MAR–>MM–>MDR–>IR 
解释:PC中存储着我们将要执行的指令的地址,将现行指令地址存入地址寄存器MAR,然后进行命令存储器读操作,现行指令从存储器中读到数据寄存器MDR中,再将现行指令从MDR送至指令寄存器IR,接下来就进行译码执行部分了,后面根据指令的操作码,由CU译码去执行。

控制单元CU提供微操作命令序列,以完成计算机的全部指令操作。

六、指令周期

CPU取出并执行一条指令所需的时间称为指令周期,也就是CPU完成一条指令的时间。

指令周期简单来讲,分为两个阶段:取指周期执行周期。 
大多数情况下,CPU就是“取指–执行–取指–执行·······”的顺序自动工作。刚才提到过取指令的通路,所有的指令取指令都是这个通路,所以取指周期都相同。根据指令情况,执行周期长短不一,有的甚至没有,直接就是转移指令。

这里要提到一个比较重要的概念:中断 
中断比较好理解,就是CPU执行过程中被打断。这里面讲太细了就太多了。我可以用我的语言通俗地让你理解一下:这就好比你去网吧上网,是按照时间计费的,这个时间可以理解为指令周期。在你还正玩着的时候,有人不小心把网线拔了,你就得中断,你得去把网线插好继续玩。这里面就涉及到你得保留之前的位置,不要被别人占了,游戏不退出,让你能够在处理完之后还能继续玩。由于你也比较喜欢玩这个游戏,一般的事情是叫不动你的,这时候哥们叫你去打球,你就说正忙着呢,打完游戏再去打球。这个就说明有个优先级排序,打球的优先级不如玩游戏,所以你屏蔽掉了这个可以干扰你的中断,继续你目前的操作,去玩游戏。 
因为在CPU中也会被各种情况打断,可以软件调控的就按照规矩来了,如果是断电什么的,那就是不可操作的了。 
在周期这一块有很多划分和概念,比如机器周期,节拍周期等。不说太多,怕你绕。 
你就可以理解为一点,CPU对时间把控的很紧,一切按照时间步骤来。

七、FINAL

CPU部件之间传输数据也是依靠总线,总线扩展也很多,你可以简单理解为传输数据。 
这里面有很多我都没细说,细说肯定扯不完,因为我一开始写就发现,这其中都是有联系的,我不可能只说一部分,所以基本就把计算机组成原理都说了一下,CPU是计算机的核心,CPU是怎么工作的,详细内容还是来自《计算机组成原理》。 
我回顾了一下,我貌似就是把这本教材极致简化了,很多都是一笔带过,不过可以作为非计算机专业同学去初步了解CPU的文章。

初步了解CPU的更多相关文章

  1. cpu分析简介

    进程占用CPU过高,一般有以下两种原因:          1.    业务量过大导致进程处理负荷高,占用CPU资源:2.    程序BUG导致,比如死循环:    初步查看cpu占用情况top进一步 ...

  2. 【转载】8.2.1 CPU性能测试工具

    (KVM连载) 8.2.1 CPU性能测试工具 01/08/2013master 1 Comment 8.2.1 CPU性能测试工具 CPU是计算机系统中最核心的部件,CPU的性能直接决定了系统的计算 ...

  3. 一个表缺失索引发的CPU资源瓶颈案例

    背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...

  4. PC虚拟现实应用的性能分析与优化:从CPU角度切入

    如今,虚拟现实 (VR) 技术正日益受到欢迎,这主要得益于遵循摩尔定律的技术进步让这一全新体验在技术上成为可能.尽管虚拟现实能给用户带来身临其境般的超凡体验,但相比传统应用,其具有双目渲染.低延迟.高 ...

  5. 使用ANTS Performance Profiler&ANTS Memory Profiler工具分析IIS进程内存和CPU占用过高问题

    一.前言 最近一段时间,网站经常出现两个问题: 1.内存占用率一点点增高,直到将服务器内存占满. 2.访问某个页面时,页面响应过慢,CPU居高不下. 初步判断内存一点点增多可能是因为有未释放的资源一直 ...

  6. Azure底层架构的初步分析

    之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...

  7. Windows多线程多任务设计初步(转)

    Windows多线程多任务设计初步 [前言:]当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程 ...

  8. 第21章 java线程(1)-线程初步

    java线程(1)-线程初步 1.并行和并发 并行和并发是即相似又有区别: 并行:指两个或者多个事件在同一时刻点发生. 并发:指两个或多个事件在同一时间段内发生 在操作系统中,并发性是指在一段事件内宏 ...

  9. [dpdk] 熟悉SDK与初步使用 (四)(L3 Forwarding源码分析)

    接续前节:[dpdk] 熟悉SDK与初步使用 (三)(IP Fragmentation源码分析) 前文中的最后一个问题,搁置,并没有找到答案.所以继续阅读其他例子的代码,想必定能在其他位置看到答案. ...

随机推荐

  1. [BZOJ1861][Zjoi2006]Book 书架

    [BZOJ1861][Zjoi2006]Book 书架 试题描述 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候 ...

  2. JSON Accelerator真是个好东西...

    支持OBJC,JAVA,Python,OBJC(Core Data),Python(Django) 并实现了NSCoding和NSCoping,方便归档和复制. 再也不用辛辛苦苦的写Model了.. ...

  3. CGAffineTransform

    这个是CoreGraphics框架中的CGAffineTransform类,可用于设定UIView的transform属性.控制视图的缩放.旋转和平移操作.另称仿射变换矩阵. Quartz转换实现原理 ...

  4. 更改WAS Profiles的概要文件的server1的SDK版本

    WebSphere只能使用IBM JDK 哦,不能使用sun的JDK哦.不过如果只是改jdk的版本的话可以参考如下步骤:(以集群为例,假设具有管理节点Dmgr01,应用概要AppSrv01) 1. 确 ...

  5. C# 同类型实体赋值

    #region 更新赋值,前者赋值给后者 public static void ShadowCopy(object a, object b) { if (a == null) return; if ( ...

  6. ProtocolBuffers-3 For Objective C (2)-进阶

    先介绍几个常用关键字: equired前缀表示该字段为必要字段,既在序列化和反序列化之前该字段必须已经被赋值.与此同时,在Protocol Buffer中还存在另外两个类似的关键字,optional和 ...

  7. linux I/O复用

    转载自:哈维.dpkirin url:http://blog.csdn.NET/zhang_shuai_2011/article/details/7675797 http://blog.csdn.Ne ...

  8. 解决VMware虚拟机宿主机与虚拟机通讯慢

    本地连接--> 属性 --> 配置(C) -->高级 页面的属性框中找到"Large Send Offload"(中文名称叫:大量传送减负)==>Disab ...

  9. Java Graphics2D 画出文字描边效果

    在CSDN看到的,在此记下. (http://bbs.csdn.net/topics/390703095) import javax.swing.*; import java.awt.*; impor ...

  10. Toad for Sqlserver

    # 设置制表符 从sqlserver拷贝的存储过程粘贴到Toad,代码变得不整齐了,这就需要设置下制表符的大小.