版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、进程管理进程管理I1C1P1I2C2P2进程管理进程管理P1P2P3P4进程管理进程管理I1I2I3I4C1C2C3C4P1P2P3P4t进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理 程序是静态的,进程是动态的; 进程更能真实地描述并发,而程序不能; 一个程序可对应多个进程; 进程有生命周期,有诞生有消亡,短暂的;而程序是相对长久的;程序可作为软件资源长期保存,进程只是一次执行过程,是暂时的; 进程是系统分配调度的独立单位,能与其他进程并发执行; 进程具有创建其他进程的功能,而程序没有。进程管理进程管理就绪就绪阻塞阻塞执行执行时间片完时间片完进程调度进程调度
2、I/O请求请求I/O完成完成图图25 进程的三种基本状态及其转换进程的三种基本状态及其转换进程管理进程管理v 静止阻塞静止阻塞活动阻塞活动阻塞进程管理进程管理执行执行活动活动就绪就绪静止静止就绪就绪活动活动阻塞阻塞静止静止阻塞阻塞激活激活挂起挂起激活激活挂起挂起释放释放释放释放挂起挂起请求请求I/O进程管理进程管理1 1如果系统中有如果系统中有N N个进程,运行的进程最多几个,最个进程,运行的进程最多几个,最少几个;就绪进程最多几个最少几个;阻塞进程最少几个;就绪进程最多几个最少几个;阻塞进程最多几个,最少几个?多几个,最少几个?2. 2. 有没有这样的状态转换,为什么?有没有这样的状态转换,
3、为什么? (1 1) 阻塞阻塞运转;运转; (2 2) 就绪就绪阻塞阻塞进程管理进程管理进程管理进程管理v写一个程序描述进程状态迁移过程。写一个程序描述进程状态迁移过程。v要求:要求:v提供导致进程状态变化的调用接口,包括创建、删提供导致进程状态变化的调用接口,包括创建、删除、调度、阻塞、时间到、挂起、激活等。除、调度、阻塞、时间到、挂起、激活等。v实现进程列表显示的接口。实现进程列表显示的接口。v注:这里设计的进程是一个假设的对象实体,是由注:这里设计的进程是一个假设的对象实体,是由程序自己创建和删除,不是系统维护的进程。程序自己创建和删除,不是系统维护的进程。进程管理进程管理pid进程状态
4、进程状态现场现场优先级优先级阻塞原因阻塞原因程序地址程序地址同步机制同步机制资源清单资源清单链接指针链接指针进程管理进程管理执行指针执行指针就绪队列指针就绪队列指针阻塞队列指针阻塞队列指针空闲队列指针空闲队列指针PCB14PCB23PCB30PCB48PCB5PCB67PCB79PCB80PCB91进程管理进程管理struct wait_queue struct wait_queue struct task_struct struct task_struct * * task; task;struct wait_queue struct wait_queue * * next; next;PC
5、BPCBPCB进程管理进程管理PCB1PCB2PCB3PCB4PCB5PCB6PCB7执行指针执行指针就绪表指针就绪表指针阻塞表指针阻塞表指针进程管理进程管理进程管理进程管理v处理机执行状态v系统态v用户态v进程控制机构v内核:中断处理,时钟管理,进程管理,存储器管理,设备管理等。v原语primitive)v由若干条指令构成的“原子操作(atomic operation)”过程,作为一个整体而不可分割要么全都完成,要么全都不做。v许多系统调用就是原语。进程管理进程管理根ABCGFED祖先进程管理进程管理进程管理进程管理进程管理进程管理Create (s0,m0,pi) p=Get_New_PC
6、B(); /分配新的分配新的PCB pid=Get_New_PID(); /分配进程的分配进程的PID 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(); /调度程序调度程序 进程管理进程管理进程管理进程管理进程管理进程管理 一个典型进程终止原
7、语如下: Destroy ( pid ) p=Get_PCB(pid); /获取进程控制块 Kill_Tree(p); /删除整个进程树 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); /将进程插入等待队列 S
8、cheduler();阻塞原语的实现过程阻塞原语的实现过程进程管理进程管理Wakeup( pid ) /获取进程控制P=Get_PCB(pid); /从阻塞队列中移出进程pRemove(p-Status.List,p);/进程的状态改为就p-Status.Type=Ready; /将进程插入到就绪队列Insert (RL,p); /调度程序Scheduler ();v唤醒原语的执行过程如下:唤醒原语的执行过程如下:进程管理进程管理进程管理进程管理v实例研究:Linux和Windows系统创建进程vLinux系统中进程创建fork v在Linux系统中,用户或系统可以使用系统调用fork来创建一
9、个新的进程。fork的函数原形为: v pid_t fork()v当一个进程调用fork创建一个子进程后,父进程和子进程都在自己独立的地址空间内执行。它们之间不共享任何地址空间,但是父子进程具有相同的程序代码、数据和堆栈段, 因此,为了区别运行中的父子进程,fork系统调用向父子进程返回不同的值。它向子进程返回0,而向父进程返回子进程的PID。进程管理进程管理.Beforefork()After.forkfork执行前执行前一个控制流进入内核一个控制流进入内核forkfork模块模块。Beforefork()After。Beforefork()Afterforkforkfork执行后执行后调用
10、后,从调用后,从forkfork返回两个控制流返回两个控制流父进程父进程子进程子进程进程管理进程管理/* - The file create.c introduces the use of fork. -*/ #include main() int pid; printf(“Before: my pid is %d .n”,getpid(); pid=fork(); /create new process if (pid = -1) /出错处理 perror(“Can not fork process!”); /error else if (pid =0) /子进程代码 printf(“I a
11、m the child. My pid is %d .n”, getpid();else /父进程代码 printf(“I am the parent. My child is %d .n”,pid); 进程管理进程管理vWindows系统中进程的创建CreateProcess v在windows系统,一个进程可以调用win32 API的CreateProcess函数来创建一个新的进程及其主线程,以执行指定的任务。在利用CreateProcess建立进程时,操作系统要为新进程分配新的地址空间和资源,建立新的主线程。一旦新进程建立,父进程仍然使用原来的地址空间继续执行,而新进程则在新的地址空间执
12、行一个新的程序。vCreateProcess含有10个参数来指定建立进程的方式,具体参数的含义可参考相关的Win32 API手册。进程管理进程管理 #include #include #include STARTUPINFO startInfo; PROCESS_INFORMATION processInfo; strcpy(lpCommandLine,“c:WINNTSYSTEM32NOTEPAD.EXE temp.txt”);ZeroMemory(&startupInfo,sizeof(startInfo);startInfo.cb=sizeof(startInfo);if (!
13、CreateProcessNULL,lpCommandLine,NULL,NULL,FALSE, HIGH_PRIORTY_CLASS CREATE_NEW_CONSOLE, NULL, NULL,&startInfo, &processInfo) fprintf(stderr,”CreateProcess failed!”); ExitProcess(1);CloseHandle(&processInfo.hThread);进程管理进程管理进程管理进程管理进程管理进程管理v 进程同步举例:公共汽车中的司机和售票员进程同步举例:公共汽车中的司机和售票员v 司机司机 P1
14、 售票员售票员 P2v while (true) while (true) v 关门;关门;v 启动车辆;启动车辆; 正常运行;正常运行; 售票;售票; 到站停车;到站停车; v 开门;开门;v v 进程的同步是指系统中多个进程中发生的事件存在某种时序关进程的同步是指系统中多个进程中发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。具体说,一个进程运系,需要相互合作,共同完成一项任务。具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获得消息行到某一点时要求另一伙伴进程为它提供消息,在未获得消息之前,该进程处于等待状态,获得消息后被唤醒进入就绪态。之前,该进程处于等待状
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;cons
17、umer the item in nextc;until false;进程管理进程管理进程管理进程管理进程管理进程管理v一次至多允许一个进程进入临界区内v一个进程不能不限地停留在临界区内v一个进程不能无限地等待进入临界区v v 有空让进v 无空等待v 择一而入v 算法可行进程管理进程管理进程管理进程管理进程管理进程管理v 使用LOCK和UNLOCK原语v 系统为每一个临界资源设置一把锁,当一个进程欲进入临界区时,首先关锁,推出临界区时,把锁打开。v Lock原语:Lock(W)v beginv L:if W=1 then goto Lv else W:=1;v end;v UNLOCK原语:U
18、Nlock(W)v beginv W:=0;v end用变量W代表某种资源的形状,w称为锁,锁位值 为0;表示资源可用,而用1表示资源已被占用。进程管理进程管理 互斥的各个进程在各自单独执行时都可以得到正确的运行结果,但是当它们在临界区内交叉执行时就可能出现问题。而同步的各个进程,如果各自单独执行将不会完成作业的特定任务,只要当它们互相配合、共同协调推进时才能得到正确的运行结果。 互斥的进程只要求它们不能同时进入临界区,而至于哪个进程先进入则不会产生运行的错误。但同步的进程的协调关系是建立在它们之间执行时序的基础上,所以,各个进程必须按照严格的先后次序执行。 一般情况下,互斥的进程并不知道对方
19、的存在,而同步的进程不仅知道其它进程的存在,还要通过与其它进程的通信来达到相互的协调。进程管理进程管理 通过平等协商方式实现进程互斥的最初方法是软件方法 其基本思路是在进入区检查和设置一些标志,如果已有进程在临界区,则在进入区通过循环检查进行等待;在退出区修改标志 其中的主要问题是设置什么标志和如何检查标志 软件解法的缺点: .1 忙等待 .2 实现过于复杂 .3 需要高的编程技巧进程管理进程管理 “测试并设置指令“交换指令“开关中断指令进入临界区前执行: 执行“关中断指令离开临界区后执行: 执行“开中断指令能够实现进程互斥,但不能满足“让权等待”,造成处理机资源浪费进程管理进程管理进程管理进
20、程管理进程管理进程管理进程管理进程管理进程管理进程管理在信号量的实现中,S.value的初值表示系统某类资源的数目,因而又称为资源信号量,对它的每次wait操作,意味着进程请求一个单位的该类资源。当S.value0时,表示该类资源已分配完毕,因而进程调用block原语,进行自我阻塞,放弃处理机,并插入到信号量链表S.L中。此时,S.value的绝对值表示在该信号量链表中已阻塞进程的个数、亦即恰好等于对信号量S实施wait操作而被封锁起来并进入信号量S队列的进程数。对信号量的每次signal操作,表示执行进程释放一个单位资源。 进程管理进程管理进程管理进程管理v问题的引入问题的引入v 假定有两个
21、进程假定有两个进程A A和和B B,它们都要求访问共享数据,它们都要求访问共享数据D D和和E E。当然,共享数据都应作为临界资源。为此,可为这两。当然,共享数据都应作为临界资源。为此,可为这两个数据分别设置用于互斥的信号量个数据分别设置用于互斥的信号量DmutexDmutex和和EmutexEmutex,并令它,并令它们的初值都是们的初值都是1 1。相应地,在两个进程中都要包含两个对。相应地,在两个进程中都要包含两个对DmutexDmutex和和EmutexEmutex的操作,即的操作,即v process A: process B:process A: process B:v wait (
22、Dmutex); wait (Dmutex); wait(Emutex);wait(Emutex);v wait (Emutex); wait (Emutex); wait(Dmutex);wait(Dmutex);v 若进程若进程A A和和B B按下述次序交替执行按下述次序交替执行waitwait操作:操作:v process A: wait(Dmutex);process A: wait(Dmutex);于是于是Dmutex=0Dmutex=0v process B: wait(Emutex); process B: wait(Emutex);于是于是Emutex=0Emutex=0v p
23、rocess A: wait(Emutex); process A: wait(Emutex);于是于是Emutex=-1,AEmutex=-1,A阻塞阻塞v process B: wait(Dmutex);process B: wait(Dmutex);于是于是Dmutex=-1,BDmutex=-1,B阻塞阻塞进程管理进程管理v出现死锁的原因主要在于进程运行时需要多个资源,出现死锁的原因主要在于进程运行时需要多个资源,在为每个进程分配所需的全部资源时,不能保证原在为每个进程分配所需的全部资源时,不能保证原子操作,从而导致进程之间相互等待对方释放所占子操作,从而导致进程之间相互等待对方释放所
24、占资源的死锁状态。为了解决进程同时需要多种资源资源的死锁状态。为了解决进程同时需要多种资源且每种资源要占用一段时间的问题,人们提出了且每种资源要占用一段时间的问题,人们提出了ANDAND型信号量同步机制。型信号量同步机制。进程管理进程管理 将进程在整个运行过程中需要的所有资源,一将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起次性全部地分配给进程,待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其他释放。只要尚有一个资源未能分配给进程,其他所有可能为之分配的资源,也不分配给它。亦即,所有可能为之分配的资源,也不分配给它。亦即,对若干个临界资源的分配,
25、采取了原子操作方式:对若干个临界资源的分配,采取了原子操作方式:要么全部分配给进程,要么一个也不分配。要么全部分配给进程,要么一个也不分配。进程管理进程管理Swait(s1,s2,sn)if s11 and and sn 1 then for i:=1 to n do si:=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 oper
26、ationend 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 endfor进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理S1S2S3S4S5S6abcdegf进程管理进程管理进程管理进程管理进程管理进程管理问题描述问题描述 生产者生产者消费者问题可描述如下:消费者问题可描述如下:有有n n个生产者和个生产者和m m个消费者,连接在个消费者,连接在一个有一个有N
27、N个单位缓冲区的有界缓冲上。个单位缓冲区的有界缓冲上。其中,其中,pipi和和cjcj都是并发进程,只要都是并发进程,只要缓冲区未满,生产者缓冲区未满,生产者pipi生产的产品生产的产品就可投入缓冲区;只要缓冲区不空,就可投入缓冲区;只要缓冲区不空,消费者进程消费者进程cjcj就可从缓冲区取走并就可从缓冲区取走并消耗产品。如右图所示。消耗产品。如右图所示。 进程管理进程管理为了使这两类进程协调工作,防止盲目生产和消费,它们应满足如为了使这两类进程协调工作,防止盲目生产和消费,它们应满足如下的同步条件:下的同步条件:任何时刻所有生产者存放产品的数目不能超过缓冲区的总容量任何时刻所有生产者存放产品
28、的数目不能超过缓冲区的总容量N N); ;所有消费者取出的产品总量不能超过所有生产者当前生产的产品总所有消费者取出的产品总量不能超过所有生产者当前生产的产品总量。量。 设置三个信号量:设置三个信号量: fullfull:表示放有产品的缓冲区数,其初值为:表示放有产品的缓冲区数,其初值为0 0。emptyempty:表示可供使用的缓冲区数,其初值为:表示可供使用的缓冲区数,其初值为N N。mutexmutex:互斥信号量,初值为:互斥信号量,初值为1 1,表示各进程互斥进入临界区,保证,表示各进程互斥进入临界区,保证任何时候只有一个进程使用缓冲区。任何时候只有一个进程使用缓冲区。进程管理进程管理
29、producer: begin repeat Produce an item in nextp; 进程管理进程管理进程管理进程管理进程管理进程管理v 问题描述:问题描述:v 假设有五个哲学家,他们花费一生的时假设有五个哲学家,他们花费一生的时光思考和吃饭。这些哲学家公用一个圆桌,光思考和吃饭。这些哲学家公用一个圆桌,每个哲学家都有一把椅子。在桌中央有一每个哲学家都有一把椅子。在桌中央有一碗米饭。每个哲学家面前有一只空盘于,碗米饭。每个哲学家面前有一只空盘于,每两人之间放一根筷子如右图)。当一每两人之间放一根筷子如右图)。当一个哲学家思考时,他与其他同事不交互,个哲学家思考时,他与其他同事不交互
30、,时而,哲学家会感到饥饿,并试图拿起与时而,哲学家会感到饥饿,并试图拿起与他最近的两支筷子他与邻近左、右两人他最近的两支筷子他与邻近左、右两人之间的筷子)。一个哲学家一次只能拿起之间的筷子)。一个哲学家一次只能拿起一支筷子。显然,他不能从其他哲学家手一支筷子。显然,他不能从其他哲学家手里拿走筷子。当一个饥饿的哲学家同时有里拿走筷子。当一个饥饿的哲学家同时有两支筷子时,他就能不用释放他的筷子而两支筷子时,他就能不用释放他的筷子而自己吃了。当吃完后,他会放下两支筷子,自己吃了。当吃完后,他会放下两支筷子,并再次开始思考。并再次开始思考。进程管理进程管理进程管理进程管理v以上解法会出现死锁。为防止死
31、锁发生可采取的措施:以上解法会出现死锁。为防止死锁发生可采取的措施:v最多允许最多允许4 4个哲学家同时坐在桌子周围个哲学家同时坐在桌子周围v仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子()v给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之偶数号的哲学家则反之v为了避免死锁,把哲学家分为三种状态,思索,饥饿,进食,为了避免死锁,把哲学家分为三种状态,思索,饥饿,进食,并且一次拿到两只筷子,否则不拿。并且一次拿到两只筷子,否则不拿。进程管理进程管理进程管理进
32、程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理v问题描述:问题描述:v 理发店有一位收银员,理发店有一位收银员,k k位理发师、位理发师、k k张理发椅和张理发椅和n n把供等候理发的顾客坐的沙发。如果没有顾客,把供等候理发的顾客坐的沙发。如果没有顾客,理发师便在理发椅上睡觉。一个顾客到来时,他必理发师便在理发椅上睡觉。一个顾客到来时,他必须叫醒理发师。如果全部理发师正在理发时又有顾须叫醒理发师。如果全部理发师正在理发时又有顾客来到,则如果有空沙发可坐,就坐下来等待,如客来到,则如果有空沙发可坐,就坐下来等待,如果没有空沙发就离开这个理发
33、店。果没有空沙发就离开这个理发店。进程管理进程管理v 为了解决这个问题,可以定义三个信号量为了解决这个问题,可以定义三个信号量customercustomer、barbersbarbers和和mutexmutex以及一个计数变量以及一个计数变量waitingwaiting。v 信号量信号量customercustomer用来记录等待理发的顾客数不包括正在理用来记录等待理发的顾客数不包括正在理发的顾客),其初值化为发的顾客),其初值化为0 0。v 信号量信号量barbersbarbers用来记录正在等候顾客的理发师数,其值为用来记录正在等候顾客的理发师数,其值为k k。v Count:Count
34、:计数器,用于记录等候的顾客数;计数器,用于记录等候的顾客数;v 信号量信号量mutex mutex 用于实现计数器用于实现计数器countcount的互斥访问,其初值为的互斥访问,其初值为1 1。进程管理进程管理 semaphore customers = 0; /*等候理发的顾客数等候理发的顾客数*/semaphore barbers = k; /*等候顾客的理发师数等候顾客的理发师数*/semaphore mutex = 1;Int count=0;/*等候顾客数等候顾客数(还没有理发还没有理发的的)*/void barber( ) while(TRUE); /*理完一人理完一人,还有顾
35、客吗还有顾客吗?*/ wait(cutomers); /*若无顾客若无顾客,理发师睡眠理发师睡眠*/ wait(mutex); /*进程互斥进程互斥*/ waiting=waiting - 1; /等候顾客数少一个等候顾客数少一个 cut_hair( ); /理发师为一个顾客理发理发师为一个顾客理发 signal(mutex); /*开放临界区开放临界区*/ signal(barbers); /理发师为顾客理完发理发师为顾客理完发 进程管理进程管理void customer( ) wait(mutex); /*进程互斥进程互斥*/ if (countn) /*看看有没有空椅子看看有没有空椅子*
36、/ count= count+1; /* 等候顾客数加等候顾客数加1*/ signal(customers); /*必要的话唤醒理发师必要的话唤醒理发师*/ signal (mutex); /*开放临界区开放临界区*/ wait(barbers); /*无理发师无理发师, 顾客坐着养神顾客坐着养神*/ get-haircut( ); /*一个顾客坐下等理发一个顾客坐下等理发*/ else signal(mutex); /*人满了人满了,走吧走吧!*/ 进程管理进程管理va,b a,b 两点间是一段东西向的单行车道,现要设计一两点间是一段东西向的单行车道,现要设计一个自动管理系统,管理规则如下:
37、当个自动管理系统,管理规则如下:当abab间有车辆在间有车辆在行驶时同方向的车可以同时驶入行驶时同方向的车可以同时驶入abab段,但另一方向段,但另一方向的车必须在的车必须在abab段外等待;当段外等待;当abab之间无车时,到达之间无车时,到达a a或或b b的车辆可以进入的车辆可以进入abab段,但不能从段,但不能从a a,b b点同点同时驶入;当某方向在时驶入;当某方向在abab段行驶的车辆使出了段行驶的车辆使出了abab段且段且无车辆进入无车辆进入abab段时,应让另一方向等待的车辆进入段时,应让另一方向等待的车辆进入abab段行驶。请用段行驶。请用wait,signalwait,si
38、gnal工具对工具对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)countba=countba+1;If countba=1 then wait(s)signal(mutexba) enter;wait(mute
39、xba)countba-;if countba=0 then signal(s)signal(mutexba);进程管理进程管理进程管理进程管理局部数据过程1过程k出口初始化代码入口管程等待调用的进程队列进程管理进程管理v管程具有以下特点:v(1管程内的局部变量只能被局部于管程内的过程所访问;反之亦然,即局部于管程内的过程只能访问管程内的变量v(2任何进程只能通过调用管程提供的过程入口进入管程。v(3任何时刻最多只能有一个进程在管程中执行。进程管理进程管理 管程构造确保一次只能有一个进程在管程内活动,提供了一种实现互管程构造确保一次只能有一个进程在管程内活动,提供了一种实现互斥的简便途径,但这
40、还不够,还需要一种办法使得进程在无法继续运斥的简便途径,但这还不够,还需要一种办法使得进程在无法继续运行时被阻塞。例如,当一个进程进入管程后等待某个条件未满足时,行时被阻塞。例如,当一个进程进入管程后等待某个条件未满足时,这个进程必须挂起,释放管程,以便其他进程能够进入。以后,当所这个进程必须挂起,释放管程,以便其他进程能够进入。以后,当所需的条件满足了,且该管程处于可用的情况下,就要恢复该进程的执需的条件满足了,且该管程处于可用的情况下,就要恢复该进程的执行,且让它在先前的挂起点重新进入该管程。行,且让它在先前的挂起点重新进入该管程。 解决这个问题的方法是引入条件变量解决这个问题的方法是引入
41、条件变量condition variables)。条件变)。条件变量是当调用管程过程的进程无法运行时,用于阻塞进程的一种信号量,量是当调用管程过程的进程无法运行时,用于阻塞进程的一种信号量,它包含在管程内,且只能在管程内对它进行访问。对条件变量仅有的它包含在管程内,且只能在管程内对它进行访问。对条件变量仅有的操作是操作是wait和和signal。当一个管程过程发现无法继续时,它在某些条件。当一个管程过程发现无法继续时,它在某些条件变量变量condition上执行上执行wait,这个动作引起调用进程阻塞,并将另一个,这个动作引起调用进程阻塞,并将另一个先前被挡在管程之外的进程调入管程。先前被挡在
42、管程之外的进程调入管程。进程管理进程管理v 另一个进程可以通过对其伙伴在等待的同一个条件变量另一个进程可以通过对其伙伴在等待的同一个条件变量conditioncondition上上执行同步原语执行同步原语signalsignal操作来唤醒等待进程。操作来唤醒等待进程。v 使用使用signalsignal释放等待进程时,可能出现两个进程同时停留在管程内。释放等待进程时,可能出现两个进程同时停留在管程内。解决方法:解决方法:v 执行执行signalsignal的进程等待,直到被释放进程退出管程或等待另一个条的进程等待,直到被释放进程退出管程或等待另一个条件件v 被释放进程等待,直到执行被释放进程等
43、待,直到执行signalsignal的进程退出管程或等待另一个条的进程退出管程或等待另一个条件件进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理进程管理mqmutexsmsender:Asize:5text:Hellosend(B,a)sender :Asize :5text:hellonext:0发送区发送区Asender:Asize:5text:Hellorec
44、eive(b)接收区接收区Bab进程进程APCB(B)进程进程B进程管理进程管理v 试说明如果使用试说明如果使用send_mailboxsend_mailbox和和receive_mailbox receive_mailbox 原原语实现打印文件的系统。欲打印的进程将要打印的文语实现打印文件的系统。欲打印的进程将要打印的文件名发送到邮箱件名发送到邮箱printer,printer,打印机假脱机将打印邮箱中打印机假脱机将打印邮箱中出现名字的任何文件出现名字的任何文件/process wish to printCharfilename ;Status=send_mailbox(“printer”,
45、filename);If (status 0) /failure/print spoolerchar filename while (true) status=receive_mailbox(“printer”,filename);if(status 0)/failureprint(filename);进程管理进程管理问题:可能会有很多个客户访问服务器,问题:可能会有很多个客户访问服务器,WEB服务器如何处理这多个访问?服务器如何处理这多个访问?这台计算机上运行着这台计算机上运行着WEB服务器程序,管理着许多服务器程序,管理着许多网站网站这台计算机上运行着这台计算机上运行着IE浏浏览器程序览器程序HTTP协议协议恳恳求求应应对对进程管理进程管理vWEB服务器程序作为单个进程顺序处理:一次处理一个用户请求,处理完后再处理下一个请求v 用户等待的时间可能会很长v使用多个进程:有一个进程负责侦听,看是否有用户的请求到来。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年记者证考试采访技巧题库及答案
- 2025年数字绘图师招聘面试题库及参考答案
- 2025年悬疑分析师招聘面试参考题库及答案
- 德州医院笔试题库及答案
- 转工护士考试题库及答案
- 陕西会计初级题库及答案
- 2025年HR数据分析师招聘面试参考题库及答案
- 2025年车辆维修技师招聘面试参考题库及答案
- 外币业务会计题库及答案
- 2025年充电基础设施工程师招聘面试参考题库及答案
- 2025山东济南医学发展集团有限公司国有企业招聘22人笔试考试参考试题附答案解析
- 物业管理费用结构分析报告
- 2025天津港保税区安全生产技术专家招聘26人笔试考试参考题库附答案解析
- 2025卧室装修合同范本下载模板
- 旅馆从业人员在线考试及答案解析
- 高校思政说课课件
- 个人咨询服务合同个人咨询服务合同书
- 全国“创新杯”电类说课大赛课件一等奖作品组合逻辑电路设计 (说课)
- LY/T 2565-2015竹塑复合材料
- GB/T 9120-2010对焊环板式松套钢制管法兰
- GB/T 679-2002化学试剂乙醇(95%)
评论
0/150
提交评论