计算机操作系统 第二章 习题.ppt
2023/1/18计算机操作系统计算机操作系统2023/1/18进程的描述与控制进程的描述与控制 l关于并发进程,以下叙述不正确的是()A)若系统中存在一组可同时执行的进程,则该组进程具有并发性B)并发进程之间一定是有交往的C)无关并发进程一定没有共享变量D)有交往的并发进程一定共享某些资源l进程在等待系统分配处理器以便运行时,处于()A)等待态B)就绪态 C)运行态 D)以上都不是l不属于进程的组成部分的是()A)程序B)数据集C)进程控制快D)系统软件l某系统的进程状态转换图如图所示请说明:运行就绪阻塞4213l请说明引起各种状态转换的典型事件有哪些?当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换,在什么情况下,当一个进程发生转换3时能立即引起另一个进程发生转换1?试说明是否会发生下述因果转换:l21l32l41 进程的互斥与同步进程的互斥与同步l从下面对临界区的论述中,选择出两条正确的论述:(1)临界区是指进程中用于实现进程互斥的那段代码。(2)临界区是指进程中用于实现进程同步的那段代码。(3)临界区是指进程中用于实现进程通信的那段代码。(4)临界区是指进程中用于访问共享资源的那段代码。(5)临界区是指进程中访问临界资源的那段代码。(6)若进程A与进程B必须互斥地进入自己的临界区,则进程A出于对应得临界区内时,仍有可能被进程B中断。(7)若进程A与进程B必须互斥地进入自己的临界区,则进程A出于对应得临界区内时,便不能被进程B中断。l用信号量S实现对系统中4台打印机的互斥使用,S.value的初值应设置为(A),若S.value的当前值为-1,则表示S.L队列中有(B)个等待进程。A:(1)1;(2)0;(3)-1;(4)4;(5)4。B:(1)0;(2)1;(3)2;(4)3;(5)4;(6)5;(7)6;l设有5个哲学家,共享一张放有5把椅子的桌子,每人分得1把椅子。但是,桌子上总共只有5支筷子,在每人两边分开各放一支。哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就餐。条件:l1)只有拿到两支筷子时,哲学家才能吃饭。l2)如果筷子已在他人手上,则该哲学家必须等待到他人吃完之后才能拿到筷子。l3)哲学家在自己未拿到两支筷子吃饭之前,决不放下自已手中的筷子。要求:l描述一种没有人饿死(永远拿不到筷子)算法。设信号量设信号量c0c4,初值均为,初值均为1,分别表示,分别表示i号筷子被拿(号筷子被拿(I=0,1,2,3,4),),奇数号哲学家先取右边的筷子,偶数号哲学家先取左边的筷子。奇数号哲学家先取右边的筷子,偶数号哲学家先取左边的筷子。第i个哲学家要吃饭:beginif(i mod 2=0)p(ci);p(ci+1 mod 5);eat;v(ci);v(ci+1 mod 5);elsep(ci+1 mod 5);p(ci);eat;v(ci+1 mod 5);v(ci);end;嗜睡的理发师问题嗜睡的理发师问题 一个理发店有一个有N张沙发的等候室和一个放有一张理发椅的理发室组成。没有顾客要理发时,理发师便去睡觉。当一个顾客走进理发店时,如果所有的沙发都已被占用,他便离开理发店;否则如果理发师正在为顾客理发,则该顾客就找一张空沙发坐下等待;如果理发师因无顾客正在睡觉,则由新到的顾客唤醒理发师为其理发。在理发完成后,顾客必须付费,直到理发师收费后才能离开理发店。试用信号量实现这一同步问题。l需要设置一个整型变量count用来对理发店中的顾客进行计数,并须设置7个信号量,其中:mutex用来实现顾客进程对count变量的互斥访问,其初值为1;sofa是对应于等候室中N张沙发的资源信号量,其初值为N;empty表示是否有空闲的理发椅,其初值为1;full表示理发椅上是否坐有等待理发的顾客,其初值为0;cut用来等待理发的完成,其初值为0;payment用来等待付费,其初值为0;receipt用来等待收费,其初值为0。具体的算法描述如下:int count=:integer=0;flag=1;Semaphore mutex=1,sofa=n,empty=1,full=0,cut=0,payment=0,receipt=0;顾客:guestwait(mutex);if(countn)signal(mutex);exit shop;/如果理发椅和沙发都坐有顾客则离开 else count+;/顾客数加1 if(count1)/如果理发椅上已经坐有顾客signal(mutex);wait(sofa);/选择沙发sit on sofa;/入座沙发wait(empty);/等待理发椅空闲get up from sofa;/从沙发上起身signal(sofa);/腾出空闲沙发else/目前只有一位顾客signal(mutex);wait(empty);sit on the baber_chair;/入座理发椅signal(full);/宣告理发椅上已有人,请理发师来理发wait(cut);/等待理发结束pay;/付钱signal(payment);wait(receipt);/等待收完款get up from the baber_chair;/从理发椅上起身signal(empty);/腾出理发椅wait(mutex);count-;/顾客数减1signal(mutex);exit shop;/离开 理发师:barber do wait(full);/等待唤醒 cut hair;/开始理发signal(cut);/理完 wait(payment);/等待付款 accept payment;/收款 signal(receipt);/收完款 while(flag=1);