信号量题目(1)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2015/12/22
第一章 绪论
2
Var mutex:semaphore:= 1; process 2: begin begin parbegin repeat process 1: wait(mutex); begin critical section repeat signal(mutex); wait(mutex); remainder section critical section until false; signal(mutex); end remainder seetion parend until false; 3 第一章 绪论 end 2015/12/22
2015/12/22
第一章 绪论
16
分析
CP、IOP必须遵守以下同步规则: 当CP进程把计算结果送入缓冲区后,IO P进程才能从缓冲区中取出结果去打印; 当 IOP 进程把缓冲区中的数据取出打印 后,CP进程才能把下一个计算结果送入 缓冲区
2015/12/22 第一章 绪论 17
解:设有两个信号量 Sa=0 , Sb=1 ,Sa表示缓冲 区中数据数,Sb表示缓冲区中空位置数。 两个进程的同步可以描述如下:
司机进程: while(1) { P(S1) 启动车辆
正常驾驶
售票 员 进程 : while(1) { 关门 V(S1)
售票
到站停车 V(S2) }…
2015/12/22
}…
Baidu Nhomakorabea
P(S2) 开门
12
第一章 绪论
【题4】吃水果问题
桌上有一空盘,最多允许存放一只水果。爸 爸可向盘中放一个苹果或放一个桔子,儿子 专等吃盘中的桔子,女儿专等吃苹果。 试用P、V操作实现爸爸、儿子、女儿三个并 发进程的同步。 提示:设置一个信号量表示可否向盘中放水果, 一个信号量表示可否取桔子,一个信号量表 示可否取苹果。
2015/12/22 第一章 绪论
6
【题1】
如图,试用信号量实现这三个进 程的同步。
2015/12/22
第一章 绪论
7
解
设有两个信号量S1、S2,初值均为0 P1: P2: P3: … … P(S1) V(S1); V(S2); P(S2) …
2015/12/22
第一章 绪论
8
【题2】
如图,试用信号量实现这6个 进程的同步
(2)实现前趋关系
控制合作进程的执行次序 若干个进程为了完成一个共同任务而并发执行,有些进程之 间有次序的要求,有些进程之间没有次序的要求 前趋图来表示进程集合的执行次序。
2015/12/22
第一章 绪论
4
(2)实现前趋关系
2015/12/22
第一章 绪论
5
例
如图,试用信号量实现这三个进 程的同步。 设有两个信号量 S B 、SC,初值均 为0 Pa: Pb: Pc: … P(SB); P(SC) V(SB); … … V(SC);
} }
Son() { while(1) { p(So) 取桔子 v(S); 吃桔子; } }
Daughter() { while(1) { p(Sa) 取苹果 v(S); 吃苹果; } }
2015/12/22
第一章 绪论
15
【题5】共享缓冲区进程的同步
设某计算进程CP和打印进程IOP共用一个单缓 冲区,CP进程负责不断地计算数据并送入缓冲 区T中,IOP进程负责不断地从缓冲区bufT中 取出数据去打印。
第一章 绪论 22
}
2015/12/22
2015/12/22
第一章 绪论
10
【题3】P.V操作解决司机与售票员问题
司机进程: while(1) { 启动车辆 正常驾驶 到站停车 }… }… 售票 员 进程 : while(1) { 关门 售票 开门 要求:
先关门再 启动车辆
先停车再 开门
2015/12/22
第一章 绪论
11
解 设有两个信号量S1,S2,初值均为0。
2015/12/22
第一章 绪论
9
解
设有5个信号量S2、S3、S4、S5、S6,初值均为0 P1: P2: P3: P4: P5: P6: … P(S2); P(S3) P(S4); P(S5); P(S6); V(S2); … … … P(S5); P(S6); V(S3); … … V(S4); V(S6); V(S5) V(S5); V(S6);
2015/12/22 第一章 绪论 13
解
设置三个信号量S,So,Sa ,初值分别 为1,0,0。分别表示可否向盘中放水果, 可否取桔子,可否取苹果。
2015/12/22
第一章 绪论
14
Father() { while(1) { p(S);
将水果放入盘中;
if(是桔子)v(So); else v(Sa);
资源:
A进程:{ while(1){
P(empty); P(basket); 走到煤库 P(mutex1); 进入煤库取一筐煤; V(mutex1); 走到煤斗; P(mutex2); 向煤斗倒煤; V(mutex2); V(basket); V(full); }
B进程:{ while(){ P(full); P(basket); 走到煤斗; P(mutex2); 从煤斗取一筐煤; V(mutex2); 倒一筐煤到锅炉; V(basket); V(empty); } }
2015/12/22 第一章 绪论 20
甲:煤库————筐————煤斗 乙:煤斗————筐————(锅炉) 临界资源:对煤库、煤斗的操作互斥进行
设互斥信号量mutex1=1,mutex2=1
筐:basket=10 煤斗空:empty=100 煤斗满:full=0
2015/12/22 第一章 绪论 21
(1)实现进程互斥
用信号量实现临界区互斥 设置一信号量,信号量初值为1, 进入临界区以前对信号量执行P操作, 退出临界区后对信号量执行V操作.
2015/12/22
第一章 绪论
1
解决进程间互斥问题
P(mutex)
P(mutex)
P(mutex) V(mutex) V(mutex)
V(mutex)
2015/12/22
第一章 绪论
18
【题6】用P.V操作解决下图之同步问题 get copy put
提示:分别考虑对缓冲区S和T的同步,再合并考虑
2015/12/22 第一章 绪论 19
【题7】
假设在一个送煤车间,有甲乙两工种的工人若干。 甲种工人每次用筐从车间外的一个煤库取一筐煤运到 车间的一个煤斗里, 乙种工人每次用筐从煤斗中取一筐煤送到锅炉里。 煤斗最初是空的,最多可以存储100筐煤,筐子共有 10只。 假设煤库每次只允许一人进入取煤,煤斗每次只允许 一人操作(即不能同时取煤或放煤),请用信号量描 述甲乙两种工人的活动。