找了很久,网上都说的很笼统,不如自己写吧。
操作系统的老师课后作业答案整合:
1、为什么进程能够并发执行而程序不能?什么临界资源,临界区,如何实现临界资源的互斥共享?
程序在并发执行时会失去封闭性,并具有不可再现性,会引起资源的共享并使计算结果与程序的运行速度挂上关系,我们可能会在两个具有共享资源变量的程序并发时出现3种或者更多的答案,使最后的结果不可控制和描述。因此我们引进进程这一概念——进程是进程实体的运行过程,具有独立性、异步性,这使得进程可以不受其他共享资源的影响最后得到一个我们可以控制描述的结果。
临界资源是指一段时间内只允许一个进程访问的资源,而临界区是指每个进程访问临界资源的代码。通过进入区(检查临界资源是否正在被使用的代码),退出区(将临界资源使用标志恢复,释放临界资源的代码)、剩余区(保证进程互斥的进入临界区,从而保证互斥访问临界资源的代码)实现临界资源的互斥共享。
具体的定义可以看看下面的转载链接,截了ppt的图
2、现有5个操作A、B、C、D、E,操作D必须在A、B完成后执行,操作E必须在C、D完成后执行、请使用信号量的wait() signal()操作(P、V操作)描述同步关系,并说明所用信号量及初值。
这个答案不确定啊,毕竟是自己写的,所以仅供参考
var a,b,c,d :semaphore :=1,1,1,1 #定义a、b、c、d的信号量,在执行完操作后会置为0,后续操作wait时就可以通行。
process A
A; #执行A操作
signal (a);
end;
process B
B; #执行B操作
signal (b);
end;
process C
C; #执行C操作
signal (c);
end;
process D
wait (a);
wait (b);
D; #执行D操作
signal (d);
end;
process E
wait (c);
wait (d);
E; #执行E操作;
end;