在计算机中,进程、程序是我们必须要了解和清楚的概念。本章我们主要了解一下关于什么是进程,以及它和程序之间的区别在哪里。
进程:
进程:是正在运行的程序的实例,进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
进程分为两种类型:操作系统进程、用户进程。
系统进程:是操作系统自身运行时的内核类进程。
用户进程:即非内核类进程,不是操作系统自身的进程,而是想要实现某些功能,用户自己去启动的程序产生的进程。
而操作系统不仅要提供程序的运行平台,还要管理各类软硬件资源(比如进程调度是在管理CPU资源,内存的分配和回收是在管理内存资源,等等),那么操作系统必然要以一种最高权限的方式去运行,其它用户进程都必须不能具备这个最高权限。
此外,操作系统必须要在任何有需要的时候掌握CPU的控制权,因为进程是通过CPU去执行的,操作系统掌握了CPU的控制权,就代表操作系统进程开始执行。
例如,在任何需要进行进程调度的时候,必须能够立即回到操作系统,让负责进程调度的进程开始根据调度算法去调度下一个进程。
程序与进程的区别:
程序是我们写下来的一段代码,而进程的产生是因为代码开始执行了。记住这个内容,我们就能很好的记住下面几个不同:
一、 进程是动态的,程序是静态的。程序是有序代码的集合,进程是程序的执行。进程有核心态/用户态。
程序是静态的很好理解,那自己写的代码当然是静态的。进程是动态的也好理解,代码开始执行,那肯定会执行完毕,执行完毕了,进程也就消亡了,所以进程是动态的。
二、 进程是暂时的,程序是永久的;进程是一个状态变化的过程,程序可以长久保存
基于一的解释,二这个也是相同的理解。
三、进程和程序的组成不同,进程的组成包括程序、数据和进程控制块(即进程状态信息)
由于进程是动态的,并且需要间断的执行,那么就需要保存进程的状态信息。
进程间通信:
单机操作系统上的进程可分为两类:独立进程、协作进程。
对于单机上不同进程之间的协作,各进程之间需要进行数据的交流,这种行为称为进程间通信(Inter-process communication,IPC),即进程与进程的通信。
单机操作系统上的进程可以分为两类:
独立进程:这类进程不会和其它进程有任何交流。
协作进程:两个或多个进程之间需要交流。
除了单机上的多个进程可能需要进程间通信,多计算机之间的进程有时候也需要进行进程间的通信,这很常见,例如本机上的QQ客户端进程需要和腾讯的QQ服务器上的进程进行数据传输,浏览器浏览网页时,浏览器进程需要和网页所在的服务端进程进行数据传输,等等。
从广义上讲,只要进程间能共享数据或传递数据就算是进程间通信。而进程间的通信方式有很多,如:管道、套接字、共享内存、消息队列、信号、信号量等等。
特殊进程:
在Linux系统中有一些特殊的进程:孤儿进程、僵尸进程、守护进程。它们的形成也各不相同。
孤儿进程:父进程先于子进程退出,此时子进程会被1号进程收养,子进程即为孤儿进程。
僵尸进程:子进程退出,但父进程不知道。此时子进程原本占用的资源未被释放,子进程即为僵尸进程。且僵尸进程是有害进程,要尽量避免。
守护进程:将进程转化为后台进行,断开与前台的联系,即为守护进程(或后台进程)。