主题:[原创]求教关于 操作系统 PV原语的问题!!!!!
求教一个关于利用PV 原语操作实现进程间的互斥的问题:
设生产围棋的工人不小心把黑子和白子都装入到一个箱子中,现在要利用自动分拣系统把黑子和白子区分:
1)进程A专门拣黑子 ,进程B专门拣白子;
2)每个进程每次只拣一个子,当一个进程拣子时令一个进程不允许拣子;
分析:
1> 确定进程间的关系 由功能2可知进程之间是互斥的关系.
2> 确定信号量及其值.由于进程A,B 要互斥进入箱子去拣子,箱子就是二个进程公用的资源.所以设置信号量S,其值取决于公有资源的数目,由于箱子只有一个s的初值应设置为1;
实现:
begin:
s:sem;
s:1;
cobegin:
process A:
begin
L1: P(s);
拣黑子;
V(s);
go to L1;
end;
cobegin:
process B:
begin
L2: P(s);
拣白子;
V(s);
go to L2;
end;
coend
end;
PV 互斥:我自己的理解是: P(s) 占用资源: s--; then s>=0 进程继续 else 等待状态或进程调度
V(s) 释放资源: v++; then s>0 进程继续 else 唤醒或转进程调度
我不理解的就是:
1. p(s) v(s) 是不是一个 各自独立的循环 例如 s=2时 1>s--;(s=1)>=0;进程继续 再然后就是循环:..... 2>s--; (s=-1)>=0; 进程等待; 还是在1>的时候执行V(s) ?
2. 上面那个围棋的例子 是不是等到A 全部完成了(把黑子都拣完了) B 再继续....(请详细解释)
3. 能不能用更具体点的自然语言 把上面那个围棋的例子 详细的描述一下;
结语:
我对PV这个概念琢磨了一个下午了! 可是越想就越郁闷!!
我是学Java的 由于近期参加专升本考试。。。。如果上面的问题太低等的话请不要骂我呀!! 现在压力很大了已经!! 别在伤俺自尊咯!
设生产围棋的工人不小心把黑子和白子都装入到一个箱子中,现在要利用自动分拣系统把黑子和白子区分:
1)进程A专门拣黑子 ,进程B专门拣白子;
2)每个进程每次只拣一个子,当一个进程拣子时令一个进程不允许拣子;
分析:
1> 确定进程间的关系 由功能2可知进程之间是互斥的关系.
2> 确定信号量及其值.由于进程A,B 要互斥进入箱子去拣子,箱子就是二个进程公用的资源.所以设置信号量S,其值取决于公有资源的数目,由于箱子只有一个s的初值应设置为1;
实现:
begin:
s:sem;
s:1;
cobegin:
process A:
begin
L1: P(s);
拣黑子;
V(s);
go to L1;
end;
cobegin:
process B:
begin
L2: P(s);
拣白子;
V(s);
go to L2;
end;
coend
end;
PV 互斥:我自己的理解是: P(s) 占用资源: s--; then s>=0 进程继续 else 等待状态或进程调度
V(s) 释放资源: v++; then s>0 进程继续 else 唤醒或转进程调度
我不理解的就是:
1. p(s) v(s) 是不是一个 各自独立的循环 例如 s=2时 1>s--;(s=1)>=0;进程继续 再然后就是循环:..... 2>s--; (s=-1)>=0; 进程等待; 还是在1>的时候执行V(s) ?
2. 上面那个围棋的例子 是不是等到A 全部完成了(把黑子都拣完了) B 再继续....(请详细解释)
3. 能不能用更具体点的自然语言 把上面那个围棋的例子 详细的描述一下;
结语:
我对PV这个概念琢磨了一个下午了! 可是越想就越郁闷!!
我是学Java的 由于近期参加专升本考试。。。。如果上面的问题太低等的话请不要骂我呀!! 现在压力很大了已经!! 别在伤俺自尊咯!