操作系统2011作业&ccedi

操作系统2011作业&ccedi

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: 操作系统第四章作业 1. 什么是进程?进程与程序有什么区别? 答:进程是指可并发执行的程序,在一个数据集合上的一次运行过程。 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动, 是操作系统进 行调度和资源分配的基本单位。 进程描述了程序动态执行的过程, 当程序投入运行时创建进 程,当程序终止时进程消亡,因而进程具有生命周期。 进程与程序的联系在于进程中包含了需要执行的程序, 程序是进程的一个组成部分。 进 程与程序的区别主要体现在以下几点: (1) 动态性和静态性。进程是动态的,程序是静态的。 (2) 临时性和永久性。进程是临时的,程序是永久的;进程是一个状态变化的过程,而程序 可长久保存。 (3) 组成上的不同。进程的组成包括程序、数据和进程控制块(PCB)。 (4) 多对一或者一对多的关系。通过多次执行,一个程序可对应多个进程;一个进程也可能 由多个程序构成。 2. 说明进程的结构、特征和基本状态。 答:进程的结构:PCB、程序、数据集合; 进程的特征:动态性、并发性、制约性、独立性、结构性、异步性; 进程的基本状态: 1)运行态(Running) :进程正在占用 CPU; 2)就绪态(Ready) :进程具备运行条件,但尚未占用 CPU; 3)阻塞态(Blocked) :进程由于等待某一事件不能享用 CPU。 3. 试说明进程在三个基本状态之间转换的典型原因? 答:处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态变为 运行状态; 当前运行状态进程因时间片用完而被暂停执行,该进程便由执行状态转变为就绪状态; 当前运行状态进程因等待某事件的发生而无法执行,如需要访问已被占用的临界资源, 就会使进程由运行状态提前转变为阻塞状态; 当前阻塞状态进程因等待的事件实际发生而被唤醒, 如需要访问的临界资源已被其它进 程释放,就会使进程由阻塞状态提前为就绪状态。 操作系统(D 类)第四章作业解答 2011 第 1 页 4. 什么是进程控制块?它有什么作用? 答: 为了对进程在执行过程中的动态信息进行控制和管理, 操作系统为每个进程建立一个数 据结构——进程控制块,简称 PCB(Process control Block) 。 进程控制块是进程的动态部分,对程序员来说透明、不可见,由操作系统建立和管理。 它包含了进程的描述信息、控制信息和资源信息,是进程动态特性的集中反映。 PCB 是进程存在的唯一标志,有生命周期,在创建进程时产生,撤销进程时消亡。 PCB 主要包括如下信息:进程描述信息、进程控制信息、资源管理信息、处理机现场 保护信息。 5. Unix进程映像由哪几部分组成?其PCB又由哪几部分组成? 答:在 Unix 中,进程映像由 3 个部分组成:proc 结构、正文段和数据段。 Unix 将 PCB 分为 2 个部分:proc 结构和 user 结构。 proc 结构是进程控制块中常驻内存部分, 存放进程最基本的信息, 也是进程的唯一标识; user 结构中主要包含那些只有进程执行时才会被使用的信息,因此作为非常驻内存部 分,存放在该进程的数据段中。 6. 下列进程状态的变迁哪些是可能的,哪些是不可能的? A. 等待态→运行态 B. 运行态→等待态 C. 等待态→就绪态 D. 就绪态→等待态 答:B、C 是可能的,A、D 是不可能的。 7. Unix中进程状态有哪些?处于僵死状态的进程其状态还会发生改变吗? 答:主要分为以下 5 种:运行态、就绪态、创建态、睡眠态、僵死态。 处于僵死状态的进程其状态不会发生改变,直至消亡。 8. “若无进程处于运行状态,则就绪队列和等待队列均为空。 ”这句话对吗? 答:若无进程处于运行状态,则就绪队列一定为空,而与等待队列是否为空无关。因为只有 就绪态的进程才能获得分配和占有 CPU 的权利。 操作系统(D 类)第四章作业解答 2011 第 2 页 9. 当进程状态发生变迁时,在哪些情况下,进程状态的变化会引起操作系统进 程调度程序的执行? 答:进程调度的职能是负责对 CPU 的分配,因此,当且仅当 CPU 需要重新分配时才会引起 操作系统调度程序的执行。它包括以下时机: ⑴.因时间片到或者有高优先级进程抢占使得处于运行态的进程由运行态转换为就绪 态; ⑵.处于运行态的进程请求系统服务主动放弃 CPU 由运行态转换为睡眠态。 10. 在使用fork()创建一个子进程后,该系统调用的返回值是什么?其含义是什 么? 答:返回值: 0 表示创建成功,从子进程返回;>0 表示创建成功,从父进程返回,其值为 子进程的 PID 号;-1 表示创建失败。 11. 当系统调用exit()被执行后,如果在该语句后面还有其它语句,那么它们还会 执行吗?为什么? 答:不会。因为进程一旦撤销就不可能再转换为其它任何进程状态了,该进程的生命周期就 此消亡。所以,exit()系统调用是不返回函数,因而其后的其它语句不会有机会执行。 12. 给出下列程序执行后几种常见的输出结果。 main() { int p; int x=1; while (-1 == (p=fork())); if (p==0) { x=0; printf(“X%d”,x); } else printf(“Y%d”,x); } 答:x0y1 或者 y1x0。 13. 为什么需要对创建的子进程加载属于它自己的可执行程序? 答: 因为子进程的程序是在进程创建时所复制的父进程的程序, 因此子进程自己的程序必须 操作系统(D 类)第四章作业解答 2011 第 3 页 在稍后重新加载。 14. 如果使用 4 个fork()创建子进程,其间不用条件分支将父子进程的程序空间 隔开,那么,该程序运行后,系统将会为它创建多少个进程?画出其进程家 族树。 答:16 个。家族树为: 父 P1 P2 P4 P8 P3 P5 P9 P6 P10 P11 P7 P12 P13 P14 P15 15. 如果父进程创建 3 个子进程,其父子关系如下左图,其程序结构如何?如果 父进程创建 2 个子进程,其中子进程P2 又创建孙子进程P3,如下右图,其程 序又如何?给出描述这两种情况的程序。 父 父 P1 P2 P3 P1 P2 P3 操作系统(D 类)第四章作业解答 2011 第 4 页 答: main() { int p1,p2,p3; p1=fork(); //创建 p1 if (p1>0) { //父进程返回 p2=fork(); //创建 p2 if (p2>0) //父进程返回 p3=fork(); //创建 p3 } } main() { int p1,p2,p3; p1=fork(); //创建 p1 if (p1>0) { //父进程返回 p2=fork(); //创建 p2 if (p2==0) //p2 返回 p3=fork(); //创建 p3 } } main() { int p1,p21,p22,p31,p32,p33,p34; p1 = fork(); //创建 p1 if (p1 > 0) { //父进程返回 p21 = fork(); //创建 p21 if (p21 > 0) { //父进程返回 p31 = fork(); //创建 p31 } else { /* *** */ } } else { /* p22 = fork(); //创建 p22 if (p22 > 0) { //父进程返回 p33 = fork(); //创建 p33 } else { //* *** */ } */ } } 16. 什么是临界区和临界资源?临界区应遵循的准则是什么? 答:临界资源:一次仅允许一个进程使用的资源。 临界区:在每个进程中访问临界资源的那段程序。 临界区应该遵循的准则是: 操作系统(D 类)第四章作业解答 2011 第 5 页 (1)空闲则入。当没有进程在临界区时,允许一个进程立即进入临界区。 (2)忙则等待。若已经有进程处于临界区,则其余要求进入临界区的进程必须等待。 (3)有限等待。进程在临界区中的时间必须是有限的。若有多个等待进程,则应能够在有 限的时间内让其中一个进入临界区,而不能让所有的进程”死等”。 (4)让权等待。不能进入临界区的进程,应主动释放 CPU 资源,如转换到阻塞状态。 17. 同步问题与互斥问题的主要区别是什么? 答: 同步问题与互斥问题的主要区别是多进程执行时间上的约束不同: 互斥进程在执行上是 先来者先进入临界区;同步进程在执行上有先后次序,先来者不一定能够先执行。 互斥问题 共享临界资源且先来者先进入。 同步问题 多进程在执行时间上有先后次序, 共享临界资源时先来者不能 先进入。 同步互斥混合问题 多进程在执行时间上有先后次序, 又共享临界资源且共享方式 为先来者先进入。 18. 已经有PV操作可用做同步工具,为什么还要有消息传递机制? 答:PV 操作属低级通信,传送信息量小,效率低,交换信息量小,传递较多信息则要进行 多次通信和编程复杂,且用户直接实现通信的细节容易出错。消息传递机制属于高级通信, 可以高效地传送大批量的数据。 19. 管道通信的使用条件是什么? 答:共享管道的进程必须是同一家族的进程,并由其祖先创建。一般在父子进程之间进行管 道通信。 20. 消息缓冲通信中发送进程与接收进程之间的同步由谁实现?共享内存通信 中又由谁实现? 答: 消息缓冲通信中发送进程与接收进程之间的同步由操作系统实现, 共享内存通信中由用 户自己编程实现同步。 21. Linux操作系统提供的进程通信机制有哪些种类?它们各自的特点是什么? 答:Linux 操作系统提供的进程通信机制有低级通信和高级通信两种方式。低级通信包括软 中断信号、信号量量、互斥锁和条件变量通信;高级通信包括管道、消息缓冲和共享内存。 操作系统(D 类)第四章作业解答 2011 第 6 页 低级通信中: 软中断通信简单,适合处理随机事件; 信号量、互斥锁、条件变量用来实现进程间的同步和互斥。 高级通信中: 无名管道简单方便, 但工作在单向通信方式, 且只能在创建它的进程及其子孙进程之间 共享; 消息缓冲可以在任意进程之间通信,而且自带同步工具,使用方便,但是信息复制消耗 CPU 的时间,不适宜于信息量大或操作频繁的场合; 共享内存针对消息缓冲的缺点改而利用内存缓冲区直接交换信息,快捷、信息量大是 其优点。缺点是不带同步工具,同步和互斥问题需要各进程利用其他同步工具解决。 22. 在信号量S上作P、V操作时,S的值发生变化,当S>0、S=0、S<0 时,它们 的物理意义分别是什么? 答:1. P 操作原语 P(S): 1)P操作一次,S 值减1,即 S=S-1(请求分配一资源); 2)如果 S≥0,表示成功分得资源且 S 表示剩余的空闲资源,本进程继续执行; 如果S<0,表示尚未分得资源,本进程需要进入阻塞态,把相应的 PCB 连入该信号 量队列的末尾,并放弃处理机,直至其它进程执行 V(S)操作。 2. V 操作原语 V(S): 1)V 操作一次,S 值加 1,即 S=S+1(释放一单位量资源) ; 2)如果 S>0,表示先前没有进程处于阻塞等待状态,本进程继续执行; 如果 S≤0,表示先前有其它进程处于阻塞等待状态,需要释放信号量队列上的第一个 PCB 所对应的进程(阻塞态改为就绪态) ,然后本进程继续执行。 23. 桌上有一只盘子,最多可以容纳 3 个水果,每次仅能放入或取出 1 个水果。 爸爸向盘子中放苹果(apple),妈妈向盘子中放橘子(orange),两个儿子专等 盘子中的橘子,两个女儿专等吃盘子中的苹果。试用信号量和P、V操作编写 实现爸爸、妈妈、儿子、女儿间正确工作的算法。 答:盘子为互斥资源,因可以放 3 个水果,empty 初值为 3; father 放苹果前先看看有无空间,若有则抢盘子,放入 app1e 后向女儿发信号(V(apple)); mother 放桔子前先看看有无空间, 若有则抢盘子, 放入桔子后向儿子发信号(V(orange)); 女儿先看有无苹果,若有则抢盘子,取走苹果后将盘子置空(V(empty)); 儿子先看有无桔子,若有则抢盘子,取走桔子后将盘子置空(V(empty))。 该题是生产者/消费者问题的变形, 2 对生产者和消费者。 有 生产者需指明是给哪个消费 者的产品,但消费者取走产品后无须特别通知某个生产者,因为空出的缓冲区(盘子)可 由两个生产者随意争夺。 操作系统(D 类)第四章作业解答 2011 第 7 页 int mutex=1; //控制对盘子的互斥访问 int apple=0; //表示盘中苹果个数 int orange=0; //表示盘中桔子个数 int empty=3; //表示盘子可放入的水果数量 father() { while(1) { P(empty); P(mutex); 放苹果; V(mutex); V(apple); } } mother() { while(1) { P(empty); P(mutex); 放桔子; V(mutex); V(orange); } } daughter() { while(1) { P(apple); P(mutex); 取苹果; V(mutex); V(empty); } } son() { while(1) { P(orange); P(mutex); 操作系统(D 类)第四章作业解答 2011 第 8 页 取桔子; V(mutex); V(empty); } } Cobegin father(); mother(); son(); son(); daughter(); daughter(); coend 24. 在X、Y两点之间是一段南北的单车道,当X、Y之间有车辆在行驶时,同方 向的车辆可以同时进入XY段,但另一方向的车必须在XY段外等待;当X、Y 之间无车辆行驶时,到达X点(或Y点)的车辆可以进入XY段,但不能同时从X 点和Y点驶入、当某方向在XY段行驶的车辆驶出了XY段且暂无车辆进入XY 段时,应让另一方向等待的车辆进入XY段行驶。请用信号量和P、V操作实 现其管理算法。 答:XtoYcnt 整型,记录正由 X 往 Y 行驶的车辆 初值 0。 YtoXcnt 整型,记录正由 Y 往 X 行驶的车辆 初值 0。 MutexXtoY 信号量,对 XtoYcnt 互斥 初值 1 MutexYtoX 信号量,对 YtoXcnt 互斥 初值 1 Lock XY 段通行的互斥信号量 初值 1 X 到 Y: P(MutexXtoY); XtoYcnt = XtoYcnt +1; if XtoYcnt = = 1 then P(Lock); V(MutexXtoY); 过 P(MutexXtoY) XtoYcnt= XtoYcnt -1; if XtoYcnt = = 0; 操作系统(D 类)第四章作业解答 2011 第 9 页 then V(Lock); V(MutexXtoY); Y 到 X: P(MutexYtoX); YtoXcnt= YtoXcnt +1; if YtoXcnt = =1; then P(Lock); V(MutexYtoX); 过 P(MutexYtoX) YtoXcnt = YtoXcnt -1; if YtoXcnt = =0; then V(Lock); V(MutexYtoX); 25. 设有n个进程共享一个互斥段,如果: (1) 每次只允许一个进程进入互斥段; (2) 每次最多允许 m 个进程(m≤n)同时进入互斥段。 试问:所采用的互斥信号量初值是否相同?信号量值的变化范围如何? 答:已知有 n 个进程共享一个互斥段,如果最多允许 m 个进程(m<n)同时进入互斥段, 这意味着系统有 m 个单位的资源, 信号量的初值应设为 m, 信号量值的变化范围为–(n–m)~ m。如果每次只允许 1 个进程进入互斥段,则初值为 1,范围为–(n–1)~1 26. 设有 4 个合作进程P1、P2、P3、P4,它们的同步关系如下图所示,试用信号 量的P、V操作实现其同步。 P4 P2 答:同步分析: 进程 前驱 请求信号量 后继 释放信号量 P1 无 无 P3 S13 P2 无 无 P3、P4 S23、S24 P3 P1、P2 S13、S23 P4 S34 P4 P2、P3 S24、S34 无 无 P1 P3 int S13=S23=S24=S34=0;/*设置同步信号量,初值皆为 0*/ P1() P2() P3() P4() { 执行自己的程序; { 执行自己的程序; { P(S13); { P(S24); 操作系统(D 类)第四章作业解答 2011 第 10 页 V(S13); } V(S23); V(S24); } P(S23); 执行自己的程序; V(S34); } main() { cobegin P1();P2(); P3; P4(); coend } P(S34); 执行自己的程序; } //4 个进程并发执行 27. n个进程共享m个资源, 每个进程一次只能申请或释放一个资源,每个进程最 多的资源请求数为m个,所有进程总共需求的资源数小于m+n个,证明该系 统此时不会产生死锁。 解一: 假设已经发生了死锁。 那么,n 个进程已经用完 m 个资源,而且,其中的每一个进程均至少还需要 1 个资源。 这样,n 个进程总的资源需求数将成为 m+n。这与题设的小于 m+n 相矛盾。 所以,假设不可能成立,也就是说不可能已经发生了死锁。 解二: 假设用 Maxi 表示第 i 个进程对该资源的最大需求量;用 Needi 表示第 i 个进程对该资 源的剩余需求量;用 Allocationi 表示第 i 个进程对该资源的已经分配到的需求量。 根据题意,满足以下条件: Needi>0(对所有 i) n ∑ Max i =1 i <m+n (反证法)若系统已经因竞争该类资源而进入死锁状态,则意味着有一个或者一个以上的 进程因申请不到该类资源而无限阻塞,而 m 个资源肯定已经全部分配出去,即 n ∑ Allocation i =1 i =m 因此 n n n i =1 i =1 i =1 ∑ Need i = ∑ Max i − ∑ Allocation i < m + n - m 即 操作系统(D 类)第四章作业解答 2011 第 11 页 n ∑ Need i =1 i <n 这样,至少存在一个进程,其 Needi<=0,这显然与题意不符,所以该系统不可能因竞 争资源而进入死锁状态。 解三: 由题意得 n×m < m + n n × (m − 1) + n < m + n 即 n × (m − 1) < m 也就是说,当 n 个进程都取得了其最大需求资源数减 1 个(m-1)资源时,系统至少还有 一个剩余的资源可供分配,所以,不会发生死锁。 28. 什么是死锁?死锁产生的必要条件有哪些?操作系统如何规避死锁? 答:死锁是指多个进程(或线程)因竞争使用资源而形成的一个僵局。在这个僵局中,每个进 程都占有一定的资源, 都申请使用已被其它进程占用而又不能剥夺的资源, 所有这些进程都 进入了阻塞状态而不能继续运行。 死锁产生的必要条件有以下 4 个: 互斥条件(mutual exclusion):涉及的资源是非共享的,每次只能给一个进程使用; 不剥夺条件(no preemption):资源申请者不能强行地从资源占有者手中夺取资源,资源只能 由占有者自愿释放; 保持而(部分)请求和条件(request while holding): 进程每次仅申请一部分资源, 在请求新资源 期间,继续保持对已分配资源的占有; 循环等待(环路)条件(circular wait):多个进程形成一个循环等待链,链中的各个进程恰恰请 求已经被其链中的前一个进程所占有的资源。 操作系统规避死锁的方法有:预防、避免、检测与解除。 预防:具体做法是破坏产生死锁的四个必要条件之一。 避免:不事先采取限制去破坏产生死锁的条件,而是在资源的动态分配过程中,用某种方法 去防止系统进入死锁状态,从而避免死锁的发生。 检测:事先并不采取任何限制,也不检查系统是否进入不安全区,允许死锁发生,但可通过 检测机构及时检测出死锁的发生,并精确确定与死锁有关的进程和资源。 解除:与检测死锁相配套,用于将进程从死锁状态解脱出来。常用的方法是撤消或挂起一些 进程。以回收一些资源,再将它们分配给处于阻塞状态的进程,使之转为就绪状态。 操作系统(D 类)第四章作业解答 2011 第 12 页 29. 操作系统对于资源的分配有哪两种基本方式? 答:操作系统对资源进行分配的方法主要有静态分配和动态分配两种。 静态分配指在作业级实施的资源分配, 分配给作业的资源伴随作业的整个运行过程, 当 作业完成时才被释放,因此利用率很低。 动态分配指在进程级实施的资源分配, 当进程请求资源时分配资源, 进程使用完毕后立 即释放,所以利用率很高。 30. 静态分配与有序分配分别破坏的是死锁必要条件中的哪个条件? 答: 静态分配破坏的是死锁必要条件中的保持而请求条件; 有序分配破坏的是死锁必要条件 中的环路条件。 31. 如果系统中有 7 个进程,它们对于某类独占资源的需求皆为 9 个,操作系统 对于资源的分配采用需要多少分配多少的方式。试问系统至少需要多少个该 类资源才不会产生死锁? 解:设最小资源数为 M,则 M=7*(9-1)+1=57 所以系统至少需要 57 个该类资源才不会产生死锁。 32. 什么是线程?为什么要引入线程这一概念?线程与进程有哪些相同和不同 之处? 答:线程是进程内相对独立的、CPU 可独立调度和分派的执行单元或控制流。 它是调度执行的基本单位,但不是资源分配的基本单位,它从属于某个进程,是该进程 的某个执行路线。 引入线程则是为了减少实现程序并发执行所需的系统开销, 提高并发执行实现的系统效 率。 线程与进程的主要区别与联系在于: (1) 拥有资源 进程是拥有资源的基本单位,相对较多。线程拥有的资源很少,一般只有程序计数器 (PC)、一组寄存器和堆栈。但是,同一个进程中的所有线程可以共享该进程的资源,包括为 其分配的地址空间。 (2) 并发性 不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行。 (3) 调度与切换 线程的切换非常迅速且开销小。对进程的调度与切换总是要比线程的调度与切换花费更 多的系统开销。 操作系统(D 类)第四章作业解答 2011 第 13 页 同一个进程中的线程调度与切换不会引起进程的调度与切换。只有当一个进程的线程直 接切换到另一进程的线程时,才引起进程的调度与切换。 (4) 通信 在同一个进程中的各个线程,都可以共享该进程所拥有的资源,它们具有相同的地址空 间(进程的地址空间),可以访问该空间中的每一个虚地址,还可以访问进程所拥有的已打开 文件、定时器、信号量等。 线程间通信主要通过进程内公共存储空间(全局变量)的形式,直接读写进程的数据段即 可完成通信。 一旦某线程对其虚拟空间做任何改变,比如全局变量,其它线程就会马上感知到。 总体上,线程间通信的效率较高。 (5) 系统开销 由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等。 对线程的创建或撤销所涉及的资源相对较少,因为线程使用的其它资源是被分配给进程 而被其内部所有线程所共享的。 因此,操作系统创建或撤消进程所付出的开销将明显地大于在创建或撤消线程时的开 销。 操作系统(D 类)第四章作业解答 2011 第 14 页 对以下不作要求! 33. 如何使用Linux提供的信号量来实现进程的互斥和同步? 答:信号量及其 P、V 操作的实现方式归纳如下: 1. 定义信号量标识符:int semid; 如果有 n 个信号量,则需要分别定义 n 个不同的信号量标识符。 2. 定义信号量数据结构 ⑴.定义 P、V 操作所用的数据结构:struct sembuf P,V; ⑵.定义给信号量赋初值的参数数据结构:union semun arg; 3. 申请只有一个信号量的信号量集 semid=semget(IPC_PRIVITE,1,IPC_0666); 其中,第一个参数:IPC_PRIVATE 由系统产生 key 值,也可以由用户使用具体的整型 数值作为 key 值指定;第二个参数表示信号量集中只有一个信号量;操作权限取决于最后 一个参数,0666 表示任意用户可读可写,只设置 semflag 的 IPC_CREAT 位,则创建一个 信号量集,如果该信号量集已经存在,则返回其标识符。 4. 分别对每个信号量 semid 赋初值 arg.val=初值; semctl(semid,0,SETVAL,arg); 5. 定义信号量的 P 操作(供所有信号量的 P 操作使用) P.sem_num=0; P.sem_op=-1; /*-1 表示 P 操作时对信号量减 1*/ P.sem_flg=SEM_UNDO; 6. 定义信号量的 V 操作(供所有信号量的 V 操作使用) V.sem_num=0; V.sem_op=1; /*1 表示 V 操作时对信号量加 1*/ V.sem_flg=SEM_UNDO; 7. 对信号量 semid 执行 P 操作:semop(semid,&P,1); 8. 对信号量 semid 执行 V 操作:semop(semid,&V,1); 9. 撤消信号量:semctl(semid,IPC_RMID,0); 因为信号量不是普通变量,对它赋初值只能通过 semctl(semid,0,SETVAL,arg),其值 的修改只能通过 P、V 操作,而不能使用普通的赋值语句。因此信号量的初值及其 P、V 操 作需要事先定义好,然后才能在进程中执行 P、V 操作。 操作系统(D 类)第四章作业解答 2011 第 15 页 34. 设某系统有R1、R2、R3 三种资源,在T0 时刻P1、P2、P3、P4 进程对资源 的占有和需求情况如表 5-7 所示,设系统剩余的可用资源向量为(2,1,2) 。 表-1 进程对资源的占有和需求情况 进程 最大需求 已分配 R1 R2 R3 R1 R2 R3 P1 3 2 2 1 0 0 P2 6 1 3 4 1 1 P3 3 1 4 2 1 1 P4 4 2 2 0 0 2 ⑴.将系统中各种资源总数和此刻各进程对各资源的需求数目用向量或矩阵表示出来。 解:系统资源总数=已分配数+剩余数=(1+4+2+2, 1+1+1, 1+1+2+2)=(9,3,6) 剩余需求=最大需求-已分配数 剩余需求矩阵: 进程 剩余需求 R1 R2 R3 P1 2 2 2 P2 2 0 2 P3 1 0 3 P4 4 2 0 ⑵.如果此刻 P1、P3 都发出资源请求向量(1,0,2) ,系统应该如何实施分配?为什 么?如果可以分配,请给出可以实施分配的一种安全序列。 答:P1、P3 都不能分配。 ∵如果对 P1 实施了分配,则系统剩余资源数为(1,1,0) ,该剩余资源数不能满足任 何一个进程的剩余需求,因而找不到一个安全序列存在。 如果对 P3 实施了分配,则系统剩余资源数为(1,1,0) ,该剩余资源数同样不能满足 任何一个进程的剩余需求,因而也找不到一个安全序列存在。 ∴所以不能对它们实施分配。 此时只能对 P2 进行分配,因为当前的剩余资源数可以保证 P2 完成,而 P2 完成所释放 的资源就可以至少得到下面的安全序列{P2,P1,P3,P4}。 操作系统(D 类)第四章作业解答 2011 第 16 页 ...
View Full Document

Ask a homework question - tutors are online