你有没有考虑过,当你辛辛苦苦写了好多代码,最后编译运行的时候,计算机到底经历了什么过程?
如同施了魔法一般,计算机运行的程序实现了我们当初的构想。
而随着计算机技术的不断提高,我们可以利用集成开发环境开发程序,完全不需要知道底层硬件的运行机制。
但在享受的同时,也付出了代价,虽然有一定的编程能力,但是无法进一步提高。
今天想做的就是给程序运行机制去魅。
首先,先了解一下程序运行的一般流程。
程序运行的流程
其中,今天将着重了解一下CPU的解释和执行程序功能,因为个人觉得是最重要的一个部分。未来,将会继续介绍程序编译的原理。
上述部分概念的解释
程序:指示计算机每一步动作的一组指令
机器语言:CPU可以直接识别并使用的语言。
内存:随机存取存储器(英语:Random Access Memory,缩写:RAM;也叫主存)是与CPU直接交换数据的内部存储器。计算器的主存储器,简称主存。主存通过控制芯片等与CPU相连,主要负责存储指令和数据。
主存由可读写的元素构成,每个字节(8bit)都带有一个地址编号。
CPU:中央处理器(Central Processing Unit,缩写:CPU)可以看成是计算机的大脑,功能主要是解释计算机指令以及处理计算机软件中的数据 。
CPU的组成:
寄存器、控制器、运算器和时钟,各部分之间由电流信号互相连通。
1.寄存器:暂存指令、数据等处理对象,可以当作内存的一种。根据种类的不同,一个CPU会有20—100个寄存器。
代表的有:
累加寄存器:存储执行运算的数据和运算后的数据。
程序计数器:存储下一条指令所在内存的地址。决定了程序的流程。而程序的流程分为顺序执行、条件执行和循环执行。
通用寄存器:存储任意数据。
此外还有很多寄存器,在这里就不一一介绍了。
2.控制器:负责把内存上的指令、数据等读入寄存器,并根据指令的执行结果来控制整个计算机。
3.运算器:负责运算从内存读入寄存器的数据。
4.时钟: 负责发出CPU开始计时的时钟信号。
CPU的运行机制
那么程序启动后,CPU到底是怎么运行的呢?
1.程序启动后,根据时钟信号,控制器会从内存中读取指令和数据到寄存器。
2.通过对这些指令加以解释和运行,运算器就会对寄存器里的数据进行运算,运算结果存入寄存器。
3.控制器根据运算结果来控制计算机(这里面的控制指的是:内存和磁盘等媒介的输入输出、键盘和鼠标的输入、显示器输出等)。
下面我们用动图实践一下,运行Java编写的简单的求和程序(1+2),计算机内存和CPU都发生了什么?
其中因为机器语言(那堆01010的东西)很难理解。所以,内存的存储内容就用注释的方式(如:指令:将0015地址的数据存放在累加寄存器中)。
为了进一步加深对CPU和内存的运行机制的理解,我们可以简单的类比一下,大家都从电视或者在现场看过晚会。
可以把内存看作是演员的候场区,候场区的功能就是容纳了准备上场的演员;内存也是用来容纳数据和指令。
CPU就相当于晚会舞台现场。舞台的功能就是想把排练好节目呈现给大家观看。晚会的节目都有总导演进行全场的统筹,就像CPU里面的控制器。当然除了总导演外,还有灯光师,音响师等等,各司其职,就像CPU里面的运算器、寄存器等等。