作为一个计算机专业的学生,你有没有认真思考过,当你在编译器里写出程序的时候,它是如何在计算机上运行的?接下来我们以最简单的C语言的"Hello world"代码来告诉你,程序是如何运行
//文件名称为sum;#include<stdio.h>
int main(void)
{
inta=1,b=2,sum;
sum=a+b;
printf("%d\n",sum);}
1.编写完程序后,一个sum.c文件就保存在了桌面上,这个叫做C源文件。那桌面又属于计算机的哪一个部分呢?一台计算机包含如下基本五个部分:
在计算机中,存储器用来保存信息。存储器又分为内部存储器和外部存储器,内部存储器即我们所说的内存,而外部存储器就是我们说的磁盘,磁盘又分为硬盘和软盘(软盘基本已经从PC中消失),而我们电脑中的大部分就都是硬盘了,这里也分为固态硬盘和传统机械硬盘。不管怎么说吧,磁盘也好内存也罢,就是用来存放数据的,那么我们就知道了这个C源文件应该就是存放在电脑中的硬盘中了。
代码被保存到硬盘之后,当计算机要运行程序的时候,就把代码从硬盘复制到内存中。那么在这个过程中,CPU起到什么作用?
CPU与内存的关系
通过这张图,我们可以清晰直观的了解到CPU,内存和硬盘三者之间的关系。我们之前的代码被保存到了硬盘中,如果要执行这段程序的话,需要把这段代码从硬盘中读取到内存中,此时的代码已经变成了二进制文件存储在内存中。代码的作用是把求出a + b 的值并输出显示到屏幕上,CPU收到“加”这个指令后,就把a的值和b的值读入到寄存器中?那么问题又来了,寄存器是个啥?要了解寄存器,先了解CPU。
2.CPU是个什么东西?
CPU基本由四部分组成,如下图所示:
CPU组成
CPU的作用主要有以下几种功能:
CPU功能
接下来,我们重点介绍寄存器和运算器。
寄存器是存储部件,容量非常有限,能存储的数据的大小。寄存器用来存放指令、数据等处理对象。现在来说一般有两种,也就是我们常听说的32位和64位,32位的寄存器就能存储4个字节的数据,64位的寄存器就能存储8个字节的数据,另外CPU也分为32位和64位其实就是由其中的寄存器的位数决定的。现在的CPU一般都内置了很多的寄存器,依此来完成比较复杂的操作。
运算器是计算的核心,主要的作用负责从内存读入寄存器的数据。需要注意的是:运算器是没法直接操作内存中的数据的,运算器操作的数据是寄存器中存放的数据。
3.CPU和内存的交互
程序代码被读取到内存中了,现在要执行这段代码,那就需要CPU出马了,首先,CPU会去读取需要进行操作的数据。继续看这代码:也就是需要读取数据a和b,那么读取到的数据a和b存放在哪了呢?根据我们上面对CPU简单的了解可知,数据a和b是被放到了CPU中的寄存器中,如下图所示:
在CPU中有两个比较重要的组件就是运算器和寄存器,CPU中的寄存器可以有很多个,再看内存,是一个个类似楼房形状,每层楼房都有编号,比如说现在数据a和b分别存放在#1和#2上,然后CPU将他们读取放在寄存器R1和R2上。
这个时候就要计算a和b的和,这就用到了运算器,它会拿到寄存器R1和R2,也就是拿到数据a和b,然后做加法运算
计算之后的结果即sum,运算器会再次把它放到寄存器,比如R1中,这个时候之前的数据b就会被覆盖,如此一来,CPU和内存就一起完成一次加法运算操作。
接下里,我们的关注点从加法运算转移到内存,实际上,程序代码被加载到内存的时候会产生数据和指令两部分,数据我们都清楚,那指令是什么?
指令就是说明程序该怎么执行。对于CPU来说就是告诉CPU该做什么,比如告诉CPU,读取数据a和b,然后再将他们相加,即CPU是根据指令干活,指令让怎么干,CPU就执行什么操作。
这就是程序从编写到执行的全部过程,怎么样,是不是感觉豁然开朗。
网友评论