当前位置:首页 > 操作系统(1-8章的课后习题答案)doc资料
4-12: n个并发进程共用一个共用一个公共变量Q,写出用信号灯实现n个进程互斥时的程序描述,给出信号灯值的取值范围,并说明每个取值的物理意义。 main() {
int mutex=1; cobegin P1(); P2(); Pn(); coend }
P1() P2() Pn() { { { ... ... ...
P(mutex); P(mutex); P(mutex); cs1; cs2; csn;
v(mutex); v(mutex); v(mutex); } } }
对于两个并发进程,互斥信号灯的值仅取1、0、-1三个值。 若mutex=1,表示没有进程进入临界区; 若mutex=0,表示有一个进程进入临界区;
若mutex=-1,表示一个进程进入临界区,另一个进程等待进入。
4-13 :图4.30(a)、(b)分别给出了两个进程流图。试用信号灯的P、V操作分别实现图4.30(a)、(b)所示的两组进程之间的同步,并写出程序描述。 a:
P1 P2 P3 M P(S2); P(S3) v(S1); M M
v(S2); M M v(S3); 4-15 : main() {
int sa=1,sb=0;// sa 表示缓冲区s 是否为空,sb 表示是否有数据可被处理。 int ta=1,tb=0;// ta 表示缓冲区t 是否为空,tb 表示是否有数据可被处理。 cobegin get; copy; put; coend }
Get(){ Copy(){ Put(){ while(1){ while(1){ while(1){
P(sa); P(sb); P(tb);
input data to buffer s copy data from buffer s; output data to buffer s;
V(sb); V(sa); V(ta);
} P(ta); }
} input copy-data to buffer t; } V(tb); } }
4-16:a:进程的互斥是当某一进程正在访问某一存储区域时,就不允许其他进程来读出或者修改该存储区的内容,否则,就会发生后果无法估计的错误。进程之间的这种制约关系称为互斥。
b: 进程的同步是:就是并发进程在一些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通信息称为进程同步。
c: 同步与互斥这两个概念的区别与联系:相交进程之间的关系主要有两
种,同步与互斥。所谓互斥,是指散步在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它 们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。所谓同步,是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。 显然,同步是一种更为复杂的互斥,而互斥是一种特殊的同步。 也就是说互斥是两个线程之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥),
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
4-20:进程创建的主要功能是:(1)为新建进程申请一个PCB。 (2)将创建者(即父进程)提供的新建进程的信息填入PCB中。
(3)将新建进程设置为就绪状态,并按照所采用的调度算法,把PCB排入就绪队列中
4.17 : Mian() { int full=0;int empty=n;int
mutex=1; cobegin p1(); p2(); … ;pm(); c1(); c2(); …
;ck(); coend} producer() { while{ …
生产一个产品; p(empty);
p(mutex);送一个产品到有界缓冲区; v(metex); v(full); }}
consumer(){ while{ p(full); p(mutex);
从有界缓冲区中取产品; v(mutex); v(empty) …
消 费一个产品;}}
共分享92篇相关文档