没有合适的资源?快使用搜索试试~ 我知道了~
考研408:操作系统PV强化笔记
试读
39页
需积分: 0 0 下载量 51 浏览量
更新于2024-10-17
收藏 16.73MB PDF 举报
操作系统PV强化笔记(自用整理)
PVPV操作答题基础操作答题基础
题型分类题型分类
1. 生产者消费者问题——进程间关系为“生产资源-消费资源”
2. 理发师问题——进程间关系为“服务-被服务”
3. 读者写者问题——同类进程不互斥、异类进程互斥
4. 哲学家进餐问题——只有一类进程,每个进程需要同 时拥有多种资源才能运⾏,需要解决死锁
(2019)
5. 单纯的同步问题——前驱后继图
题型题型11:⽣产者消费者:⽣产者消费者
H2H2 解题六步骤解题六步骤
⽣产者消费者问题( 特点:进程与进程之间是“⽣产资源⼀消耗资源”的关系) 六步骤: (打草稿)
1. 有几类进程——每类进程对应一个函数每类进程对应一个函数
2. 在每个进程内部,用中文描述进程动作[只做一次,不加while;重复操作,加while(1)]
3. 分析每一动作之前,需要P什么?【注意隐含的互斥,例如,缓冲区访问需要加P(mutex)】只要有
P,必有V,每写一个P,就要安排一个V
4. 所有PV写完后 , 再去定义信号量,
定义完再思考每个信号量的初值是多少
5. 检查多个P连续出现的地⽅, 是否可能生死锁?
尝试调整P顺序,若某信号量P,V操作总连续出现,中间没有其他P[破坏其他P],则信号量不可能
因此产生死锁
6. 读题检查,是否满足题目要求
H2H2 例题⼀:配件装配例题⼀:配件装配
某工厂有两个生产车间和一个装配车间,两个生产车间分别生产A、B两种零件,装配车间的任务是把
A、B两种零件组装成产品。两个生产车间每生产一个零件后,都要分别把它们送到装配车间的货架
F1、F2上。F1存放零件A,F2存放零件B,F1和F2的容量均可存放10个零件。装配工人每次从货架上
取一个零件A和一个零件B后组装成产品。请用P、V操作进⾏正确管理
H2H2 思路整理思路整理
1. 几类进程——一类进程对应一类函数
2. 每个进程的动作——一次动作,多次动作
3. 安排P,再安排V【成对出现】
4. 定义信号量
5. 多P连续->死锁问题?解决方法:调整顺序
6. 检查
中文演算过程
⽣产⻋间A(){
while(){
produce A !"重复动作
P(F1有空位)
P(F1_flag)
put A to F1 !"访问缓冲区需要互斥
V(F1_flag)
V(A零件) !"组装⻋间只能从货架上拿,所以在put之后释放
1
2
3
4
5
6
7
8
9
10
11
12
13
}
}
⽣产⻋间B(){
while(){
produce B !"重复动作
P(F2有空位)
P(F2_flag)
put B to F2 !"访问缓冲区需要互斥
V(F2_flag)
V(B零件)
}
}
装配⻋间(){
while(1){
P(A零件)
P(F1_flag)
从F1上取A
V(F1_flag)
V(F1的空位)
P(B零件)
P(F2_flag)
从F2上取B
V(F2_flag)
V(F2的空位)
组装产品
}
}
!" 同步信号量
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
注意:多个P操作可能导致死锁,解决方法,同步信号同步信号量量放在互斥信号放在互斥信号量量之前(互斥信号之前(互斥信号量量锁粒度锁粒度
取小,尽取小,尽量量放在最放在最⾥⾥面)面)
H2H2 例题⼆:⽣产者、消费者例题⼆:⽣产者、消费者
系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为
空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费者
进程可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出10 件产品后,其
他消费者进程才可以取产品。请使用信号量P,V(或 wait(),signal())操作实现进程间的互斥与同
步,要求写出完整的过程,并说明所用信号量的含义和初始值。
Semaphore F1_empty =10 !"货架空位数信号量
Semaphore F1_empty =10
Semaphore F1_existA=0 !"货架上已⽣产配件数量信号量
Semaphore F2_existB=0
!"互斥信号量
Semaphore F1_flag=1 !"货架的互斥访问信号量
Semaphore F2_flag=1
58
59
60
61
62
63
64
65
⽣产者(){1
while(){
⽣产产品
P(缓冲区空位) !"同步信号量
P(m_buffer) !"互斥信号量 互斥访问访问缓冲区
产品放⼊缓冲区
V(m_buffer)
V(产品)
}
}
消费者(){
while(){
P(Mutex) !"原⼦性操作
for(int i=0;i<10;i!#){
P(产品)
P(m_buffer) !"互斥信号量 互斥访问访问缓冲区
从缓冲区取产品
P(m_buffer)
V(缓冲区空位)
}
V(Mutex)
}
}
!" 同步信号量
Semaphore 缓冲区空位=1000
Semaphore Mutex=1
Semaphore 产品=0
!"互斥信号量
Semaphore m_buffer=1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
剩余38页未读,继续阅读
资源推荐
资源评论
193 浏览量
2023-04-10 上传
5星 · 资源好评率100%
132 浏览量
5星 · 资源好评率100%
177 浏览量
5星 · 资源好评率100%
106 浏览量
5星 · 资源好评率100%
5星 · 资源好评率100%
104 浏览量
5星 · 资源好评率100%
152 浏览量
2018-07-14 上传
2009-03-20 上传
190 浏览量
110 浏览量
2019-07-09 上传
2024-01-04 上传
130 浏览量
2019-04-09 上传
140 浏览量
117 浏览量
2024-01-04 上传
2024-01-04 上传
5星 · 资源好评率100%
108 浏览量
2010-04-25 上传
2011-04-02 上传
资源评论
缘友一世
- 粉丝: 3148
- 资源: 28
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【全年行事历】团建活动计划表.xlsx
- 【全年行事历】团建行程安排表-xx山.xlsx
- 【全年行事历】团建活动策划方案.docx
- 【全年行事历】团建开销费用分析.xlsx
- 【全年行事历】团建活动物料清单.xlsx
- 【全年行事历】团建文化衫尺码统计表.xlsx
- 【全年行事历】团建医药箱常备药清单.docx
- 【全年行事历】小型公司活动全年活动行事历.xlsx
- 【全年行事历】员工野外拓展活动方案.docx
- 四足机器人机械结构设计PDF
- 06-公司团建活动申请表.docx
- 03-团建活动策划方案.docx
- 07-团建活动采购预算清单.xlsx
- 08-团建日程计划表.xlsx
- 09-财务公司月度团建支出表.xlsx
- T-SQL查询高级SQLServer索引中的碎片和填充因子word文档doc格式最新版本
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功