它存入B2中;当B1中有数,由进程W1将其打印输出;当B2中有数,进程W2将其打印输出。试编写保证三者正确工作的程序。
struct semaphone B1_Empty, B1_Full, B2_Empty, B2_Full; B1_Empty.value=1; B1_Full.value=0; B2_Empty.value=1; B2_Full.value=0; void R( ) { int a; While(1)
{ read a number a; if(a%2==1) { wait(B1_Empty);
put a in B1; signal(B1_Full);
} else
{ wait(B2_Empty);
put a in B2; signal(B2_Full);
} } } void W1( ) { while(1) { wait(B1_Full); print a number from B1; signal(B1_Empty); } } void W2( ) { while(1) { wait(B2_Full); print a number from B2; signal(B2_Empty); } } void main( ) { parbegin(R( ), W1( ), W2( )); }
(2)8个协作的任务A、B、C、D、E、F、G、H分别完成各自的工作。它们满足下列条件:任务A必须领先于任务B、C和E;任务E和D必须领先于任务F;任务B和C必须领先与任务D;而任务F必须领先于任务G和H。试写出并发程序,使得在任何情况下它们均能正确工作。
(3)多个进程共享一个文件,其中只读文件的称为读者,只写文件的称为写者。读者可以同时读,但写者只能独立写。问:
1)说明进程间的制约关系,应设置哪些信号量? 2)用wait、signal操作写出其同步程序。
3)修改上述算法,使得它对写者优先,即一旦有写者到达,后续的读者必须等待。而无论是否有读者在读文件。
见教材“读者-写者问题”
(4)桌上有一空盘,可放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子;儿子专等吃盘中的桔子;女儿专等吃盘中的苹果。规定一次只能放一只水果,试写出爸爸、儿子、女儿正确同步的程序。
struct semaphone plate, apple, orange; plate.value=1; apple.value=0; orange.value=0; void father( ) { while(1)
{ prepare an apple or orange; wait(plate); put the apple or orange in plate; if(Apple) signal(apple); //如果放的是苹果 else signal(orange); //如果放的是桔子 }
} void son( ) { while(1) { wait(orange); get an orange from the plate; signal(plate); } } void daughter( ) { while(1) { wait(apple); get an apple from the plate; signal(plate); } } Void main( )
(5)三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用procuce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getodd()
从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区中取出一个偶数并用counteven()统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述(2009年全国硕士研究生入学考试题)。
struct semaphone full_odd, full_even, mutex, empty; full_odd.value=0; full_even.value=0; mutex.value=1; empty.value=N; void P1( ) { int X; while(1)
{ X=produce( ); wait(empty); wait(mutex); put( ); if(X%2==0) signal(full_even); else signal(full_odd); signal(mutex); } }
void P2( )
{ wait(full_odd); wait(mutex); getodd( ); countodd( )=countodd( )+1; signal(empty); signal(mutex); }
void P3( )
{ wait(full_even); wait(mutex); geteven( ); counteven( )=counteven( )+1; signal(empty); signal(mutex); }
void main( )
{ parbegin(P1( ), P2( ), P3( )); } (6)放小球问题:一个箱子里只有白色和黑色两种小球,且数量足够多。现在需要从中取出一些小球放入一个袋子中。约定:1)一次只能放入一个小球;2)白球的数量至多只能比黑球少N个,至多只能比黑球多M个(M,N为正整数)。请用信号量机制实现
进程的同步与互斥。
struct semaphone mutex1, mutex2; int black=0, white=0; mutex1.value=1; mutex2.value=1; void put( ) { while(1)
{ wait(mutex1);
get a black ball or white ball from the box; signal(mutex1); wait(mutex2);
if(Black) //如果取到的是黑球 if(black-white void main( ) { parbegin(put( )); } 习题5 1.单项选择题 (1)当作业进入完成状态时,操作系统 。 A、 将删除该作业并收回其所占资源,同时输出结果 B、 将该作业的控制块从当前作业队列中删除,收回其所占资源,并输出结果 C、 将收回该作业所占资源并输出结果 D、 将输出结果并删除内存中的作业 (2)批处理作业是被成批存入 ,以等待作业调度选择。 A、输入井 B、输出井 C、映象区 D、内存 (3)一种即有利于短作业又兼顾长作业的作业调度算法是 。 A、最高响应比优先 B、先来先服务 C、短作业优先 D、均衡调度 (4)在批处理系统中,周转时间是 。 A、作业运行时间 B、作业等待时间和运行时间之和 C、作业的相对等待时间 D、作业被调度进入内存到运行完毕的时间 (5)在操作系统中,作业处于 状态时,已处于进程管理之下。 A、提交 B、后备 C、运行 D、完成 (6)在作业调度中,若采用优先级调度算法,为了尽可能使处理器和外部设备并行工作,有如下三个作业:J1以计算为主,J2计算和输入输出兼顾,J3以输入输出为主,则它们的优先级从高到低的排列顺序是 。 A、J1,J2,J3 B、J2,J3,J1 C、J2,J3,J1 D、J3,J1,J2 (7)一个作业被成功调度后,系统为其创建相应的进程,该进程的初始状态是 。 A、执行态 B、阻塞态 C、就绪态 D、等待访问设备态 (1)B (2)A (3)A (4)B (5)B 2.填空题 (1)作业调度是从处于 后备 状态的队列中选取适当的作业投入运行。从作业提交给系统到作业完成的时间间隔叫做 周转时间 。 等待时间 是指作业从进入后备队列到被调到程序中的时间间隔。假定把下列四个作业同时提交系统并进入 后备 队列,当使用短作业优先调度算法时,单道环境下,四个作业的平均等待时间是 4.25小时 ,平均周转时间是 8.75小时 ;当使用高优先数优先的调度算法时,作业的平均等待时间是 5.75小时 ,平均周转时间是 10.25小时 。 作业 1 2 3 4 所需运行时间(小时) 2 5 8 3 优先数 4 9 1 7 (2)在一个具有分时兼批处理的系统中,总是优先调度 分时作业 。 3.简答题 (1)什么是分层次调度?在分时系统中有作业调度的概念吗?如果没有,为什么? (2)作业调度和进程调度的主要功能分别是什么? (3)作业调度的性能评价标准有哪些?这些性能评价标准在任何情况下都能反映调度 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库操作系统教程 课后答案-武伟主编(3)在线全文阅读。
相关推荐: