操作系统概念同步部分,与手动解决方案相混淆

时间:2018-07-16 08:18:35

标签: operating-system monitor

我目前正在“操作系统概念10 / e”之后进行一些锻炼 同步部分,这是我困惑的练习的解决方案。

6.25考虑一个由进程P1,P2,...,Pn组成的系统,每个进程都有唯一的优先级编号。编写一个监视器,使用优先级数字确定分配顺序,以将三个相同的行式打印机分配给这些进程。

手册给出了伪代码解决方案:

var figure = $(".video").mouseenter( hoverVideo );

function hoverVideo(e) {  
$('video', this).get(0).play().show(); 
}
var figure = $(".video").mouseleave( hideVideo );
function hideVideo(e) {
$('video', this).load().hide(); 
}

我的问题是:

考虑以下情况:

如果有五个进程P1,P2,P3,P4,P5都希望使用打印机,则假定每个进程的优先级数关系为P1 plt.scatter并成功访问打印机,然后x=[10,20,30,40,50] y=[1,0,1,0,1] colors = ["seagreen" if i == 1 else "red" for i in y] plt.scatter(x, y, color=colors) plt.show() ,但是如果P1,P2,P3仍在使用打印机时P4也呼叫 monitor printers { int num_avail = 3; int waiting_processes[MAX_PROCS]; int num_waiting=0; condition c; void request_printer(int priority_number) { if (num_avail > 0) { num_avail--; return; } waiting_processes[num_waiting] = priority_number; num_waiting++; sort(waiting_processes); while (num_avail == 0 && waiting_processes[0] != priority_number) c.wait(); waiting_processes[0] = waiting_processes[num_waiting-1]; num_waiting--; sort(waiting_processes); num_avail--; } void release_printer() { num_avail++; c.broadcast(); } }

从上面的代码中,我们可以看到对request_printer(priority_of_Pi)数组进行排序之后,num_avail==0是P4,因此P4将能够离开检查循环,而无需等待{ {1}}语句,并且将导致request_printer(),因此现在waiting_processes和P4可以使用打印机,而P1,P2,P3仍在使用打印机,如果P5调用{{1} }现在以来,由于waiting_processes[0] P5还能够离开检查循环c.wait()并使用打印机,这意味着出现了竞争状况。 考虑一下我认为的情况,解决方案是否错误,或者我想错了什么? 如果解决方案有误,该如何解决?

非常感谢您!

0 个答案:

没有答案