一、微机体系结构
二、冯诺依曼体系结构
从计算机体系结构图和冯诺依曼体系结构图可以看出现代计算机工作模型,大概分为以下内容。
我们知道了CPU的根本任务就是执行指令,对计算机来说最终都是一串由“0”和“1”组成的序列。CPU从逻辑上可以划分成3个模块,分别是控制单元、运算单元和存储单元,这三部分由CPU内部总线连接起来。如下所示:
控制单元
控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操作控制器OC(Operation Controller)等,对协调整个电脑有序工作极为重要。它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。操作控制器OC中主要包括节拍脉冲发生器、控制矩阵、时钟脉冲发生器、复位电路和启停电路等控制逻辑。
说通俗一点就是控制器读取完指令后就会协调把数据在存储器上的地址通知给运算器从而运算器可以取数据然后控制器再根据指令通知运算器在做什么样的运算、然后运算器就可以得出结果、而生成的结果需要由控制器操作保存到存储器上(控制器知道存储器上哪些单元是空闲的)这一切的操作都是在计算器、运算器和存储器三者之间操作的。
运算单元
在前面已经初识了运算器的工作过程,可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。相对控制单元而言,运算器接受控制单元的命令而进行动作,即运算单元所进行的全部操作都是由控制单元发出的控制信号来指挥的,所以它是执行部件。
存储单元
包括CPU片内“缓存”和“寄存器”组,是CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。采用寄存器,可以减少CPU访问内存的次数,从而提高了CPU的工作速度。但因为受到芯片面积和集成度所限,寄存器组的容量不可能很大。寄存器组可分为专用寄存器和通用寄存器。专用寄存器的作用是固定的,分别寄存相应的数据。而通用寄存器用途广泛并可由程序员规定其用途,通用寄存器的数目因微处理器而异。
三、缓存
缓存虽不是CPU最核心的部件而是用来加速CPU和内存之间访问的、缓存也是一种折中的表现因为CPU特别快、内存比CPU又特别慢(内存由于工艺制造只能这么快了)所以在两者之间添加一个缓存、缓存比内存要快造价高比CPU慢,而缓存也分为一级二级三级、一级缓存又分数据缓存和指令缓存、二级缓存比一级缓存慢比内存快、内存的数据时先到二级缓存在到一级缓存再到寄存器就这样在cpu和存储器之间从从缓存(一个双核CPU的一级二级是独立的而三级缓存是两个核心之间公用的)。
缓存这种技术要想工作必须要遵循一个基本前提就是程序的局部性原理、我们的程序是遵循是局部性原理包括两个方面时间上的局部性和空间上的局部性;所谓时间上的局部性就是我刚刚访问的数据过一会说不定还会访问所以第一次访问之后直接放到缓存中;所谓空间局部性就是说我现在访问的数据说不定离此数据非常近的数据可能也会被访问到所以我们载入一个数据的时候一起也把此数据周围的数据一块载入进去。
告诉缓存有一个控制器,平时,CPU送出地址要从内存中取数据时,缓存控制器把该地址同告诉缓存中的地址进行比较,以查明该数据是否在高速缓存中。如果要取的数据在缓存中。那么很好,这称为“命中”,处理器可以直接拿到数据,那么速度会很快。但是如果不中就是非常糟糕的,最坏的情况就是处理器需要重新装载告诉缓存而不是去直接访问内存,这意味着执行一条指令需要更多的时间。
那么问题来了缓存是否可以提高计算机的性能,取决于命中率。而实际上命中率有很多因素的影响,包括缓存设计和软件的编写技巧。前者属于硬件公司机密而后者则需要软件工程师们的智慧。
四、存储器
CPU只识别RAM随机访问存储器和ROM只读存储器(在主板上面里面存放用来开机检测硬件的程序);存储器顾名思义就是用来存储数据的,当要进行一个加法运算时计算器需要在存储器里面取加数和被加数,那么存储器是分为各个存储单元(1字节一个存储单元)需要在存储器的哪个单元里面找数据、我们也知道程序是由指令加数据组成(指令和数据都在存储器上),指令会告诉cpu,在存储器的那个单元放的是加数和被加数、所以cpu会先读指令。根据指令找数据在那个地方,这时就需要控制器。控制器需要接受控制指令同时运算器要想运算数据,就必须能够取得数据,要在存储器和cpu之间传输数据的这条线称为总线(总线分数据总线、控制总线、地址总线)。
内存RAM是易失性存储器初始状态是空的,这时也需要借助外在存储设备如硬盘持久化保存数据,需数据时把数据从硬盘中加载到内存然后再加载到运算器进行运算,运算结果由控制器指挥数据到内存然后再永久保存到磁盘或把运算结果通过输出设备VGA显示出来。
下图描述CPU的工作原理
总的来说,CPU从内存中一条一条地取出指令和相应的数据,按指令操作码的规定,对数据进行运算处理,直到程序执行完毕为止。
总结一下,CPU的运行原理就是:控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。对于执行指令过程中所需要用到的数据,会将数据地址也送到地址总线,然后CPU把数据读到CPU的内部存储单元(就是内部寄存器)暂存起来,最后命令运算单元对数据进行处理加工。周而复始,一直这样执行下去。
对上面的话分解一下
1、取指令:CPU的控制器从内存读取一条指令并放入指令寄存器。指令的格式一般是这个样子滴:
操作码就是汇编语言里的mov,add,jmp等符号码;操作数地址说明该指令需要的操作数所在的地方,是在内存里还是在CPU的内部寄存器里。
2、指令译码:指令寄存器中的指令经过译码,决定该指令应进行何种操作(就是指令里的操作码)、操作数在哪里(操作数的地址)。
3、 执行指令:分两个阶段“取操作数”和“进行运算”。
4、 修改指令计数器,决定下一条指令的地址。
五、南桥北桥
在主板上离CPU近的叫北桥也称高速总线控制器,用来传输大量数据,工作在比较高的频率下的快速实现数据交换(早期是用来连接内存、现在的VGA也是连接内存的),离CPU比较远的称为南桥也称低速总线控制器用来处理外在设备的(南桥是通过PCI总线连接在北桥上的)大量的I/O设备都在南桥上(为了得到更好的性能现在硬盘都直接连接在PCI-E北桥上的并使用固态硬盘)。