1、进程管理进程管理I1C1P1I2C2P2进程管理进程管理P1P2P3P4进程管理进程管理I1I2I3I4C1C2C3C4P1P2P3P4t进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理 程序是静态的,进程是动态的;进程更能真实地描述并发,而程序不能;一个程序可对应多个进程;进程有生命周期,有诞生有消亡,短暂的;而程序是相对长久的;程序可作为软件资源长期保存,进程只是一次执行过程,是暂时的;进程是系统分配调度的独立单位,能与其他进程并发执行;进程具有创建其他进程的功能,而程序没有。进程管理进程管理就绪就绪阻塞阻塞执行执行时间片完时间片完进程调度进程调度I/O请求
2、请求I/O完成完成图图25 进程的三种基本状态及其转换进程的三种基本状态及其转换进程管理进程管理进程管理进程管理执行执行活动活动就绪就绪静止静止就绪就绪活动活动阻塞阻塞静止静止阻塞阻塞激活激活挂起挂起激活激活挂起挂起释放释放释放释放挂起挂起请求请求I/O进程管理进程管理1 1如果系统中有如果系统中有N N个进程,运行的进程最多几个,最个进程,运行的进程最多几个,最少几个;就绪进程最多几个最少几个;阻塞进程最少几个;就绪进程最多几个最少几个;阻塞进程最多几个,最少几个?多几个,最少几个?2.2.有没有这样的状态转换,为什么?有没有这样的状态转换,为什么?(1 1)阻塞阻塞运行;运行;(2 2)就
3、绪就绪阻塞阻塞进程管理进程管理进程管理进程管理v写一个程序描述进程状态迁移过程。写一个程序描述进程状态迁移过程。v要求:要求:提供导致进程状态变化的调用接口,包括创建、提供导致进程状态变化的调用接口,包括创建、删除、调度、阻塞、时间到、挂起、激活等。删除、调度、阻塞、时间到、挂起、激活等。实现进程列表显示的接口。实现进程列表显示的接口。注:这里设计的进程是一个假设的对象实体,是注:这里设计的进程是一个假设的对象实体,是由程序自己创建和删除,不是系统维护的进程。由程序自己创建和删除,不是系统维护的进程。进程管理进程管理pid进程状态进程状态现场现场优先级优先级阻塞原因阻塞原因程序地址程序地址同步
4、机制同步机制资源清单资源清单链接指针链接指针进程管理进程管理执行指针执行指针就绪队列指针就绪队列指针阻塞队列指针阻塞队列指针空闲队列指针空闲队列指针PCB14PCB23PCB30PCB48PCB5PCB67PCB79PCB80PCB91进程管理进程管理structstruct wait_queue wait_queue struct task_structstruct task_struct *task;task;structstruct wait_queue wait_queue*next;next;PCBPCBPCB进程管理进程管理PCB1PCB2PCB3PCB4PCB5PCB6PCB7执
5、行指针执行指针就绪表指针就绪表指针阻塞表指针阻塞表指针进程管理进程管理进程管理进程管理v处理机执行状态 系统态 用户态v进程控制机构 内核:中断处理,时钟管理,进程管理,存储器管理,设备管理等。原语(primitive)由若干条指令构成的“原子操作(atomic operation)”过程,作为一个整体而不可分割要么全都完成,要么全都不做。许多系统调用就是原语。进程管理进程管理根ABCGFED祖先进程管理进程管理进程管理进程管理进程管理进程管理Create(s0,m0,pi)p=Get_New_PCB();/分配新的分配新的PCB pid=Get_New_PID();/分配进程的分配进程的PI
6、D pID=pid;/设置进程的设置进程的PID p-CPU_State=s0;/CPU的状态的状态 p-Memory=m0;/内存内存 p-Priority=pi;/优先级优先级 p-Status.Type=Ready;/进程状态进程状态 p-Status.List=RL;/进程队列进程队列 Insert(RL,p);/将进程将进程p插入就绪队列插入就绪队列 Scheduler();/调度程序调度程序 进程管理进程管理进程管理进程管理进程管理进程管理 一个典型进程终止原语如下:Destroy(pid)p=Get_PCB(pid);/获取进程控制块 Kill_Tree(p);/删除整个进程树
7、Scheduler();/调度器进程管理进程管理进程管理进程管理进程管理进程管理Block()/获取当前进程的进程控制块 p=Get_PCB();/保存当前进程的状态 s=p-Status.Type;cpu=p-Processor_ID;/处理机状态/保存处理机现场 p-CPU_State=Interrupt(cpu);/将进程的状态改为阻塞 p-Status.Type=Blocked;Insert(BL,p);/将进程插入等待队列 Scheduler();阻塞原语的实现过程阻塞原语的实现过程进程管理进程管理Wakeup(pid)/获取进程控制P=Get_PCB(pid);/从阻塞队列中移出进
8、程pRemove(p-Status.List,p);/进程的状态改为就p-Status.Type=Ready;/将进程插入到就绪队列Insert(RL,p);/调度程序Scheduler();v唤醒原语的执行过程如下:唤醒原语的执行过程如下:进程管理进程管理进程管理进程管理v实例研究:Linux和Windows系统创建进程 LinuxLinux系统中进程创建系统中进程创建fork fork 在在LinuxLinux系统中,用户或系统可以使用系统调用系统中,用户或系统可以使用系统调用forkfork来创建一个来创建一个新的进程。新的进程。forkfork的函数原形为:的函数原形为:pid_tpi
9、d_t fork()fork()当一个进程调用当一个进程调用forkfork创建一个子进程后,父进程和子进程都在自创建一个子进程后,父进程和子进程都在自己独立的地址空间内执行。它们之间不共享任何地址空间,但是己独立的地址空间内执行。它们之间不共享任何地址空间,但是父子进程具有相同的程序代码、数据和堆栈段,父子进程具有相同的程序代码、数据和堆栈段,因此,为了区因此,为了区别运行中的父子进程,别运行中的父子进程,forkfork系统调用向父子进程返回不同的值。系统调用向父子进程返回不同的值。它向子进程返回它向子进程返回0 0,而向父进程返回子进程的,而向父进程返回子进程的PIDPID。进程管理进程
10、管理.Beforefork()After.forkfork执行前执行前一个控制流进入内核一个控制流进入内核forkfork模块模块。Beforefork()After。Beforefork()Afterforkforkfork执行后执行后调用后,从调用后,从forkfork返回两个控制流返回两个控制流父进程父进程子进程子进程进程管理进程管理/*-The file create.c introduces the use of fork.-*/#include main()int pid;printf(“Before:my pid is%d.n”,getpid();pid=fork();/crea
11、te new process if(pid=-1)/出错处理出错处理 perror(“Can not fork process!”);/error else if(pid=0)/子进程代码子进程代码 printf(“I am the child.My pid is%d.n”,getpid();else /父进程代码父进程代码 printf(“I am the parent.My child is%d.n”,pid);进程管理进程管理vWindows系统中进程的创建CreateProcess 在windows系统,一个进程可以调用win32 API的CreateProcess函数来创建一个新的进
12、程及其主线程,以执行指定的任务。在利用CreateProcess建立进程时,操作系统要为新进程分配新的地址空间和资源,建立新的主线程。一旦新进程建立,父进程仍然使用原来的地址空间继续执行,而新进程则在新的地址空间执行一个新的程序。CreateProcess含有10个参数来指定建立进程的方式,具体参数的含义可参考相关的Win32 API手册。进程管理进程管理#include#include#include STARTUPINFO startInfo;PROCESS_INFORMATION processInfo;strcpy(lpCommandLine,“c:WINNTSYSTEM32NOTEP
13、AD.EXE temp.txt”);ZeroMemory(&startupInfo,sizeof(startInfo);startInfo.cb=sizeof(startInfo);if(!CreateProcess(NULL,lpCommandLine,NULL,NULL,FALSE,HIGH_PRIORTY_CLASS CREATE_NEW_CONSOLE,NULL,NULL,&startInfo,&processInfo)fprintf(stderr,”CreateProcess failed!”);ExitProcess(1);CloseHandle(&processInfo.hThr
14、ead);进程管理进程管理进程管理进程管理进程管理进程管理v 进程同步举例:公共汽车中的司机和售票员进程同步举例:公共汽车中的司机和售票员司机司机 P1 售票员售票员 P2 while(true)while(true)关门;关门;启动车辆;启动车辆;正常运行;正常运行;售票;售票;到站停车;到站停车;开门;开门;进程的同步是指系统中多个进程中发生的事件存在某种时序进程的同步是指系统中多个进程中发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。具体说,一个进关系,需要相互合作,共同完成一项任务。具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获程运行到某一点时要求另一伙
15、伴进程为它提供消息,在未获得消息之前,该进程处于等待状态,获得消息后被唤醒进入得消息之前,该进程处于等待状态,获得消息后被唤醒进入就绪态。就绪态。进程管理进程管理 例如:例如:系统中只有一台打印机,进程系统中只有一台打印机,进程p1p1,p2p2都需要都需要使用打印机。使用打印机。临界资源(临界资源(Critical ResourceCritical Resource)一次只能被一个进程使用一次只能被一个进程使用 形式:硬件,软件:变量、数据、队列等形式:硬件,软件:变量、数据、队列等 当临界资源由一个进程占用后,其它进程如果要使用它,必须等待占用进程使用完毕并把它释放后,才能由另一个进程使用
16、。多个进程在共享临界资源时的这种制约关系称为进程的互斥。进程管理进程管理进程管理进程管理producer:repeat produce an item in nextp;while counter=n do no-op;bufferin:=nextp;in:=(in+1)mod n;counter:=counter+1;until false;consumer:repeatwhile counter=0 do no-op;nextc:=bufferout;out:=(out+1)mod n;counter:=counter-1;consumer the item in nextc;until
17、false;进程管理进程管理进程管理进程管理进程管理进程管理v一次至多允许一个进程进入临界区内v一个进程不能不限地停留在临界区内v一个进程不能无限地等待进入临界区 有空让进 无空等待 择一而入 算法可行进程管理进程管理进程管理进程管理进程管理进程管理v 使用LOCK和UNLOCK原语v 系统为每一个临界资源设置一把锁,当一个进程欲进入临界区时,首先关锁,推出临界区时,把锁打开。v Lock原语:Lock(W)begin L:if W=1 then goto L else W:=1;end;UNLOCK原语:UNlock(W)begin W:=0;end用变量W代表某种资源的状态,w称为锁,锁位
18、值 为0;表示资源可用,而用1表示资源已被占用。进程管理进程管理 互斥的各个进程在各自单独执行时都可以得到正确的运行结果,但是当它们在临界区内交叉执行时就可能出现问题。而同步的各个进程,如果各自单独执行将不会完成作业的特定任务,只要当它们互相配合、共同协调推进时才能得到正确的运行结果。互斥的进程只要求它们不能同时进入临界区,而至于哪个进程先进入则不会产生运行的错误。但同步的进程的协调关系是建立在它们之间执行时序的基础上,所以,各个进程必须按照严格的先后次序执行。一般情况下,互斥的进程并不知道对方的存在,而同步的进程不仅知道其它进程的存在,还要通过与其它进程的通信来达到相互的协调。进程管理进程管
19、理进程互斥的软件方法进程互斥的软件方法 通过平等协商方式实现进程互斥的最初方法是软件方法 其基本思路是在进入区检查和设置一些标志,如果已有进程在临界区,则在进入区通过循环检查进行等待;在退出区修改标志 其中的主要问题是设置什么标志和如何检查标志软件解法的缺点:1.忙等待 2.实现过于复杂 3.需要高的编程技巧进程管理进程管理 “测试并设置”指令“交换”指令“开关中断”指令进入临界区前执行:进入临界区前执行:执行执行“关中断关中断”指令指令离开临界区后执行:离开临界区后执行:执行执行“开中断开中断”指令指令 能够实现进程互斥,但不能满足“让权等待”,造成处理机资源浪费进程管理进程管理进程管理进程
20、管理进程管理进程管理进程管理进程管理进程管理进程管理在信号量的实现中,在信号量的实现中,S.value的初值表示系统某类资源的数的初值表示系统某类资源的数目,因而又称为资源信号量,对它的每次目,因而又称为资源信号量,对它的每次wait操作,意味着操作,意味着进程请求一个单位的该类资源。进程请求一个单位的该类资源。当当S.value0时,表示该类资源已分配完毕,因而进程调用时,表示该类资源已分配完毕,因而进程调用block原语,进行自我阻塞,放弃处理机,并插入到信号量原语,进行自我阻塞,放弃处理机,并插入到信号量链表链表S.L中。此时,中。此时,S.value的绝对值表示在该信号量链表中的绝对值
21、表示在该信号量链表中已阻塞进程的个数、亦即恰好等于对信号量已阻塞进程的个数、亦即恰好等于对信号量S实施实施wait操作操作而被封锁起来并进入信号量而被封锁起来并进入信号量S队列的进程数。队列的进程数。对信号量的每次对信号量的每次signal操作,表示执行进程释放一个单位资操作,表示执行进程释放一个单位资源。源。进程管理进程管理进程管理进程管理v问题的引入问题的引入 假定有两个进程假定有两个进程A A和和B B,它们都要求访问共享数据,它们都要求访问共享数据D D和和E E。当然,共。当然,共享数据都应作为临界资源。为此,可为这两个数据分别设置用于互斥的享数据都应作为临界资源。为此,可为这两个数
22、据分别设置用于互斥的信号量信号量DmutexDmutex和和EmutexEmutex,并令它们的初值都是,并令它们的初值都是1 1。相应地,在两个进程。相应地,在两个进程中都要包含两个对中都要包含两个对DmutexDmutex和和EmutexEmutex的操作,即的操作,即 process A:process B:process A:process B:wait(Dmutex);wait(Emutex wait(Dmutex);wait(Emutex););wait(Emutex);wait(Dmutex wait(Emutex);wait(Dmutex););若进程若进程A A和和B B按下
23、述次序交替执行按下述次序交替执行waitwait操作:操作:process A:wait(Dmutexprocess A:wait(Dmutex););于是于是DmutexDmutex=0=0 process B:wait(Emutex process B:wait(Emutex););于是于是EmutexEmutex=0=0 process A:wait(Emutex process A:wait(Emutex););于是于是EmutexEmutex=-1,A=-1,A阻塞阻塞 process B:wait(Dmutexprocess B:wait(Dmutex););于是于是DmutexD
24、mutex=-1,B=-1,B阻塞阻塞进程管理进程管理v出现死锁的原因主要在于进程运行时需要多个资源,出现死锁的原因主要在于进程运行时需要多个资源,在为每个进程分配所需的全部资源时,不能保证原在为每个进程分配所需的全部资源时,不能保证原子操作,从而导致进程之间相互等待对方释放所占子操作,从而导致进程之间相互等待对方释放所占资源的死锁状态。为了解决进程同时需要多种资源资源的死锁状态。为了解决进程同时需要多种资源且每种资源要占用一段时间的问题,人们提出了且每种资源要占用一段时间的问题,人们提出了ANDAND型信号量同步机制。型信号量同步机制。进程管理进程管理 将进程在整个运行过程中需要的所有资源,
25、一次性全将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。只要部地分配给进程,待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其他所有可能为之分尚有一个资源未能分配给进程,其他所有可能为之分配的资源,也不分配给它。亦即,对若干个临界资源配的资源,也不分配给它。亦即,对若干个临界资源的分配,采取了原子操作方式:要么全部分配给进程,的分配,采取了原子操作方式:要么全部分配给进程,要么一个也不分配。要么一个也不分配。进程管理进程管理Swait(s1,s2,sn)if s11 and and sn 1 then for i:=1 to n do si:=
26、si-1;endforelseplace the process in the waiting queue with the first si found with si1,and set the program count of this process to the beginning of swait operationend if Ssignal(s1,s2,sn)for i:=1 to n do si:=si+1;remove all the process waiting in the queue associated with si into the ready queue en
27、dfor进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理S1S2S3S4S5S6abcdegf进程管理进程管理进程管理进程管理进程管理进程管理问题描述问题描述 生产者生产者消费者问题可描述如下:消费者问题可描述如下:有有n n个生产者和个生产者和m m个消费者,连接在个消费者,连接在一个有一个有N N个单位缓冲区的有界缓冲上。个单位缓冲区的有界缓冲上。其中,其中,pipi和和cjcj都是并发进程,只要都是并发进程,只要缓冲区未满,生产者缓冲区未满,生产者pipi生产的产品生产的产品就可投入缓冲区;只要缓冲区不空,就可投入缓冲区;只要缓冲区不空,消费者进程消费者进程cjcj就可从
28、缓冲区取走并就可从缓冲区取走并消耗产品。如右图所示。消耗产品。如右图所示。进程管理进程管理 为了使这两类进程协调工作,防止盲目生产和消费,它们应满足如为了使这两类进程协调工作,防止盲目生产和消费,它们应满足如下的同步条件:下的同步条件:任何时刻所有生产者存放产品的数目不能超过缓冲区的总容量任何时刻所有生产者存放产品的数目不能超过缓冲区的总容量(N N);所有消费者取出的产品总量不能超过所有生产者当前生产的产品所有消费者取出的产品总量不能超过所有生产者当前生产的产品总量。总量。设置三个信号量:设置三个信号量:full:表示放有产品的缓冲区数,其初值为:表示放有产品的缓冲区数,其初值为0。empt
29、y:表示可供使用的缓冲区数,其初值为:表示可供使用的缓冲区数,其初值为N。mutex:互斥信号量,初值为:互斥信号量,初值为1,表示各进程互斥进入临界区,表示各进程互斥进入临界区,保证任何时候只有一个进程使用缓冲区。保证任何时候只有一个进程使用缓冲区。进程管理进程管理producer:begin repeat Produce an item in nextp;进程管理进程管理进程管理进程管理进程管理进程管理v 问题描述:问题描述:假设有五个哲学家,他们花费一生的时光思考和吃假设有五个哲学家,他们花费一生的时光思考和吃饭。这些哲学家公用一个圆桌,每个哲学家都有饭。这些哲学家公用一个圆桌,每个哲学
30、家都有一把椅子。在桌中央有一碗米饭。每个哲学家面一把椅子。在桌中央有一碗米饭。每个哲学家面前有一只空盘于,每两人之间放一根筷子(如右前有一只空盘于,每两人之间放一根筷子(如右图)。当一个哲学家思考时,他与其他同事不交图)。当一个哲学家思考时,他与其他同事不交互,时而,哲学家会感到饥饿,并试图拿起与他互,时而,哲学家会感到饥饿,并试图拿起与他最近的两支筷子(他与邻近左、右两人之间的筷最近的两支筷子(他与邻近左、右两人之间的筷子)。一个哲学家一次只能拿起一支筷子。显然,子)。一个哲学家一次只能拿起一支筷子。显然,他不能从其他哲学家手里拿走筷子。当一个饥饿他不能从其他哲学家手里拿走筷子。当一个饥饿的
31、哲学家同时有两支筷子时,他就能不用释放他的哲学家同时有两支筷子时,他就能不用释放他的筷子而自己吃了。当吃完后,他会放下两支筷的筷子而自己吃了。当吃完后,他会放下两支筷子,并再次开始思考。子,并再次开始思考。进程管理进程管理进程管理进程管理v以上解法会出现死锁。为防止死锁发生可采取的措施:以上解法会出现死锁。为防止死锁发生可采取的措施:最多允许最多允许4 4个哲学家同时坐在桌子周围个哲学家同时坐在桌子周围 仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子(子()给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷给所有哲学家编号,奇数号的哲学家
32、必须首先拿左边的筷子,偶数号的哲学家则反之子,偶数号的哲学家则反之v为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,并且一次拿到两只筷子,否则不拿。并且一次拿到两只筷子,否则不拿。进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理v问题描述:问题描述:理发店有一位收银员,理发店有一位收银员,k k位理发师、位理发师、k k张理发椅和张理发椅和n n把供等候把供等候理发的顾客坐的沙发。如果没有顾客,理发师便在理发椅上理发的顾客坐的沙发。如果没有顾客,理发师便在
33、理发椅上睡觉。一个顾客到来时,他必须叫醒理发师。如果全部理发睡觉。一个顾客到来时,他必须叫醒理发师。如果全部理发师正在理发时又有顾客来到,则如果有空沙发可坐,就坐下师正在理发时又有顾客来到,则如果有空沙发可坐,就坐下来等待,如果没有空沙发就离开这个理发店。来等待,如果没有空沙发就离开这个理发店。进程管理进程管理v 为了解决这个问题,可以定义三个信号量为了解决这个问题,可以定义三个信号量customercustomer、barbersbarbers和和mutexmutex以及一个计数变量以及一个计数变量waitingwaiting。信号量信号量customercustomer用来记录等待理发的顾
34、客数(不包括正用来记录等待理发的顾客数(不包括正在理发的顾客),其初值化为在理发的顾客),其初值化为0 0。信号量信号量barbersbarbers用来记录正在等候顾客的理发师数,其值用来记录正在等候顾客的理发师数,其值为为k k。Count:Count:计数器,用于记录等候的顾客数;计数器,用于记录等候的顾客数;信号量信号量mutexmutex 用于实现计数器用于实现计数器countcount的互斥访问,其初值的互斥访问,其初值为为1 1。进程管理进程管理 semaphore customers=0;/*等候理发的顾客数等候理发的顾客数*/semaphore barbers=k;/*等候顾客
35、的理发师数等候顾客的理发师数*/semaphore mutex=1;Int count=0;/*等候顾客数等候顾客数(还没有还没有理发的理发的)*/void barber()while(TRUE);/*理完一人理完一人,还有顾客吗还有顾客吗?*/wait(cutomers);/*若无顾客若无顾客,理发师睡眠理发师睡眠*/wait(mutex);/*进程互斥进程互斥*/waiting=waiting-1;/等候顾客数少一个等候顾客数少一个 cut_hair();/理发师为一个顾客理发理发师为一个顾客理发 signal(mutex);/*开放临界区开放临界区*/signal(barbers);/理
36、发师为顾客理完发理发师为顾客理完发 进程管理进程管理void customer()wait(mutex);/*进程互斥进程互斥*/if(countn)/*看看有没有空椅子看看有没有空椅子*/count=count+1;/*等候顾客数加等候顾客数加1*/signal(customers);/*必要的话唤醒理发师必要的话唤醒理发师*/signal(mutex);/*开放临界区开放临界区*/wait(barbers);/*无理发师无理发师,顾客坐着养神顾客坐着养神*/get-haircut();/*一个顾客坐下等理发一个顾客坐下等理发*/else signal(mutex);/*人满了人满了,走吧走
37、吧!*/进程管理进程管理va,ba,b 两点间是一段东西向的单行车道,现要设计一两点间是一段东西向的单行车道,现要设计一个自动管理系统,管理规则如下:当个自动管理系统,管理规则如下:当abab间有车辆在间有车辆在行驶时同方向的车可以同时驶入行驶时同方向的车可以同时驶入abab段,但另一方向段,但另一方向的车必须在的车必须在abab段外等待;当段外等待;当abab之间无车时,到达之间无车时,到达a a(或(或b b)的车辆可以进入)的车辆可以进入abab段,但不能从段,但不能从a a,b b点同点同时驶入;当某方向在时驶入;当某方向在abab段行驶的车辆使出了段行驶的车辆使出了abab段且段且无
38、车辆进入无车辆进入abab段时,应让另一方向等待的车辆进入段时,应让另一方向等待的车辆进入abab段行驶。请用段行驶。请用wait,signalwait,signal工具对工具对abab段实现正确段实现正确管理。管理。进程管理进程管理Semaphore s,mutexab,mutexbaPab:Wait(mutexab)Countab+If countab=1 then wait(s);Signal(mutexab).wait(mutexab)countab-;if countab=0 then signal(s)signal(mutexab);进程管理进程管理Pba:wait(mutexba
39、)countba=countba+1;If countba=1 then wait(s)signal(mutexba)enter;wait(mutexba)countba-;if countba=0 then signal(s)signal(mutexba);进程管理进程管理进程管理进程管理局部数据过程1过程k出口初始化代码入口管程等待调用的进程队列进程管理进程管理v管程具有以下特点:v(1)管程内的局部变量只能被局部于管程内的过程所访问;反之亦然,即局部于管程内的过程只能访问管程内的变量v(2)任何进程只能通过调用管程提供的过程入口进入管程。v(3)任何时刻最多只能有一个进程在管程中执行。进
40、程管理进程管理 管程构造确保一次只能有一个进程在管程内活动,提供了一种实现互管程构造确保一次只能有一个进程在管程内活动,提供了一种实现互斥的简便途径,但这还不够,还需要一种办法使得进程在无法继续运斥的简便途径,但这还不够,还需要一种办法使得进程在无法继续运行时被阻塞。例如,当一个进程进入管程后等待某个条件未满足时,行时被阻塞。例如,当一个进程进入管程后等待某个条件未满足时,这个进程必须挂起,释放管程,以便其他进程能够进入。以后,当所这个进程必须挂起,释放管程,以便其他进程能够进入。以后,当所需的条件满足了,且该管程处于可用的情况下,就要恢复该进程的执需的条件满足了,且该管程处于可用的情况下,就
41、要恢复该进程的执行,且让它在先前的挂起点重新进入该管程。行,且让它在先前的挂起点重新进入该管程。解决这个问题的方法是引入解决这个问题的方法是引入条件变量条件变量(condition variables)。条件变)。条件变量是当调用管程过程的进程无法运行时,用于阻塞进程的一种信号量,量是当调用管程过程的进程无法运行时,用于阻塞进程的一种信号量,它包含在管程内,且只能在管程内对它进行访问。对条件变量仅有的它包含在管程内,且只能在管程内对它进行访问。对条件变量仅有的操作是操作是wait和和signal。当一个管程过程发现无法继续时,它在某些条件。当一个管程过程发现无法继续时,它在某些条件变量变量co
42、ndition上执行上执行wait,这个动作引起调用进程阻塞,并将另一个,这个动作引起调用进程阻塞,并将另一个先前被挡在管程之外的进程调入管程。先前被挡在管程之外的进程调入管程。进程管理进程管理v 另一个进程可以通过对其伙伴在等待的同一个条件变量另一个进程可以通过对其伙伴在等待的同一个条件变量conditioncondition上上执行同步原语执行同步原语signalsignal操作来唤醒等待进程。操作来唤醒等待进程。v 使用使用signalsignal释放等待进程时,可能出现两个进程同时停留在管程内。释放等待进程时,可能出现两个进程同时停留在管程内。解决方法:解决方法:执行执行signals
43、ignal的进程等待,直到被释放进程退出管程或的进程等待,直到被释放进程退出管程或等待另一个条件等待另一个条件 被释放进程等待,直到执行被释放进程等待,直到执行signalsignal的进程退出管程或的进程退出管程或等待另一个条件等待另一个条件进程管理进程管理。进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理mqmutexsmsender:Asize:5text:Hello
44、send(B,a)sender:Asize:5text:hellonext:0发送区发送区Asender:Asize:5text:Helloreceive(b)接收区接收区Bab进程进程APCB(B)进程进程B进程管理进程管理v 试说明如果使用试说明如果使用send_mailboxsend_mailbox和和receive_mailboxreceive_mailbox 原原语实现打印文件的系统。欲打印的进程将要打印的文语实现打印文件的系统。欲打印的进程将要打印的文件名发送到邮箱件名发送到邮箱printer,printer,打印机假脱机将打印邮箱中打印机假脱机将打印邮箱中出现名字的任何文件出现名
45、字的任何文件/process wish to printCharfilename;Status=send_mailbox(“printer”,filename);If(status 0)/failure/print spoolerchar filename while(true)status=receive_mailbox(“printer”,filename);if(status 0)/failureprint(filename);进程管理进程管理问题:可能会有很多个客户访问服务器,问题:可能会有很多个客户访问服务器,WEB服务器如何处理这多个访问?服务器如何处理这多个访问?这台计算机上运行
46、着这台计算机上运行着WEB服务器程序,管理着许多服务器程序,管理着许多网站网站这台计算机上运行着这台计算机上运行着IE浏浏览器程序览器程序HTTP协议协议请请求求应应答答进程管理进程管理vWEB服务器程序作为单个进程顺序处理:一次处理一个用户请求,处理完后再处理下一个请求 用户等待的时间可能会很长v使用多个进程:有一个进程负责侦听,看是否有用户的请求到来。如果有,则创建另一个进程处理请求。一个用户请求对应一个进程。进程频繁的创建与撤销,频繁的进程切换,开销大进程频繁的创建与撤销,频繁的进程切换,开销大进程管理进程管理进程管理进程管理v线程的概念v线程是指进程内部的一个可独立执行的实体,线程是处
47、理机调度的基本单位。线程拥有少量必不可少的资源,如程序计数器、一组寄存器、栈,它可与同属一个进程的其他线程共享进程所拥有的全部资源。v因为同一进程内线程共享内存和文件,因此他们之间相互通信,无需调用内核。v由于同一进程内的线程都可访问整个进程的所有资源,所以它们之间的通信比进程间通信更方便,而同一进程内的线程间切换也会由于许多上下文的相同而简化。进程管理进程管理v创建线程比创建进程所需时间短v撤销线程比撤销进程花费的时间短v线程间切换比进程间切换花费时间短v线程可以提高通信效率。由于同进程内线程间共享内存和文件资源,可以不通过内核直接进行通信v适合多处理机系统进程管理进程管理进程管理进程管理进
48、程管理进程管理线程进程管理进程管理v状态参数 操作系统中的每一个线程都可以利用线程标志符和一组状态参数进行描写(寄存器状态、堆栈、线程运行状态、优先级、线程专有存储器、信号屏蔽)v线程运行状态 各线程之间也存在着共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。v执行状态v就绪状态v阻塞状态进程管理进程管理 进程与线程进程与线程w 进程是进程是程序在一个数据集合上运行的过程,使系统进行资程序在一个数据集合上运行的过程,使系统进行资源分配和调度的一个独立单位。源分配和调度的一个独立单位。引入进程的目的是为了使多个引入进程的目的是为了使多个程序并发执行,以提高资源利用率和系统吞吐量。程序
49、并发执行,以提高资源利用率和系统吞吐量。w 线程:能够独立运行的基本单位,轻量级的进程,一个进线程:能够独立运行的基本单位,轻量级的进程,一个进程可以创建多个线程,有统一的地址空间。引入线程的目的是程可以创建多个线程,有统一的地址空间。引入线程的目的是为了减少程序在并发执行时所付出的时空开销。为了减少程序在并发执行时所付出的时空开销。进程进程线程线程程序计数器程序计数器计算机计算机计算机计算机进程管理进程管理 线程线程有有运行、阻塞、就绪、结束状态。每个线程有自己的程序计运行、阻塞、就绪、结束状态。每个线程有自己的程序计数器和堆栈。像进程一样共享处理机。数器和堆栈。像进程一样共享处理机。w 同
50、一进程中的线程不像不同进程之间完全是独立的,所有线同一进程中的线程不像不同进程之间完全是独立的,所有线程有同一地址空间。线程共享进程所有拥有的资源。程有同一地址空间。线程共享进程所有拥有的资源。每个线程的项目每个线程的项目 程序计数器程序计数器 堆栈堆栈 寄存器组寄存器组 子线程子线程 状态状态 每个进程的项目每个进程的项目 地址空间地址空间 全局变量全局变量 打开的文件打开的文件 子进程子进程 计时器计时器 标志标志 信号量信号量 计算信息计算信息进程管理进程管理线程-应用举例v 线程应用举例:例1:LAN中的一个文件服务器,在一段时间内需要处理几个文件请求。有效的方法是:为每一个请求创建一