教材中和市面上的书籍中总是对进程有这样的解释:一个运行起来(加载到内存)的程序。
但这样的解释其实是不太准确的,这样不能够怪他们这样说,只是背后的知识太多,无法用三言两语说清楚。
根据冯诺伊曼结构体系,任何程序想要被CPU调度都必须先加载到内存。而一台计算机,从开机的时候就会有很多的程序加载到内存,这时我们再打开我们想用的几个程序时,该程序也会加载到内存中。那么内存中这么多的程序,操作系统是否需要管理呢?于是乎,操作系统将所有程序共有的属性描述成一个结构体,再用某种数据结构将这些结构体组织起来,这样操作系统通过该结构就能够管理好每一个程序,该结构体就是进程控制块(PCB),Linux中称为struct task_struct
。
所以真正的进程的概念应该是:PCB+内存中相应的程序代码。
注意:程序加载到内存后,删除掉磁盘上的程序,不会影响该进程(一般情况),因为内存中的程序是磁盘上程序的拷贝。