进程的引入
要了解进程,我们从程序说起:
#include
int main(void)
{
printf(“just a program\n”);
return 0;
}
不知道什么原因,头文件一致显示不全,也很无奈。
作为程序开发者,你的职责是写程序,以便完成相应的功能,程序写后要进行编译,控制权就转移给编译程序,编译后的程序形成的目标代码还不能直接运行,必须通过链接程序链接形成可执行代码,于是控制权再次转给了链接程序:
也就是说,从编译程序的角度来看,所有的源程序只是输入数据,尽管你觉得你的程序规模很大,功能很强,他的程序只有几行,没有什么功能,但编译程序都一视同仁,并按编译的规则形成二进制代码,而链接程序就像接力者,接过编译的结果,将其作为输入数据,按照可执行文件的规则进行链接,同样是一视同仁,输出可执行文件。可执行文件作为输入数据进入操作系统,并输出运行结果,操作系统同样是对所有的可行文件一视同仁,因此,我们把操作系统也称为平台,也就是说,它搭建好程序执行的舞台,不管是编译器还是链接器,都是为舞台来输送演员的,它们在输送的过程中相当于管道,让一个源程序最终能在操作系统这个舞台表演。
那么问题来了,如果有多个程序都要上台表演,操作系统如何协调?
作为程序的开发者,写程序时,你可以竭尽全力表达所想,程序一旦运行起来,就像一个人诞生后踏入人生的舞台,其生命的状态每时每刻都是在变化,程序生命到此结束,它必须变换身份,不能再叫程序了,你也不再对它有控制权,也就是把它全权托管给操作系统了,于是给它起一个新的名字叫“进程”,顾名思义,运行着的程序。
操作系统作为掌管程序运行的平台,一般情况下,它不会仅仅运行一个程序(单用户单任务操作系统除外),而是会同时运行多个程序,以满足人们三心二意的习惯,比如一边写代码,一边听音乐。在这里“同时”是一个粗粒度的说法,从CPU的角度来首,这个“同时”有一定的时间间隔。
附:以通俗易懂的语言,展现了程序编译链接的过程,进程的概念,对于初学者理解系统概念,很有帮助。
转自陈莉君老师的文章