




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 进程管理进程管理 I1C1P1I2C2P2 进程管理进程管理 P1 P2 P3 P4 进程管理进程管理 I1I2I3I4 C1C2C3C4 P1P2P3P4 t 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 程序是静态的,进程是动态的; 进程更能真实地描述并发,而程序不能; 一个程序可对应多个进程; 进程有生命周期,有诞生有消亡,短暂的;而程 序是相对长久的;程序可作为软件资源长期保存, 进程只是一次执行过程,是暂时的; 进程是系统分配调度的独立单位,能与其他进程 并发执行; 进程具有创建其他进程的功能,而程序没有。 进程管理进程管理 就绪就绪 阻
2、塞阻塞执行执行 时间片完时间片完 进程调度进程调度 I/O请求请求 I/O完成完成 图图25 进程的三种基本状态及其转换进程的三种基本状态及其转换 进程管理进程管理 进程管理进程管理 执行执行 活动活动 就绪就绪 静止静止 就绪就绪 活动活动 阻塞阻塞 静止静止 阻塞阻塞 激活激活 挂起挂起 激活激活 挂起挂起 释放释放 释放释放 挂起挂起 请求请求I/O 进程管理进程管理 1 1如果系统中有如果系统中有N N个进程,运行的进程最多几个,最个进程,运行的进程最多几个,最 少几个;就绪进程最多几个最少几个;阻塞进程最少几个;就绪进程最多几个最少几个;阻塞进程最 多几个,最少几个?多几个,最少几个
3、? 2. 2. 有没有这样的状态转换,为什么?有没有这样的状态转换,为什么? (1 1) 阻塞阻塞运行;运行; (2 2) 就绪就绪阻塞阻塞 进程管理进程管理 进程管理进程管理 v写一个程序描述进程状态迁移过程。写一个程序描述进程状态迁移过程。 v要求:要求: 提供导致进程状态变化的调用接口,包括创建、提供导致进程状态变化的调用接口,包括创建、 删除、调度、阻塞、时间到、挂起、激活等。删除、调度、阻塞、时间到、挂起、激活等。 实现进程列表显示的接口。实现进程列表显示的接口。 注:这里设计的进程是一个假设的对象实体,是注:这里设计的进程是一个假设的对象实体,是 由程序自己创建和删除,不是系统维护
4、的进程。由程序自己创建和删除,不是系统维护的进程。 进程管理进程管理 pid 进程状态进程状态 现场现场 优先级优先级 阻塞原因阻塞原因 程序地址程序地址 同步机制同步机制 资源清单资源清单 链接指针链接指针 进程管理进程管理 执行指针执行指针 就绪队列指针就绪队列指针 阻塞队列指针阻塞队列指针 空闲队列指针空闲队列指针 PCB14 PCB23 PCB30 PCB48 PCB5 PCB67 PCB79 PCB80 PCB91 进程管理进程管理 struct wait_queue struct wait_queue struct task_struct struct task_struct *
5、* task; task; struct wait_queue struct wait_queue * * next; next; ; PCBPCB PCB 进程管理进程管理 PCB1 PCB2 PCB3 PCB4 PCB5 PCB6 PCB7 执行指针执行指针 就绪表指针就绪表指针 阻塞表指针阻塞表指针 进程管理进程管理 进程管理进程管理 v处理机执行状态 系统态 用户态 v进程控制机构 内核:中断处理,时钟管理,进程管理,存储器 管理,设备管理等。 原语(primitive) 由若干条指令构成的“原子操作(atomic operation)” 过程,作为一个整体而不可分割要么全都完成, 要
6、么全都不做。 许多系统调用就是原语。 进程管理进程管理 根 A BC GF E D 祖先 进程管理进程管理 进程管理进程管理 进程管理进程管理 Create (s0,m0,pi) p=Get_New_PCB(); /分配新的分配新的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;
7、/进程队列进程队列 Insert(RL,p); /将进程将进程p插入就绪队列插入就绪队列 Scheduler(); /调度程序调度程序 进程管理进程管理 进程管理进程管理 进程管理进程管理 一个典型进程终止原语如下: Destroy ( pid ) p=Get_PCB(pid); /获取进程控制块 Kill_Tree(p); /删除整个进程树 Scheduler(); /调度器 进程管理进程管理 进程管理进程管理 进程管理进程管理 Block( ) /获取当前进程的进程控制块 p=Get_PCB(); /保存当前进程的状态 s=p-Status.Type; cpu=p-Processor_ID
8、; /处理机状态 /保存处理机现场 p-CPU_State=Interrupt(cpu); /将进程的状态改为阻塞 p-Status.Type=Blocked; Insert(BL,p); /将进程插入等待队列 Scheduler(); 阻塞原语的实现过程阻塞原语的实现过程 进程管理进程管理 Wakeup( pid ) /获取进程控制 P=Get_PCB(pid); /从阻塞队列中移出进程p Remove(p-Status.List,p); /进程的状态改为就 p-Status.Type=Ready; /将进程插入到就绪队列 Insert (RL,p); /调度程序 Scheduler ();
9、 v唤醒原语的执行过程如下:唤醒原语的执行过程如下: 进程管理进程管理 进程管理进程管理 v实例研究:Linux和Windows系统创建进程 LinuxLinux系统中进程创建系统中进程创建fork fork 在在LinuxLinux系统中,用户或系统可以使用系统调用系统中,用户或系统可以使用系统调用forkfork来创建一个来创建一个 新的进程。新的进程。forkfork的函数原形为:的函数原形为: pid_t fork()pid_t fork() 当一个进程调用当一个进程调用forkfork创建一个子进程后,父进程和子进程都在自创建一个子进程后,父进程和子进程都在自 己独立的地址空间内执行
10、。它们之间不共享任何地址空间,但是己独立的地址空间内执行。它们之间不共享任何地址空间,但是 父子进程具有相同的程序代码、数据和堆栈段,父子进程具有相同的程序代码、数据和堆栈段, 因此,为了区因此,为了区 别运行中的父子进程,别运行中的父子进程,forkfork系统调用向父子进程返回不同的值。系统调用向父子进程返回不同的值。 它向子进程返回它向子进程返回0 0,而向父进程返回子进程的,而向父进程返回子进程的PIDPID。 进程管理进程管理 . Before fork() After . fork fork执行前执行前 一个控制流进入内核一个控制流进入内核forkfork模块模块 。 Before
11、 fork() After 。 Before fork() After fork forkfork执行后执行后 调用后,从调用后,从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(“Ca
12、n 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函数来创建一个新的进程及其主线程,以 执行指定的任务。在利用CreateProc
13、ess建立进程时,操 作系统要为新进程分配新的地址空间和资源,建立新的 主线程。一旦新进程建立,父进程仍然使用原来的地址 空间继续执行,而新进程则在新的地址空间执行一个新 的程序。 CreateProcess含有10个参数来指定建立进程的方式,具 体参数的含义可参考相关的Win32 API手册。 进程管理进程管理 #include #include #include STARTUPINFO startInfo; PROCESS_INFORMATION processInfo; strcpy(lpCommandLine, “c:WINNTSYSTEM32NOTEPAD.EXE temp.txt”
14、); ZeroMemory( startInfo.cb=sizeof(startInfo); if (! CreateProcess(NULL,lpCommandLine,NULL,NULL,FALSE, HIGH_PRIORTY_CLASS CREATE_NEW_CONSOLE, NULL, NULL, ExitProcess(1); CloseHandle( 进程管理进程管理 进程管理进程管理 进程管理进程管理 v 进程同步举例:公共汽车中的司机和售票员进程同步举例:公共汽车中的司机和售票员 司机司机 P1 售票员售票员 P2 while (true) while (true) 关门;关门
15、; 启动车辆;启动车辆; 正常运行;正常运行; 售票;售票; 到站停车;到站停车; 开门;开门; 进程的同步是指系统中多个进程中发生的事件存在某种时序进程的同步是指系统中多个进程中发生的事件存在某种时序 关系,需要相互合作,共同完成一项任务。具体说,一个进关系,需要相互合作,共同完成一项任务。具体说,一个进 程运行到某一点时要求另一伙伴进程为它提供消息,在未获程运行到某一点时要求另一伙伴进程为它提供消息,在未获 得消息之前,该进程处于等待状态,获得消息后被唤醒进入得消息之前,该进程处于等待状态,获得消息后被唤醒进入 就绪态。就绪态。 进程管理进程管理 例如:例如:系统中只有一台打印机,进程系统
16、中只有一台打印机,进程p1p1,p2p2都需要都需要 使用打印机。使用打印机。 临界资源(临界资源(Critical ResourceCritical Resource) 一次只能被一个进程使用一次只能被一个进程使用 形式:硬件,软件:变量、数据、队列等形式:硬件,软件:变量、数据、队列等 当临界资源由一个进程占用后,其它进程如果要使 用它,必须等待占用进程使用完毕并把它释放后, 才能由另一个进程使用。多个进程在共享临界资源 时的这种制约关系称为进程的互斥。 进程管理进程管理 进程管理进程管理 producer: repeat produce an item in nextp; while c
17、ounter=n do no-op; bufferin:=nextp; in:=(in+1)mod n; counter:=counter+1; until false; consumer: repeat while counter=0 do no-op; nextc:=bufferout; out:=(out+1) mod n; counter:=counter-1; consumer the item in nextc; until false; 进程管理进程管理 进程管理进程管理 进程管理进程管理 v一次至多允许一个进程进入临界区内 v一个进程不能不限地停留在临界区内 v一个进程不能无限
18、地等待进入临界区 有空让进 无空等待 择一而入 算法可行 进程管理进程管理 进程管理进程管理 进程管理进程管理 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称为锁,锁位值 为0;表示资源可用,而 用1表示资源已被占用。 进程管理进程管理 互斥的各个进程在各自单独执行时都可以得到正确的运
19、 行结果,但是当它们在临界区内交叉执行时就可能出现 问题。而同步的各个进程,如果各自单独执行将不会完 成作业的特定任务,只要当它们互相配合、共同协调推 进时才能得到正确的运行结果。 互斥的进程只要求它们不能同时进入临界区,而至于哪 个进程先进入则不会产生运行的错误。但同步的进程的 协调关系是建立在它们之间执行时序的基础上,所以, 各个进程必须按照严格的先后次序执行。 一般情况下,互斥的进程并不知道对方的存在,而同步 的进程不仅知道其它进程的存在,还要通过与其它进程 的通信来达到相互的协调。 进程管理进程管理 通过平等协商方式实现进程互斥的最初方法是软 件方法 其基本思路是在进入区检查和设置一些
20、标志,如 果已有进程在临界区,则在进入区通过循环检查 进行等待;在退出区修改标志 其中的主要问题是设置什么标志和如何检查标志 软件解法的缺点: 1. 忙等待 2. 实现过于复杂 3. 需要高的编程技巧 进程管理进程管理 “测试并设置”指令 “ 交换”指令 “ 开关中断”指令 进入临界区前执行:进入临界区前执行: 执行执行“关中断关中断”指令指令 离开临界区后执行:离开临界区后执行: 执行执行“开中断开中断”指令指令 能够实现进程互斥,但不能满足“让权等待”, 造成处理机资源浪费 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 n在信号量的实现中,在信号
21、量的实现中,S.value的初值表示系统某类资源的数的初值表示系统某类资源的数 目,因而又称为资源信号量,对它的每次目,因而又称为资源信号量,对它的每次wait操作,意味着操作,意味着 进程请求一个单位的该类资源。进程请求一个单位的该类资源。 n当当S.value0时,表示该类资源已分配完毕,因而进程调用时,表示该类资源已分配完毕,因而进程调用 block原语,进行自我阻塞,放弃处理机,并插入到信号量原语,进行自我阻塞,放弃处理机,并插入到信号量 链表链表S.L中。此时,中。此时,S.value的绝对值表示在该信号量链表中的绝对值表示在该信号量链表中 已阻塞进程的个数、亦即恰好等于对信号量已阻
22、塞进程的个数、亦即恰好等于对信号量S实施实施wait操作操作 而被封锁起来并进入信号量而被封锁起来并进入信号量S队列的进程数。队列的进程数。 n对信号量的每次对信号量的每次signal操作,表示执行进程释放一个单位资操作,表示执行进程释放一个单位资 源。源。 进程管理进程管理 进程管理进程管理 v问题的引入问题的引入 假定有两个进程假定有两个进程A A和和B B,它们都要求访问共享数据,它们都要求访问共享数据D D和和E E。当然,共。当然,共 享数据都应作为临界资源。为此,可为这两个数据分别设置用于互斥的享数据都应作为临界资源。为此,可为这两个数据分别设置用于互斥的 信号量信号量Dmutex
23、Dmutex和和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按下述次序交替执行按
24、下述次序交替执行waitwait操作:操作: process A: wait(Dmutex);process A: wait(Dmutex);于是于是Dmutex=0Dmutex=0 process B: wait(Emutex); process B: wait(Emutex);于是于是Emutex=0Emutex=0 process A: wait(Emutex); process A: wait(Emutex);于是于是Emutex=-1,AEmutex=-1,A阻塞阻塞 process B: wait(Dmutex);process B: wait(Dmutex);于是于是Dmutex
25、=-1,BDmutex=-1,B阻塞阻塞 进程管理进程管理 v出现死锁的原因主要在于进程运行时需要多个资源,出现死锁的原因主要在于进程运行时需要多个资源, 在为每个进程分配所需的全部资源时,不能保证原在为每个进程分配所需的全部资源时,不能保证原 子操作,从而导致进程之间相互等待对方释放所占子操作,从而导致进程之间相互等待对方释放所占 资源的死锁状态。为了解决进程同时需要多种资源资源的死锁状态。为了解决进程同时需要多种资源 且每种资源要占用一段时间的问题,人们提出了且每种资源要占用一段时间的问题,人们提出了 ANDAND型信号量同步机制。型信号量同步机制。 进程管理进程管理 将进程在整个运行过程
26、中需要的所有资源,一次性全将进程在整个运行过程中需要的所有资源,一次性全 部地分配给进程,待进程使用完后再一起释放。只要部地分配给进程,待进程使用完后再一起释放。只要 尚有一个资源未能分配给进程,其他所有可能为之分尚有一个资源未能分配给进程,其他所有可能为之分 配的资源,也不分配给它。亦即,对若干个临界资源配的资源,也不分配给它。亦即,对若干个临界资源 的分配,采取了原子操作方式:要么全部分配给进程,的分配,采取了原子操作方式:要么全部分配给进程, 要么一个也不分配。要么一个也不分配。 进程管理进程管理 Swait(s1,s2,sn) if s11 and and sn 1 then for
27、i:=1 to n do si:=si-1; endfor else place 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 operation end 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
28、 into the ready queue endfor 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 S1 S2 S3 S4 S5 S6 a b c d e g f 进程管理进程管理 进程管理进程管理 进程管理进程管理 问题描述问题描述 生产者生产者消费者问题可描述如下:消费者问题可描述如下: 有有n n个生产者和个生产者和m m个消费者,连接在个消费者,连接在 一个有一个有N N个单位缓冲区的有界缓冲上。个单位缓冲区的有界缓冲上。 其中,其中,pipi和和cjcj都是并发进程,只要都是并发进程,只要 缓冲区未满,生产者缓冲区未满,生产者pipi生产的产品生产的产品
29、 就可投入缓冲区;只要缓冲区不空,就可投入缓冲区;只要缓冲区不空, 消费者进程消费者进程cjcj就可从缓冲区取走并就可从缓冲区取走并 消耗产品。如右图所示。消耗产品。如右图所示。 进程管理进程管理 为了使这两类进程协调工作,防止盲目生产和消费,它们应满足如为了使这两类进程协调工作,防止盲目生产和消费,它们应满足如 下的同步条件:下的同步条件: 任何时刻所有生产者存放产品的数目不能超过缓冲区的总容量任何时刻所有生产者存放产品的数目不能超过缓冲区的总容量 (N N); ; 所有消费者取出的产品总量不能超过所有生产者当前生产的产品所有消费者取出的产品总量不能超过所有生产者当前生产的产品 总量。总量。
30、 设置三个信号量:设置三个信号量: full:表示放有产品的缓冲区数,其初值为:表示放有产品的缓冲区数,其初值为0。 empty:表示可供使用的缓冲区数,其初值为:表示可供使用的缓冲区数,其初值为N。 mutex:互斥信号量,初值为:互斥信号量,初值为1,表示各进程互斥进入临界区,表示各进程互斥进入临界区, 保证任何时候只有一个进程使用缓冲区。保证任何时候只有一个进程使用缓冲区。 进程管理进程管理 producer: begin repeat Produce an item in nextp; 进程管理进程管理 进程管理进程管理 进程管理进程管理 v 问题描述:问题描述: 假设有五个哲学家,他
31、们花费一生的时光思考和吃假设有五个哲学家,他们花费一生的时光思考和吃 饭。这些哲学家公用一个圆桌,每个哲学家都有饭。这些哲学家公用一个圆桌,每个哲学家都有 一把椅子。在桌中央有一碗米饭。每个哲学家面一把椅子。在桌中央有一碗米饭。每个哲学家面 前有一只空盘于,每两人之间放一根筷子(如右前有一只空盘于,每两人之间放一根筷子(如右 图)。当一个哲学家思考时,他与其他同事不交图)。当一个哲学家思考时,他与其他同事不交 互,时而,哲学家会感到饥饿,并试图拿起与他互,时而,哲学家会感到饥饿,并试图拿起与他 最近的两支筷子(他与邻近左、右两人之间的筷最近的两支筷子(他与邻近左、右两人之间的筷 子)。一个哲学
32、家一次只能拿起一支筷子。显然,子)。一个哲学家一次只能拿起一支筷子。显然, 他不能从其他哲学家手里拿走筷子。当一个饥饿他不能从其他哲学家手里拿走筷子。当一个饥饿 的哲学家同时有两支筷子时,他就能不用释放他的哲学家同时有两支筷子时,他就能不用释放他 的筷子而自己吃了。当吃完后,他会放下两支筷的筷子而自己吃了。当吃完后,他会放下两支筷 子,并再次开始思考。子,并再次开始思考。 进程管理进程管理 进程管理进程管理 v以上解法会出现死锁。为防止死锁发生可采取的措施:以上解法会出现死锁。为防止死锁发生可采取的措施: 最多允许最多允许4 4个哲学家同时坐在桌子周围个哲学家同时坐在桌子周围 仅当一个哲学家左
33、右两边的筷子都可用时,才允许他拿筷仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷 子(子( ) 给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷 子,偶数号的哲学家则反之子,偶数号的哲学家则反之 v为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食, 并且一次拿到两只筷子,否则不拿。并且一次拿到两只筷子,否则不拿。 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 v问题描述:问题描述: 理
34、发店有一位收银员,理发店有一位收银员,k k位理发师、位理发师、k k张理发椅和张理发椅和n n把供等候把供等候 理发的顾客坐的沙发。如果没有顾客,理发师便在理发椅上理发的顾客坐的沙发。如果没有顾客,理发师便在理发椅上 睡觉。一个顾客到来时,他必须叫醒理发师。如果全部理发睡觉。一个顾客到来时,他必须叫醒理发师。如果全部理发 师正在理发时又有顾客来到,则如果有空沙发可坐,就坐下师正在理发时又有顾客来到,则如果有空沙发可坐,就坐下 来等待,如果没有空沙发就离开这个理发店。来等待,如果没有空沙发就离开这个理发店。 进程管理进程管理 v 为了解决这个问题,可以定义三个信号量为了解决这个问题,可以定义三
35、个信号量customercustomer、 barbersbarbers和和mutexmutex以及一个计数变量以及一个计数变量waitingwaiting。 信号量信号量customercustomer用来记录等待理发的顾客数(不包括正用来记录等待理发的顾客数(不包括正 在理发的顾客),其初值化为在理发的顾客),其初值化为0 0。 信号量信号量barbersbarbers用来记录正在等候顾客的理发师数,其值用来记录正在等候顾客的理发师数,其值 为为k k。 Count:Count:计数器,用于记录等候的顾客数;计数器,用于记录等候的顾客数; 信号量信号量mutex mutex 用于实现计数器
36、用于实现计数器countcount的互斥访问,其初值的互斥访问,其初值 为为1 1。 进程管理进程管理 semaphore customers = 0; /*等候理发的顾客数等候理发的顾客数 */ semaphore barbers = k; /*等候顾客的理发师数等候顾客的理发师数 */ semaphore mutex = 1; Int count=0; /*等候顾客数等候顾客数(还没有还没有 理发的理发的)*/ void barber( ) while(TRUE); /*理完一人理完一人,还有顾客吗还有顾客吗?*/ wait(cutomers); /*若无顾客若无顾客,理发师睡眠理发师睡眠
37、*/ wait(mutex); /*进程互斥进程互斥*/ waiting=waiting - 1; /等候顾客数少一个等候顾客数少一个 cut_hair( ); /理发师为一个顾客理发理发师为一个顾客理发 signal(mutex); /*开放临界区开放临界区*/ signal(barbers); /理发师为顾客理完发理发师为顾客理完发 进程管理进程管理 void customer( ) wait(mutex); /*进程互斥进程互斥*/ if (countn) /*看看有没有空椅子看看有没有空椅子*/ count= count+1; /* 等候顾客数加等候顾客数加1*/ signal(cus
38、tomers); /*必要的话唤醒理发师必要的话唤醒理发师*/ signal (mutex); /*开放临界区开放临界区*/ wait(barbers); /*无理发师无理发师, 顾客坐着养神顾客坐着养神*/ get-haircut( ); /*一个顾客坐下等理发一个顾客坐下等理发*/ else signal(mutex); /*人满了人满了,走吧走吧!*/ 进程管理进程管理 va,b a,b 两点间是一段东西向的单行车道,现要设计一两点间是一段东西向的单行车道,现要设计一 个自动管理系统,管理规则如下:当个自动管理系统,管理规则如下:当abab间有车辆在间有车辆在 行驶时同方向的车可以同时驶
39、入行驶时同方向的车可以同时驶入abab段,但另一方向段,但另一方向 的车必须在的车必须在abab段外等待;当段外等待;当abab之间无车时,到达之间无车时,到达a a (或(或b b)的车辆可以进入)的车辆可以进入abab段,但不能从段,但不能从a a,b b点同点同 时驶入;当某方向在时驶入;当某方向在abab段行驶的车辆使出了段行驶的车辆使出了abab段且段且 无车辆进入无车辆进入abab段时,应让另一方向等待的车辆进入段时,应让另一方向等待的车辆进入 abab段行驶。请用段行驶。请用wait,signalwait,signal工具对工具对abab段实现正确段实现正确 管理。管理。 进程管
40、理进程管理 Semaphore s, mutexab,mutexba Pab: 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(mutexba) countba-; i
41、f countba=0 then signal(s) signal(mutexba); 进程管理进程管理 进程管理进程管理 局部数据 过程1 过程k 出口 初始化代码 入口 管程 等待调用的进程队列 进程管理进程管理 v管程具有以下特点: v(1)管程内的局部变量只能被局部于管程内的过 程所访问;反之亦然,即局部于管程内的过程只能 访问管程内的变量 v(2)任何进程只能通过调用管程提供的过程入口 进入管程。 v(3)任何时刻最多只能有一个进程在管程中执行。 进程管理进程管理 管程构造确保一次只能有一个进程在管程内活动,提供了一种实现互管程构造确保一次只能有一个进程在管程内活动,提供了一种实现互
42、 斥的简便途径,但这还不够,还需要一种办法使得进程在无法继续运斥的简便途径,但这还不够,还需要一种办法使得进程在无法继续运 行时被阻塞。例如,当一个进程进入管程后等待某个条件未满足时,行时被阻塞。例如,当一个进程进入管程后等待某个条件未满足时, 这个进程必须挂起,释放管程,以便其他进程能够进入。以后,当所这个进程必须挂起,释放管程,以便其他进程能够进入。以后,当所 需的条件满足了,且该管程处于可用的情况下,就要恢复该进程的执需的条件满足了,且该管程处于可用的情况下,就要恢复该进程的执 行,且让它在先前的挂起点重新进入该管程。行,且让它在先前的挂起点重新进入该管程。 解决这个问题的方法是引入解决
43、这个问题的方法是引入条件变量条件变量(condition variables)。条件变)。条件变 量是当调用管程过程的进程无法运行时,用于阻塞进程的一种信号量,量是当调用管程过程的进程无法运行时,用于阻塞进程的一种信号量, 它包含在管程内,且只能在管程内对它进行访问。对条件变量仅有的它包含在管程内,且只能在管程内对它进行访问。对条件变量仅有的 操作是操作是wait和和signal。当一个管程过程发现无法继续时,它在某些条件。当一个管程过程发现无法继续时,它在某些条件 变量变量condition上执行上执行wait,这个动作引起调用进程阻塞,并将另一个,这个动作引起调用进程阻塞,并将另一个 先前
44、被挡在管程之外的进程调入管程。先前被挡在管程之外的进程调入管程。 进程管理进程管理 v 另一个进程可以通过对其伙伴在等待的同一个条件变量另一个进程可以通过对其伙伴在等待的同一个条件变量conditioncondition上上 执行同步原语执行同步原语signalsignal操作来唤醒等待进程。操作来唤醒等待进程。 v 使用使用signalsignal释放等待进程时,可能出现两个进程同时停留在管程内。释放等待进程时,可能出现两个进程同时停留在管程内。 解决方法:解决方法: 执行执行signalsignal的进程等待,直到被释放进程退出管程或的进程等待,直到被释放进程退出管程或 等待另一个条件等待
45、另一个条件 被释放进程等待,直到执行被释放进程等待,直到执行signalsignal的进程退出管程或的进程退出管程或 等待另一个条件等待另一个条件 进程管理进程管理 。 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 进程管理进程管理 mq mutex sm sender:A size:5 text:Hello send(B,a) sender :A siz
46、e :5 text:hello next:0 发送区发送区Asender:A size:5 text:Hello receive(b) 接收区接收区B a b 进程进程A PCB(B) 进程进程B 进程管理进程管理 v 试说明如果使用试说明如果使用send_mailboxsend_mailbox和和receive_mailbox receive_mailbox 原原 语实现打印文件的系统。欲打印的进程将要打印的文语实现打印文件的系统。欲打印的进程将要打印的文 件名发送到邮箱件名发送到邮箱printer,printer,打印机假脱机将打印邮箱中打印机假脱机将打印邮箱中 出现名字的任何文件出现名字
47、的任何文件 /process wish to print Char ; Status=send_mailbox(“printer”,); If (status 0) /failure /print spooler char while (true) status=receive_mailbox(“printer”,); if(status 0) /failure print(); 进程管理进程管理 问题:可能会有很多个客户访问服务器,问题:可能会有很多个客户访问服务器, WEB服务器如何处理这多个访问?服务器如何处理这多个访问? 这台计算机上运行着这台计算机上运行着WEB 服务器程序,管理着许多服务器程序,管理着许多 网站网站 这台计算机上运行着这台计算机上运行着IE浏浏 览器程序览器程序 HTTP协议协议 请请 求求 应应 答答 进程管理进程管理 vWEB服务器程序作为单个进程顺序处理:一次处理 一个用户请求,处理完后再处理下一个请求 用户等待的时间可能会很长 v使用多个进程:有一个进程负责侦听,看是否有用 户的请求到来。如果有,则创建另一个进程处理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论