第二章进程管理进程管理2.1.1程序的顺序执行及特征٭一、程序执行有固定的时序。٭二、特征:▪顺序性、封闭性、可再现性2.1进程的基本概念I1C1P1I2C2P2S1S2S3进程管理2.1.3程序的并发执行一、多个程序的并发执行(可能性分析)I1I2I3I4C1C2C3C4P1P2P3P4t进程管理S1S2S3S4t一个程序多条语句的并发进程管理程序的并发执行(2)二、特征٭间断性٭失去封闭性:主要由共享资源引起٭不可再现性:设N的初值为n。٭有2个循环程序A和B,它们共享一个变量N,程序A每执行一次时,都要做N:=N+1;B则每次要执行Print(N),然后再做N:=0.若程序A,B以不同的速度运行有以下三种不同的结果进程管理程序的并发执行(3)N:=N+1在print(N)和N:=0之前,则N值分别为n+1,n+1,0.N:=N+1在print(N)和N:=0之后,则N值分别为n,0,1.N:=N+1在print(N)和N:=0之间,则N值分别为n,n+1,0.进程管理2.1.4进程的特征和状态1.进程的特征和定义٭一、定义:▪程序的一次执行过程٭1.结构特征▪进程:由程序段、数据段及进程控制块三部分构成,总称“进程映像”。٭2.动态性▪由“创建”而产生,由“调度”而执行;由得不到资源而阻塞;由撤消而消亡。(而程序是静态的)。进程管理2.1.4进程的特征和状态(2)٭3.并发性▪只有建立了进程,才能并发执行。٭4.独立性。▪独立运行,独立获得资源。٭5.异步性:(间断性)进程管理2.1.4进程的特征和状态(3)2.进程的三种基本状态٭就绪状态٭执行状态٭阻塞状态就绪阻塞执行时间片完进程调度I/O请求I/O完成图2-5进程的三种基本状态及其转换进程管理2.1.4进程的特征和状态(4)3.挂起状态(被换出内存的状态)٭引入原因▪终端用户请求▪父进程请求▪负荷调节需要▪操作系统需要٭进程状态的转换▪活动就绪静止就绪▪活动阻塞静止阻塞▪静止就绪活动就绪▪静止阻塞活动阻塞进程管理图2-6具有挂起状态的进程状态图执行活动就绪静止就绪活动阻塞静止阻塞激活挂起激活挂起释放释放挂起请求I/O进程管理2.1.5进程控制块1.进程控制块的作用٭是进程存在的唯一标志;٭PCB(processcontrolblock)常驻内存2.进程控制块中的信息٭标识、处理机状态,进程调度信息,进程控制信息pid进程状态现场优先级阻塞原因程序地址同步机制资源清单链接指针进程管理2.1.5进程控制块(2)3.PCB的组织٭链接٭索引执行指针就绪队列指针阻塞队列指针空闲队列指针PCB14PCB23PCB30PCB48PCB5PCB67PCB79PCB80PCB91进程管理等待队列示例structwait_queue{structtask_struct*task;structwait_queue*next;};PCBPCBPCB进程管理2.1.5进程控制块(3)3.PCB的组织٭索引PCB1PCB2PCB3PCB4PCB5PCB6PCB7执行指针就绪表指针阻塞表指针进程管理2.2进程控制2.2.1进程的创建一、进程图:٭描述了进程的家族关系:٭子进程可继承父的资源,撤消时应归还给父进程,父的撤消会撤消全部子进程。二、引起创建进程的事件:٭1.用户登录:▪为终端用户建立一进程٭2.作业调度:(不是进程调度)▪为被调度的作业建立进程٭3.提供服务:▪如要打印时建立打印进程进程管理2.2.1进程的创建(2)٭4.应用请求:▪由应用程序建立多个进程三、进程的创建:(creat原语)٭1.申请空白PCB(一个系统的PCB是有限的)٭2.为新进程分配资源(不同于一般的分配,PCB-LIST在一个特殊区域)٭3.初始化PCB٭4.将新进程插入就绪队列。进程管理2.2.2进程的终止一、引起进程终止的事件٭1.正常结束:如Halt、logoff٭2.异常结束:如Protecterror、overtime等٭3.外界干预:▪a.系统员kill进程;▪b.父进程终止;▪c.父进程请求。进程管理2.2.2进程的终止(2)二、进程的终止过程٭(1)检查进程状态;٭(2)执行态――中止,且置调度标志为真。٭(3)有无子孙需终止。٭(4)归还资源给其父进程或系统。٭(5)从PCB队列中移出PCB.进程管理2.2.3进程的阻塞与唤醒一、引起进程阻塞和唤醒的事件٭1.请求系统服务而得不到满足时,如问系统请求打印。٭2.启动某种操作而需同步时:如该操作和请求该操作的进程需同步运行(即非异步操作)。٭3.新数据尚未到达:如进程A写,进程B读,则A未写,完B不能读。٭4.无新工作可做。进程管理2.2.3进程的阻塞与唤醒(2)二、进程阻塞过程:٭是进程自身的一种主动行为٭a.调block原语٭b.停止执行,修改PCB入阻塞队列(一个或多个),并转调度。三、唤醒过程٭其它相关进程完成。٭a.wakeup原语٭b.修改PCB,入就绪队列٭可见,有block原语,在其它进程中就应有wakeup原语。进程管理2.2.4进程的挂起与激活一、进程的挂起过程٭由进程自己或其父进程调suspend原语完成,将该进程PCB移到指定区域,注意状态的改变,有可能要重新调度。二、进程的激活过程。٭active原语(如在外存,调入内存,改变状态,根据情况看是否调度,如抢先或非抢先)。阻塞、唤醒一般由OS实现,而挂起与激活可由用户干预。进程管理2.3进程同步同步:并发进程在执行次序上的协调,以达到有效的资源共享和相互合作,使程序执行有可再现性。进程管理2.3.1进程同步的基本概念1.两种形式的制约关系٭资源共享关系:(进程间接制约)▪需互斥地访问临界资源。٭相互合作关系:(进程直接制约)2.临界资源:(一次仅允许一个进程访问的资源)٭引起不可再现性是因为临界资源没有互斥访问。进程管理生产者-消费者问题Varn,integer;Typeitem=…;varbuffer:array[0,1,…,n-1]ofitem;in,out:0,1,…,n-1;counter:0,1,…,n;进程管理生产者-消费者问题producer:repeat…produceaniteminnextp;…whilecounter=ndono-op;buffer[in]:=nextp;in:=(in+1)modn;counter:=counter+1;untilfalse;consumer:repeatwhilecounter=0dono-op;nextc:=buffer[out];out:=(out+1)modn;counter:=counter-1;consumertheiteminnextc;untilfalse;进程管理生产者-消费者问题(2)设counter的初值为5register1:=counter;register2:=counter;register1:=register1+1;register2:=register2-1;counter:=register1;counter:=register2;register1:=counter;(register1:=5)register1:=register1+1;(register1:=6)register2:=counter;(register2:=5)register2:=register2-1;(register2:=4)counter:=register1;(counter:=6)counter:=register2;(counter:=4)进程管理定义:进程访问临界资源的那段代码。访问临界资源的描述:进入区:检查有无进程进入临界区:退出区:将访问标志复位RepeatEntrysectionCriticalsectionExitsectionUntilfalse3.临界区进程管理4.同步机制应遵循的准则1.空闲让进2.忙则等待3.有限等待:应保证为有限等待,不会产生死等。4.让权等待:不能进入临界区的执行进程应放弃CPU执行权。进程管理2.3.2信号量机制1整型信号量٭是一个整型量,通过2个原子操作wait(s)和signal(s)来访问。Wait(s):whiles=0dono-ops:=s-1;Signal(s):s:=s+1;进程管理2记录型信号量由于整型机制中会不断测试不满足“让权等待”而引入typesemaphore=recordvalue:integer;L:listofprocess;endL:为进程链表,用于链接所有等待该类资源进程。procedurewait(s)vars:semaphorebegins.value:=s.value–1;ifs.value0themblock(S,L)end进程管理2记录型信号量(2)proceduresignal(S)vars:semaphonebegins.value:=s.vaule+1ifs.value=0thenwakeup(s.L)end用wait(s)和signal(s)实现同步与互斥。在记录型信号量机制中:s.value初值:表示系统中某类资源的数目。s.value0:表该信号量链表中已阻塞进程的数目。进程管理3AND型信号量当不用它时,有可能发生系统死锁。死锁:在无外力作用下的一种僵持状态。AND信号量例:特点:要么全分配,要么一个也不分配。进程管理3AND型信号量processA:wait(Dmutex);wait(Emutex);processB:wait(Emutex);wait(Dmutex);若2进程交替执行,则死锁进程管理3AND型信号量Swait(s1,s2,…,sn)ifs1≥1and…andsn≥1thenfori:=1tondosi:=si-1;endforelseplacetheprocessinthewaitingqueuewiththefirstsifoundwithsi1,andsettheprogramcountofthisprocesstothebeginningofswaitoperationendifSsignal(s1,s2,…,sn)fori:=1tondosi:=si+1;removealltheprocesswaitinginthequeueassociatedwithsiintothereadyqueueendfor进程管理4信号量集(略)为提高效率而对AND信号的扩充。三种特例:(1)Swait(S,d,d):允许每次申请d个资源。当资源数少于d时,不予分配。(2)Swait(s,1,1):S1,记录型信号量。S=1时,互斥型信号量。(3)Swait(s,1,0),可控开关,当时,允许进入,S1时,不能进入。进程管理2.3.3信号量的应用1.利用信号量实现互斥varmutex:semaphore:=1beginparbeginprocess1:beginrepeatwait(mutex);criticalsetionsignal(mutex);remaindersectionuntilfalse;end进程管理1.利用信号量实现互斥(2)process2:beginrepeatwait(mutex);criticalsetionsignal(mutex);remaindersectionuntilfalse;endparend进程管理2.利用信号量来描述前趋关系(1)S1S2S3S4S5S6abcdegf前趋图举例进程管理利用信号量来描述前趋关系(2)Vara,b,c,d,e,f,g:semaphore:=0,0,0,0,0,0,0;BeginparbeginbeginS1;signal(a);signal(b);end;beginwait(a);S2;signal(c);signal(d);end;beginwait(b);S3;signal(e