1、何为进程
进程是正在运行中的程序。程序加载到内存中后就变成了进程。将多个程序加载到计算机中并发的执行,可以提高系统资源的利用率,缩短系统的响应时间。实现进程首先需要考虑程序的存储,这需要给程序分配合适的内存。但由于多进程的存在,为了避免内存冲突需要进行内存管理。 此外,进程运行实际上是指进程在CPU上执行。那么如何将CPU在多个进程之间进行交接或切换,这就需要考虑进程的调度了。进程间还需要考虑进程间的通讯。
多进程可以提高资源(CPU)的使用效率,看如下例子。
如果一个进程有20%的时间使用CPU进行计算,另外80%的时间用来进行I/O,则如果使用单道编程,CPU的利用率只有20%。但如果同时运行两个这样的进程,即进行所谓的2道编程,则CPU利用率将提高到36%(忽略了进程切换所需要的系统消耗, CPU只在两个进程同时进行I/O时才处于闲置状态,因此CPU的利用率为1-0.8×0.8=36%)。但如下图所示,随着进程数量的增加,CPU利用率在稳定的上升,但最终会到达极限(下图中进程数为12时到达极限)。
进程越多就不得不考虑进程切换的消耗了。到达临界点之后再起进程,多进程带来的好处会呈现下降的趋势。
多进程带来的另外一个好处是响应时间(用户的等待时间)的降低。假设现在有四个进程,每个进程花费80%的时间进行I/O,20%的时间使用CPU。每个进程的启动时间和使用CPU的时间如下图所示。
多进程环境下,每个进程的响应时间如下表所示。
而单进程环境下,则每个进程的响应时间如下表所示。
由上述两个表格的数据可以看出,多进程比起单进程,系统平均响应时间缩短了约21分钟,响应时间改善程度约47%,这是一个巨大的改善。
多进程带来的好处到底有多少与每个程序的性质、多道编程的度数、进程切换消耗等均有关系。但一般来说,只要度数适当,多进程总是利大于弊。
2、进程的状态转移
进程从CPU的使用来说,分为两种状态。一种是执行状态(CPU上执行);另一种是挂起状态。挂起的原因可能是因为进程自身的原因,如在进程运行过程中执行了阻塞操作(读写操作),此时即使给其CPU控制权它也不会使用,这时OS就会将该进程挂起,运行其他进程;还可能使为了公平性,将运行时间太长的进程挂起,让其他进程运行。
逻辑上进程分为3种状态:执行、阻塞和就绪。下图是它们之间状态的转换图。
3、进程的管理
创建进程的步骤如下所示:
1)分配进程控制块。
2)初始化机器寄存器。
3)初始化页表。
4)将程序代码从磁盘读进内存。
5)将处理器状态设置为“用户态”。
6)跳转到程序的起始地址(设置程序计数器)。
进程的产生,操作系统需要维护进程的一些信息。进程产生后,操作系统使用进程表维护进程信息。一般来说,维护的资料信息应当包括寄存器、程序计数器、状态字、栈指针、优先级、进程ID、信号、创建时间、所耗CPU时间、当前持有的各种句柄等。而采纳的数据结构主要是线性表、链表和结构(struct),当然也可能使用树和图(网络)结构。
进程表保存在操作系统的内核中。