简述操作系统进程管理
内容摘要:进程是程序运行的基本单位,操作系统最终要的功能就是创建、管理、 和终止进程。进程控制是指对进程整个生命周期各种状态之间的转换进
行有效的控制。
关键字:进程的定义,进程控制块 ,状态 ,控制 ,同步,互斥,死锁
一、 进程的概念
1.1进程的定义
进程是为了描述程序在并发执行时对系统资源的共享,所需的一个描述程序执行时动态特征的概念。进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配、调度和保护的独立单位。 1.2进程的状态及转换
进程基本状态有就绪态、运行态和等待态还有新建态和终止态,在七态模型中还有就绪挂起态和等待挂起态。(如下图所示)
1.3进程控制块的描述
进程控制块的含义:进程控制块(Process Control Block)是系统为了管理进程设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化过程。系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志。进程与PCB是一一对应的。
二、进程的控制
2.1进程控制的含义
进程控制是系统使用一些具有特定功能的程序段来创建、撤消进程以及
完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。包括:创建进程、阻塞进程、唤醒进程、挂起进程、激活进程、终止进程和撤销进程等。 2.2进程的创建
1)进程的创建过程:
①父进程创建子进程时 ,系统在进程表中增加一项,并从PCB(进程控制 块)池中取一空白PCB。
②为新创建的进程映像分配地址空间。传递环境变量,构造共享地址空间。
1
③为新进程分配资源,除内存空间外,还有其他资源。 ④查找辅存,找到进程正文段并装到正文区。
⑤初始化进程控制块,为新进程分配进程标识符,初始化PSW。 ⑥加入就绪进程队列,将进程投入运行。
⑦通知操作系统的某些模块,如记账程序、性能监控程序。
2)使用系统调用fork ( )创建两个子进程在Linux中进程创建的实例: #include
{int p1,p2,i;
while ( (p1=fork( ) )= = -1 ); /*创建子进程p1*/ if ( p1= =0 )
for( i=0;i<10;i++ ) printf(\ else
{while ( (p2=fork( ) )= = -1 ); /*创建子进程p2*/ if (p2= =0)
for( i=0;i<10;i++ ) printf(\ else
for( i=0;i<10;i++ ) printf(\ }}
2.3进程的阻塞与唤醒 1)进程阻塞
阻塞原语在一个进程期待某一事件发生,但发生条件尚不具备,被该进程调用来阻塞自己;阻塞原语在阻塞一个进程时,由于该进程正处于执行状态,故应先中断处理机和保存该进程的CPU现场,保存现场信息到PSW; 2)进程唤醒(如1-3图)
进程唤醒的具体步骤是—— ①从相应的等待进程队列中取PCB
②修改PCB的有关信息,如进程状态等 ③将被唤醒的进程置为就绪状态之后,把修改后的PCB加入有关就绪进程队列 2.4进程的挂起与激活 1)挂起原语执行过程:
①检查要被挂起进程的状态,若处于活动就绪态就修改为挂起就绪,若处于阻塞态,则修改为挂起阻塞。
②被挂起进程PCB的非常驻部分要交换到磁盘对换区。 2)激活原语执行过程:
①把进程PCB非常驻部分调进内存,修改它的状态,挂起等待态改为等待态,挂起就绪态改为就绪态,排入相应队列中。
②挂起原语既可由进程自己也可由其他进程调用,但激活原语却只能由其他调用进程的撤销。 2.5进程的撤销
1)导致进程被撤消的情况:
①该进程已完成所要求的功能而正常终止; ②由于某种错误导致非正常终止; ③祖先进程要求撤消某个子进程;
2
2)撤销原语终止进程的具体步骤2-4
1-3 2-4
三、进程的同步与互斥
3.1基本概念
进程间为完成一个共同目标,必须相互合作的协同工作关系,有前后次序的直接制约关系称为进程同步。
多进程在共享资源时的间接制约关系称为进程互斥。 3.2临界资源与临界区
某段时间只允许一个进程使用资源称为临界资源。每个进程中访问临界资源的那段代码称为临界区。 3.3信号量与P、V操作
信号量机制是荷兰科学家提出的一种解决进程互斥与同步关系的机制。也称为P、V操作。
信号量的使用可以处理多个进程互斥临界区的问题。例如下面哲学家进餐问题:有五位哲学家,他们的生活方式是交替的思考和进餐。他们共用一个圆桌,分别最在五张椅子上。在圆桌上有五个碗和五支筷子,平常一个哲学家进行思考,饥饿时便取其左右靠近他的筷子,只有在他两支筷子都拿到的时才能进餐。进餐完毕后,放下筷子继续思考。 Var fork[I]:arry[0…4]of semaphore;
Fork[i]:=1; Cohegin
Process pi Begin Li: 思考;
P(fork[i]);
P(fork([(i+10)mod 5]; 吃通心面; V(fork[i]);
3
V(fork[(i+1)mod 5]; Goto Li End Coend
上述解法可保证不会有相邻的哲学家同时进餐,但引起死锁是可能的。
四、死锁
4.1死锁的含义及产生的原因
含义:系统中两个或多个进程无限期地等待永远不会发生的条件,系统处于 停滞状态,这种称为死锁。
死锁的原因:系统资源不足,进程推进的顺序不合适,资源分配不当等。 4.2处理死锁的基本方法
1)预防死锁
这是一种较简单和直观的事先预防的方法。方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。预防死锁是一种较易实现的方法,已被广泛使用。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量降低。 2)避免死锁
该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的的四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
3)检测死锁
这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,此方法允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死锁清除掉。 4)解除死锁
这是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。死锁的检测和解除措施,有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。
参考文献:
[1]瞿中.熊安萍.蒋溢.计算机科学与导论.清华大学出版社.2010年3月
4
[2]黄刚、徐小龙、段卫华编写.操作系统教程.人民邮电大学出版社.2010年8月
[3]何炎祥.李飞.李宁.计算机操作系统(第二版).清华大学出版社.2011年6月
[4]张坤.姜立秋.赵慧然.操作系统教程大连理工大学出版社.2010年3月
5