2.8.在生产者—消费者问题中,如果缺少了signal(full)或signal(empty),对执行结果将会有何影响?
如果缺少了signal(full),那么表明从第一个生产者进程开始就没有对信号量full值改变,即使缓冲池存放的产品已满了,但full的值还是0,这样消费者进程在执行wait(full)时会认为缓冲池是空的而取不到产品,那么消费者进程则会一直处于等待状态。
如果缺少了signal(empty),例如在生产者进程向n个缓冲区投满产品后消费者进程才开始从中取产品,这时empty=0,full=n,那么每当消费者进程取走一个产品时empty并没有被改变,直到缓冲池中的产品都取走了,empty的值也一直是0,即使目前缓冲池有n个空缓冲区,生产者进程要想再往缓冲池中投放产品会因申请不到空缓冲区而被阻塞。
2.9在生产者—消费者问题中,如果将两个wait操作即wait(full)和wait(mutex)互换位置,或者将signal(mutex)和signal(full)互换位置,结果会如何?
在生产者—消费者问题中,如果将两个wait操作,即wait(full)和wait(mutex)互换位置后,可能引起死锁。考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex)操作并获得成功,则当再执行wait(empty)操作时,它将因失败而进入阻塞状态,它期待消费者进程执行signal(empty)来唤醒自己,在此之前,它不可能执行signal(mutex)操作,从而使试图通过执行wait(mutex)操作而进入自己的临界区的其他生产者和所有消费者进程全部进入阻塞状态,这样容易引起系统死锁。
若signal(mutex)和signal(full)互换位置后只是影响进程对临界资源的释放次序,而不会引起系统死锁,因此可以互换位置。
2.10我们为某临界资源设置一把锁w,当w=1时表示关锁;当w=0时表示锁已打开,试写出开锁和关锁原语,并利用它们去实现互斥。
整型信号量:lock(w): while w=1 do no-op
w:=1;unlock(w): w:=0;
记录型信号量:lock(w): w:=w+1;
if(w>1) then block(
unlock(w): w:=w-1;
if(w>0) then wakeup(
例子:var w:semaphore:=0;
beginrepeat
lock(w);
critical section
unlock(w);
remainder section
until false;
end2.11试修改下面生产者——消费者问题解法中的错误:
producer:
beginrepeat
produce an item in nextp;
wait(mutex);
wait(full);
buffer(in):=nextp;……
signal(mutex);
until false;
endconsumer:
beginrepeat
wait(mutex);
wait(empty);
nextc:=buffer(out);
out:=out+1;
signal(mutex);
consume item in nextc;
until false;
end2.12 试利用记录型信号量写出一个不会出现死锁的哲学家进餐问题的算法。
三种解决方法中的任意一种即可(略)。p62
答:varchopstick:array[0,4]ofsemaphore;
所有信号量均被初始化为。
第。i位哲学家的活动可描述为:
repeat
wait(chopstick[i]);
wait(.chopstick[(i+1)mod5]);
signal(chopstick[i]);
signal(chopstick[(i+1)mod5])
think;
untilfalse;
2.13 在测量控制系统中的数据采集任务时,把所采集的数据送往一单缓冲区;计算任务从该单缓冲区中取出数据进行计算。试写出利用信号量机制实现两任务共享单缓冲区的同步算法。
a. var mutex, empty, full: semaphore:=1, 1, 0;
gather:
beginrepeat
gather data in nextp;
wait(empty);
wait(mutex);
buffer:=nextp;
signal(mutex);
signal(full);
until false;
endcompute:
beginrepeat
wait(full);
wait(mutex);
nextc:=buffer;
signal(mutex);
signal(empty);
compute data in nextc;
until false;
endb. var empty, full: semaphore:=1, 0;
gather:
beginrepeat
gather data in nextp;
wait(empty);
buffer:=nextp;
signal(full);
until false;
endcompute:
beginrepeat
wait(full);
nextc:=buffer;
signal(empty);
compute data in nextc;
until false;end
操作系统 软件 操作系统作业
1 信号量的物理含义是什么?2 处于执行状态的进程若同时发生了下列两种情况 1 对某信号量执行p操作后,信号量的值变为负数。2 该进程的时间片到时产生中断。试问,该进程将由执行状态变迁为就绪态,还是阻塞态?简述理由。3 设有n个进程共享一临界区,对于下述情况,说明信号量的初值 含义,并用pv操作写出...
操作系统作业
4.程序并发执行时为什么会失去封闭性和可再现性?因为程序并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态是由多个程序来改变,致使程序的运行失去了封闭性。而程序一旦失去了封闭性也会导致其再失去可再现性。6.试从动态性,并发性和独立性上比较进程和程序?a.动态性是进程最基本的特性,可表现为...
操作系统作业
一 选择题。1 在进程的组成部分之中,进程在运行中不可修改的部分是 a 私用程序段b 共享程序段。c 数据段d 进程控制块。2 响应比高者优先作业调度算法是以计算时间和 来考虑的。a 输入时间 b 完成时间 c 周转时间 d 等待时间。3 在消息缓冲通信中,消息队列属于 资源。a 临界 b 共享 c...