CPU是数字处理系统中的一个重要环节。在我看来,单片机、微处理器、dsp都能够称作是CPU,仅仅它们的侧重点有所不同算了。具体来说,传统意义上的单片机更偏重于嵌入式的核算,比如说咱们常常运用的51、avr、arm芯片中不只仅含有了运算和操控功用,它还涵盖了定时器、串口、并口、usb、i2c总线等外部资源。dsp呢,CPU一般仅仅作为dsp的一个核存在,它一般还会包含别的一个核,专门用于数字信号的处理作业。而微处理器,也便是咱们常常说的pc上的处理器,它的作业比较单一,专心于核算和操控功用的处理,因而一般来说在这方面的功用上面,单片机和dsp都是不能和它比较的,有了南桥芯片和北桥芯片的协助,pc的微处理器就能够专心于自己的本职作业了,功率上面也会有一个很大的进步。
关于朋友们来说,日子中遇到的最多的CPU其实是x86的CPU。当然,假如有哪位朋友喜爱apple之类的玩具,也会知道一些arm的相关工作。剩余的便是一些专用范畴的CPU了,比如说在通讯职业用到的比较多的powerpc芯片,在高功用服务器用的到的sun sparc芯片,在科学核算范畴运用到的mips芯片。所以,不论遇到什么芯片,关于应用层开发的朋友都是相同的,仅仅在一些小当地需求还有一些留意的当地。比如说,
(1)数据的对齐办法
(2)数据的字节序问题
(3)函数参数的压栈问题
(4)CPU的乱序履行问题
(5)CPU中cache和内存一致性的问题
当然,假如咱们所要考虑仅仅简略的应用层规划,考虑到这些内容本身现已实属不易了。可是,咱们考虑的是怎么规划嵌入式操作系统的问题,所以接下来还要看看一般CPU下面都包含了那些内容。这样,只需熟练掌握了一款CPU的规划和完结,对其他CPU的常识也会举一反三了。
任何一款CPU,不论是完结的功用是什么样的,一般都会有这样一些底子规划:
(1)寄存器
仓库寄存器
pc寄存器
状况寄存器
运算寄存器
寄存器是CPU内部的底子资源。不论CPU的代码履行到什么时分,这些资源都是同享的,所以在CPU产生中止、函数调用、线程切换的时分,都需求对这些寄存器进行维护,常用的底子办法便是把把它们保存到暂时仓库当中去。仓库寄存器记载了当时仓库运用到了什么当地,pc寄存器则记载当时代码跑到了什么当地,下一条指令在什么当地等。状况寄存器则保存了当时CPU的履行情况,包含核算有没有溢出、中止是关仍是开、有没有o除数反常等等。至于运算寄存器就因CPU而异了,有的CPU寄存器比较少,比如说x86的寄存器;有的CPU寄存器就比较多,比如说powerpc。运算寄存器的用处许多,比如说数据拜访、核算、移位、回来核算结果等等。
(2)指令集
寻址指令
数学运算指令
逻辑运算指令
软中止指令
跳转指令
长途调用指令
io拜访指令
栈操作指令
指令集在某种程度上直接决议了某一种CPU的类型。就像intel和amd出产的CPU虽然有不同,可是它们的CPU运用的都是x86的指令集,而marwell、samsung和高通出产的CPU当然也不同,可是它们的指令集都是arm指令集。所以,假如软件在marwell上跑,一般来说也能够在Samsung上跑起来。指令集很杂乱,内容许多。可是一般来说,上面这些内容都是CPU所必需要完结的几种指令。当然重中之重的仍是中止和栈处理指令。
(3)中止、反常处理机制
不论是什么CPU,中止部分的内容都是少不了的。试想一想,假如一颗CPU只知道不停地运转,那么它的履行功率实际上是很低的。具有了中止的CPU不只使得CPU能够和更多的外设io打交道,还能极大地进步本身运转的功率。不同的CPU处理中止的办法其实都差不多,在整个CPU的地址空间里边,一般在低地址区域会有一张中止向量表,表中每一项记载了每一个中止对应的处理函数。所以,只需中止产生时,CPU就会首先将下一条pc地址压入仓库,然后跳转到中止向量表中对应的中止地址处履行的相应的处理函数。这个进程是CPU主动完结的,不需求咱们关怀。这样对咱们来说,它和CPU中的函数调用其实没有什么区别。等候中止处理完毕后,咱们运用ret指令回来到之前压入的那个ip地址处,持续下面的代码。整个进程就好像中止底子没有产生过相同。
所以,关于CPU的了解其实首要便是对寄存器、指令集和中止的了解。有了对中止和仓库的深化了解,其实也就没有什么困难的了。在这儿咱们咱们能够考虑一个问题,怎么在Windows或许linux下仿真中止完结咱们的操作系统开发呢?咱们能够自己先考虑一下,咱们会在随后的博客中持续介绍。整篇文章,咱们没有介绍编码的相关内容,其实只需把这儿的底子概念弄清楚了,剩余来其实便是一些流程性的作业了。在软件开发中,规划其实是最难的,剩余的才是开发和调试。