进程同步习题全
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
semaphore chopstick[5]={1,1,1,1,1}; while(true) { think(); Swait(chopstick[(I+1)]%5,chopstick[I]); eat(); Ssignal(chopstick[(I+1)]%5,chopstick[I]); }
进程管理
取水:begin p(full) p(count) p(mutex2) 从水缸取水 v(mutex2) v(count) v(empty)
end
进程管理
哲学家进餐问题
设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子。 但是,桌子上总共只有5支筷子,在每人两边分开各放一支。哲学家 们在肚子饥饿时才试图分两次从两边拾起筷子就餐。 条件: (1) 只有拿到两支筷子时,哲学家才能吃饭。 (2) 如果筷子已在他人手上,则该哲学家必须等待到他人吃完之后才 能拿到筷子。 (3) 任一哲学家在自己未拿到两支筷子吃饭之前,决不放下自己手中 的筷子。 试:
公用信箱:oslily07@163.com 密码:os2007
进程管理
进程同步习题
设有n个进程共享一个程序段,对如下两种情况: (1)如果每次只允许一个进程进入该程序段; (2)如果每次最多允许m个进程(M<=n)同时进入 该程序段。 试问:所采用的信号量初值是否相同?信号量值的变 化范围如何? 所采用信号量的初值不相同。 在情况(1)中,信号量的初值为1, 信号量值的变化范围是l,0,-1…-(n-1)。 在情况(2)中,信号量的初值为M, 信号量值的变化范围是M,m-1,m-2…(m-n)。
Parbegin Father:begin L1: p(empty);
p(mutex); 放苹果; v(mutex); v(apple); goto l1; end;
Mather:begin L2:p(empty);
p(mutex); 放橘子; v(mutex); v(orange); goto l2; end;
Daughter:begin L3:p(apple);
p(mutex); 取苹果; v(mutex); v(empty); goto l3; end;
进程管理
L4:p(orange); p(mutex); 取橘子; v(mutex); v(empty); Goto l4; end;
进程管理
• 桌上有一个空的水果盘,盘中一次只能放一个 水果,服务员、男顾客和女顾客共用这个盘子。 服务员向盘中放草莓和香蕉,男顾客专等吃盘 中的草莓,女顾客专等吃盘中的香蕉。规定每 次当盘子空时只能放一个水果供顾客食用。请 用信号量机制实现服务员、男顾客和女顾客三 个进程的同步。
进程管理
(1) 描述一个保证不会出现两个邻座同时要求吃饭的通信算法。 (2) 描述一个既没有两邻座同时吃饭,又没有人饿死(永远拿不到 筷子)的算法。 (3) 在什么情况下,5 个哲学家全部吃不上饭?
进程管理
1.begin P(s1) ; P(s2) ; 吃饭 ; V(s1) ; V(s2) ;
End
mutex1=mutex2=1; 分别代表水井和 水缸 empty=10; 水缸的入水量 full=0; 水缸的取水量 count=3;水桶个数
进程管理
打水:begin p(empty) p(count) p(mutex1) 从水井打水; v(mutex1) p(mutex2) 往缸中放水 v(mutex2) v(full) v(count) end
进程管理
(经典理发师问题)
❖ 假设后街有家理发店,店里有一个理发师、一把理发 椅和n把等候理发的顾客椅子。 (1).如果没有顾客则理发师便在理发椅上看报纸; (2).当有一个顾客到达时,首先查看理发师在干什 么,如果在看报纸则告诉理发师理发,然后坐到理发 椅上开始理发;如果理发师正在理发,则查看是否有 空的椅子可坐,如果有,他就坐下等待,如果没有, 则离开; (3).理发师为一位顾客理完发后,查看是否有人等 待,如有则唤醒一位为其理发,如没有则在理发椅上 看报纸; (4).顾客不分优先级
Coend end
进程管理
南京大学2000年试题 ❖ 桌子上有一只盘子,最多可容纳两个水果,每
次只能放入或取出一个水果。爸爸专向盘子中 放苹果,妈妈专向盘子中放橘子,两个儿子专 等吃盘子中的橘子,两个女儿专等吃盘子中的 苹果。请用信号量操作来实现爸爸、妈妈、儿 子、女儿之间的同步与互斥关系。
进程管理
进程管理
semaphore chopstick[5]={1,1,1,1,1}; void philosopher(int i) { while(true) { think(); if(i%2 == 0) //偶数哲学家,先右后左。 { wait (chopstick[ i + 1 ] mod 5) ; wait (chopstick[ i]) ; eat(); signal (chopstick[ i + 1 ] mod 5) ; signal (chopstick[ i]) ; } Else //奇数哲学家,先左后右。 { wait (chopstick[ i]) ; wait (chopstick[ i + 1 ] mod 5) ; eat(); signal (chopstick[ i]) ; signal (chopstick[ i + 1 ] mod 5) ; } }
限制人数 semaphore chopstick[5]={1,1,1,1,1};
semaphore mutex=4;
{
Repeat
think(); wait(mutex); //请求进餐 wait(chopstick[i]); //请求左手边的筷子 wait(chopstick[(i+1)%5]); //请求右手边的筷子
end;
Woman:begin L3: p(cm);
p(mutex); 取草莓;
v(mutex); v(empty); goto L2; end;
Man:begin L2: p(ba);
p(mutex); 取香蕉;
v(mutex); v(empty); goto L2; end;
进程管理
汽车司机与售票员之间必须协同工作,一方面只有售 票员把车门关好了司机才能开车,因此,售票员关好 车门应通知司机开车。另一方面,只有当汽车已经停 下,售票员才能开门上下客,故司机停车后应通知售 票员,汽车当前正在始发站停车上客,试设必要的信 号灯及赋初值,写出他们的同步过程。
进程管理
❖ 有一间酒吧里有3个音乐爱好者队列,第一队的音乐爱好 者只有随身听,第二队的音乐爱好者只有音乐磁带,第 三队的音乐爱好者只有电池。然而,要听音乐就必须随 身听、音乐磁带和电池三种物品俱全。酒吧老板一次出 售这三种物品中的任意两种。当一名音乐爱好者得到这 三种物品并听完一首乐曲后,酒吧老板才能再一次出售 这三种物品中的任意两种,于是第2名音乐爱好者得到这 三种物品,并开始听乐曲。全部买卖就这样进行下去。 试用信号量实现它们之间的同步关系。
2.begin 3.begin
p(s2); p(s3);
p(s3) ; p(s4) ;
吃饭 ; 吃饭;
v(s2); v(s3) ;
v(s3); v(s4);
end
end
4.begin 5.begin
p(s4);
p(s5);
p(s5) ; p(s1);
吃饭; 吃饭;
v(s4); v(s1);
v(s5); v(s5);
进程管理wenku.baidu.com
eat(); signal(chopstick[(i+1)%5]); //释放右手边的筷子 signal(chopstick[i]); //释放左手边的筷子 signal(mutex); //释放信号量mutex
until false
}
进程管理
原理:规定奇数号的哲学家先拿起他左边的筷子,然后再去拿 他右边的筷子;而偶数号的哲学家则相反.按此规定,将是1,2 号哲学家竞争1号筷子,3,4号哲学家竞争3号筷子.即五个哲学 家都竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会 有一个哲学家能获得两支筷子而进餐。而申请不到的哲学家 进入阻塞等待队列,根FIFO原则,则先申请的哲学家会较先 可以吃饭,因此不会出现饿死的哲学家。
进程管理
解答:可以用两个信号量s1、s2,分别表示可以开
门和可以开车,其初始值都为0,用PV操作实现为:
司机:
售票员:
L0:正常行车
L1:售票
到站停车
P(S1)
V(S1)
开车门
P(S2)
关车门
启动开车
V(S2)
goto L0
goto L1
进程管理
和尚挑水问题:寺庙里有多个小、老和尚,一水缸。 小和尚取水,老和尚饮水。水缸容积10桶水,水取自 同一水井,水井每次只容一个桶取水,桶总数3个,每 次入、取水缸水仅为一桶。试用P、V操作描述和尚取 水、饮水的互斥与同步过程。
进程管理
进程同步习题
1. 一条小河上有一座独木桥,规定每次只允许一 人过桥。如果把每个过桥这看作一个进程,为 保证安全,请用信号量操作实现正确管理。
进程管理
进程同步习题
begin s:semaphore; s:=1;
cobegin begin wait(s); 过桥; signal(s); end
进程管理
题解:盘子是三个人的公有信号量,设为mutex,初值为1, 服务员的私有信号量设为empty初值为1,男顾客的私有 信号量为ba,初值为0,女顾客的私有信号量为cm,初值 为0。
waiter :begin
L1: p(empty);
p(mutex); 放香蕉或草 莓;
v(mutex); 如果放香蕉 则v(ba); 否则v(cm); goto L1;
end
end
进程管理
Pi: Repeat Think for while p(mutex); p(s[i]); p(s[(i+1)mod5]); v(mutex); eat for while; v(s[i]) v(s[(i+1)mod 5]); until false
进程管理
利用AND 型信号量机制实现 :
进程管理
取水:begin p(full) p(count) p(mutex2) 从水缸取水 v(mutex2) v(count) v(empty)
end
进程管理
哲学家进餐问题
设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子。 但是,桌子上总共只有5支筷子,在每人两边分开各放一支。哲学家 们在肚子饥饿时才试图分两次从两边拾起筷子就餐。 条件: (1) 只有拿到两支筷子时,哲学家才能吃饭。 (2) 如果筷子已在他人手上,则该哲学家必须等待到他人吃完之后才 能拿到筷子。 (3) 任一哲学家在自己未拿到两支筷子吃饭之前,决不放下自己手中 的筷子。 试:
公用信箱:oslily07@163.com 密码:os2007
进程管理
进程同步习题
设有n个进程共享一个程序段,对如下两种情况: (1)如果每次只允许一个进程进入该程序段; (2)如果每次最多允许m个进程(M<=n)同时进入 该程序段。 试问:所采用的信号量初值是否相同?信号量值的变 化范围如何? 所采用信号量的初值不相同。 在情况(1)中,信号量的初值为1, 信号量值的变化范围是l,0,-1…-(n-1)。 在情况(2)中,信号量的初值为M, 信号量值的变化范围是M,m-1,m-2…(m-n)。
Parbegin Father:begin L1: p(empty);
p(mutex); 放苹果; v(mutex); v(apple); goto l1; end;
Mather:begin L2:p(empty);
p(mutex); 放橘子; v(mutex); v(orange); goto l2; end;
Daughter:begin L3:p(apple);
p(mutex); 取苹果; v(mutex); v(empty); goto l3; end;
进程管理
L4:p(orange); p(mutex); 取橘子; v(mutex); v(empty); Goto l4; end;
进程管理
• 桌上有一个空的水果盘,盘中一次只能放一个 水果,服务员、男顾客和女顾客共用这个盘子。 服务员向盘中放草莓和香蕉,男顾客专等吃盘 中的草莓,女顾客专等吃盘中的香蕉。规定每 次当盘子空时只能放一个水果供顾客食用。请 用信号量机制实现服务员、男顾客和女顾客三 个进程的同步。
进程管理
(1) 描述一个保证不会出现两个邻座同时要求吃饭的通信算法。 (2) 描述一个既没有两邻座同时吃饭,又没有人饿死(永远拿不到 筷子)的算法。 (3) 在什么情况下,5 个哲学家全部吃不上饭?
进程管理
1.begin P(s1) ; P(s2) ; 吃饭 ; V(s1) ; V(s2) ;
End
mutex1=mutex2=1; 分别代表水井和 水缸 empty=10; 水缸的入水量 full=0; 水缸的取水量 count=3;水桶个数
进程管理
打水:begin p(empty) p(count) p(mutex1) 从水井打水; v(mutex1) p(mutex2) 往缸中放水 v(mutex2) v(full) v(count) end
进程管理
(经典理发师问题)
❖ 假设后街有家理发店,店里有一个理发师、一把理发 椅和n把等候理发的顾客椅子。 (1).如果没有顾客则理发师便在理发椅上看报纸; (2).当有一个顾客到达时,首先查看理发师在干什 么,如果在看报纸则告诉理发师理发,然后坐到理发 椅上开始理发;如果理发师正在理发,则查看是否有 空的椅子可坐,如果有,他就坐下等待,如果没有, 则离开; (3).理发师为一位顾客理完发后,查看是否有人等 待,如有则唤醒一位为其理发,如没有则在理发椅上 看报纸; (4).顾客不分优先级
Coend end
进程管理
南京大学2000年试题 ❖ 桌子上有一只盘子,最多可容纳两个水果,每
次只能放入或取出一个水果。爸爸专向盘子中 放苹果,妈妈专向盘子中放橘子,两个儿子专 等吃盘子中的橘子,两个女儿专等吃盘子中的 苹果。请用信号量操作来实现爸爸、妈妈、儿 子、女儿之间的同步与互斥关系。
进程管理
进程管理
semaphore chopstick[5]={1,1,1,1,1}; void philosopher(int i) { while(true) { think(); if(i%2 == 0) //偶数哲学家,先右后左。 { wait (chopstick[ i + 1 ] mod 5) ; wait (chopstick[ i]) ; eat(); signal (chopstick[ i + 1 ] mod 5) ; signal (chopstick[ i]) ; } Else //奇数哲学家,先左后右。 { wait (chopstick[ i]) ; wait (chopstick[ i + 1 ] mod 5) ; eat(); signal (chopstick[ i]) ; signal (chopstick[ i + 1 ] mod 5) ; } }
限制人数 semaphore chopstick[5]={1,1,1,1,1};
semaphore mutex=4;
{
Repeat
think(); wait(mutex); //请求进餐 wait(chopstick[i]); //请求左手边的筷子 wait(chopstick[(i+1)%5]); //请求右手边的筷子
end;
Woman:begin L3: p(cm);
p(mutex); 取草莓;
v(mutex); v(empty); goto L2; end;
Man:begin L2: p(ba);
p(mutex); 取香蕉;
v(mutex); v(empty); goto L2; end;
进程管理
汽车司机与售票员之间必须协同工作,一方面只有售 票员把车门关好了司机才能开车,因此,售票员关好 车门应通知司机开车。另一方面,只有当汽车已经停 下,售票员才能开门上下客,故司机停车后应通知售 票员,汽车当前正在始发站停车上客,试设必要的信 号灯及赋初值,写出他们的同步过程。
进程管理
❖ 有一间酒吧里有3个音乐爱好者队列,第一队的音乐爱好 者只有随身听,第二队的音乐爱好者只有音乐磁带,第 三队的音乐爱好者只有电池。然而,要听音乐就必须随 身听、音乐磁带和电池三种物品俱全。酒吧老板一次出 售这三种物品中的任意两种。当一名音乐爱好者得到这 三种物品并听完一首乐曲后,酒吧老板才能再一次出售 这三种物品中的任意两种,于是第2名音乐爱好者得到这 三种物品,并开始听乐曲。全部买卖就这样进行下去。 试用信号量实现它们之间的同步关系。
2.begin 3.begin
p(s2); p(s3);
p(s3) ; p(s4) ;
吃饭 ; 吃饭;
v(s2); v(s3) ;
v(s3); v(s4);
end
end
4.begin 5.begin
p(s4);
p(s5);
p(s5) ; p(s1);
吃饭; 吃饭;
v(s4); v(s1);
v(s5); v(s5);
进程管理wenku.baidu.com
eat(); signal(chopstick[(i+1)%5]); //释放右手边的筷子 signal(chopstick[i]); //释放左手边的筷子 signal(mutex); //释放信号量mutex
until false
}
进程管理
原理:规定奇数号的哲学家先拿起他左边的筷子,然后再去拿 他右边的筷子;而偶数号的哲学家则相反.按此规定,将是1,2 号哲学家竞争1号筷子,3,4号哲学家竞争3号筷子.即五个哲学 家都竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会 有一个哲学家能获得两支筷子而进餐。而申请不到的哲学家 进入阻塞等待队列,根FIFO原则,则先申请的哲学家会较先 可以吃饭,因此不会出现饿死的哲学家。
进程管理
解答:可以用两个信号量s1、s2,分别表示可以开
门和可以开车,其初始值都为0,用PV操作实现为:
司机:
售票员:
L0:正常行车
L1:售票
到站停车
P(S1)
V(S1)
开车门
P(S2)
关车门
启动开车
V(S2)
goto L0
goto L1
进程管理
和尚挑水问题:寺庙里有多个小、老和尚,一水缸。 小和尚取水,老和尚饮水。水缸容积10桶水,水取自 同一水井,水井每次只容一个桶取水,桶总数3个,每 次入、取水缸水仅为一桶。试用P、V操作描述和尚取 水、饮水的互斥与同步过程。
进程管理
进程同步习题
1. 一条小河上有一座独木桥,规定每次只允许一 人过桥。如果把每个过桥这看作一个进程,为 保证安全,请用信号量操作实现正确管理。
进程管理
进程同步习题
begin s:semaphore; s:=1;
cobegin begin wait(s); 过桥; signal(s); end
进程管理
题解:盘子是三个人的公有信号量,设为mutex,初值为1, 服务员的私有信号量设为empty初值为1,男顾客的私有 信号量为ba,初值为0,女顾客的私有信号量为cm,初值 为0。
waiter :begin
L1: p(empty);
p(mutex); 放香蕉或草 莓;
v(mutex); 如果放香蕉 则v(ba); 否则v(cm); goto L1;
end
end
进程管理
Pi: Repeat Think for while p(mutex); p(s[i]); p(s[(i+1)mod5]); v(mutex); eat for while; v(s[i]) v(s[(i+1)mod 5]); until false
进程管理
利用AND 型信号量机制实现 :