CPU与指令集
CPU与指令集
一、CPU
CPU是指Central Processing Unit,即中央处理器。是计算机的运算和控制中心,其功能主要是执行程序指令并计算相关数据。CPU 主要由控制单元、运算单元、存储单元等组成。
控制单元:负责将程序指令转化成硬件电路中的实际动作。比如打开某个加法器或减法器等等。控制单元有点像解码器,它收到程序的某条指令后,会按预先设定好的顺序,依次打开的适当的运算电路。
运算单元里:面是各种运算器,负责将来自存储单元的数据,沿着控制单元“划定”的路径去进行适当的计算,然后将计算结果送回到存储单元。存储单元是CPU与外部交换数据的场所。
本图来自网络
二、指令集
程序下达不同的指令,控制单元会执行不同的预设操作。这就好比军训时,指导员高喊“立正”,受训学员就要双脚并拢,身体站直,两眼前视,双手下垂伸直,中指对齐裤中缝。在这个过程中,“立正”是一条指令,而后面受训学员要完成的一连串的动作,是指导员和受训学员之间预先约定的动作组合。
又比如指导员高喊“稍息”。则受训学员要在立正的基础上,右脚向前伸半步。“稍息”是另一条指令。
类似的军训指令还有“向左转”、“向右转”、“向右看齐”、“原地踏步走”等等。所有的指令合称指令集。
CPU也一样。在设计CPU的时候,预先定义了一些基本的操作,比如:“加”、“减”、“乘”、“除”、“比较”、“取整”等等。然后设计好A指令由哪些基本操作组成,按什么顺序执行;B指令由哪些基本操作组成,又按什么顺序执行等等。CPU预设了N多个指令,这就是CPU的指令集。
三、不同类型的CPU,使用不同的指令集。
-
X86架构的CPU,使用复杂指令集。英文为Complex Instruction Set Computing,简写作CISC。复杂指令集的设计目的,是希望直接通过硬件来完成复杂的指令执行过程,而让程序更简单方便、程序运行速度更快。这就好比军训时的“立正”指令,指导员只要高喊“立正”即可,受训学员负责从其它任何姿态转换到预定的“立正”姿态。指导员就相当于程序,他只要下达“立正”这个指令即可。很简单。而受训学员就相当于CPU,要自行负责姿态转换的全部动作。这条指令对于CPU来说,要完成的动作很多,很复杂。
-
ARM、MIPS、Power PC等CPU,使用精简指令集。英文为Reduced Instruction Set Computing,简写作RISC。在精简指令集中,只包含使用频率较高的少量简单指令和一些必要的支持操作系统和高级语言的指令。这就好比军训过程中,指导员每次都要高喊“站直”、“脚并拢”、“向前看”、“手垂下”等指令,来合成受训学员的“立正”的姿态。因为受训学员只能知道“站直”、“脚并拢”、“向前看”、“手垂下”的指令怎么做,不知道“立正”该怎么办。
从上面的比喻可以看出,复杂指令集和精简指令集不可以通用。基于复杂指令集平台开发的程序,在精简指令集平台上不能正常运行。相反,基于精简指令集平台开发的程序,在复杂指令集平台上也不能正常运行。操作系统也一样。
四、生态
CPU和指令集不同,导致相关产业生态不同。目前,个人计算机和服务器产品,以X86架构的CPU为主。移动终端和部分嵌入式系统,以ARM CPU为主。如果要开发新的指令集架构,就要重新构建从核心硬件到操作系统,再到应用软件的全套生态系统,推行起来非常复杂困难。这也是具有自主知识产权的国产CPU难以推广的原因之一。