Skip to content

Commit 3ca5cea

Browse files
committed
Lecture 11&12 for OS2023autumn
1 parent 2484949 commit 3ca5cea

File tree

3 files changed

+153
-185
lines changed

3 files changed

+153
-185
lines changed

lec12/p1-syncmutex.md

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ backgroundColor: white
100100
- 去买面包之前锁住冰箱并且拿走钥匙
101101
- 加锁导致的新问题
102102
- 冰箱中还有其他食品时,别人无法取到
103-
![bg right:30% 100%](figs/icebox.png)
103+
![bg right:30% 95%](figs/icebox.png)
104104

105105

106106
---
@@ -160,6 +160,7 @@ remove note;
160160
- 为便签增加标记,以区别不同人的便签
161161
- 现在可在检查之前留便签
162162
```
163+
// 进程A
163164
leave note_2;
164165
if (no note_1) {
165166
if (no bread) {
@@ -177,6 +178,7 @@ remove note_2;
177178
- 为便签增加标记,以区别不同人的便签
178179
- 现在可在检查之前留便签
179180
```
181+
// 进程B
180182
leave note_1;
181183
if (no note_2) {
182184
if (no bread) {
@@ -192,24 +194,19 @@ remove note_1;
192194
##### 方案三
193195
- 为便签增加标记,以区别不同人的便签
194196
- 现在可在检查之前留便签
195-
196-
- 会发生什么?
197+
- 会发生什么?
197198
- 可能导致没有人去买面包
198199
- 每个人都认为另外一个去买面包
199-
200200

201201
![bg right:50% 100%](figs/method-3.png)
202202

203-
204-
205203
---
206204

207205
##### 方案四
208206
两个人采用不同的处理流程
209207

210208
![w:1000](figs/method-4.png)
211209

212-
213210
---
214211

215212
##### 方案四
@@ -223,7 +220,6 @@ remove note_1;
223220

224221
![bg right:50% 100%](figs/method-4.png)
225222

226-
227223
---
228224

229225
##### 方案五
@@ -281,7 +277,6 @@ exit section
281277
- 临界区(critical section)
282278
- 线程中访问临界资源的一段需要互斥执行的代码
283279

284-
285280
---
286281

287282
##### 临界区(Critical Section)
@@ -306,11 +301,10 @@ entry section
306301
exit section
307302
remainder section
308303
```
309-
- 1 空闲则入:没有线程在临界区时,任何线程可进入
310-
- 2 忙则等待:有线程在临界区时,其他线程均**不能**进入临界区
311-
- 3 有限等待:等待进入临界区的线程**不能**无限期等待
312-
- 4 让权等待(可选):不能进入临界区的线程,应释放CPU(如转换到阻塞状态)
313-
304+
1. 空闲则入:没有线程在临界区时,任何线程可进入
305+
2. 忙则等待:有线程在临界区时,其他线程均**不能**进入临界区
306+
3. 有限等待:等待进入临界区的线程**不能**无限期等待
307+
4. 让权等待(可选):不能进入临界区的线程,应释放CPU(如转换到阻塞状态)
314308

315309
---
316310

@@ -643,8 +637,8 @@ flag[i] = IDLE;//结束,自己变idle
643637
<div class="col">
644638

645639
4.1 禁用硬件中断
646-
#### 4.2 基于软件的解决方法
647-
4.3 更高级的抽象方法
640+
4.2 基于软件的解决方法
641+
#### 4.3 更高级的抽象方法
648642

649643
</div>
650644

lec12/p2-semaphore.md

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,37 +61,34 @@ backgroundColor: white
6161

6262
---
6363

64-
### 信号量(semaphore)
65-
信号量在概念上的实现
64+
### 信号量在概念上的实现
6665
![w:1200](figs/semaphore-impl.png)
6766

6867

6968
---
7069

71-
### 信号量(semaphore)
72-
可分为两类信号量
73-
- 二进制信号量:资源数目为0或1
74-
- 计数信号量:资源数目为任何非负值
75-
- 两者等价:基于一个可以实现另一个
70+
### 信号量的分类和使用
7671

77-
信号量的使用
78-
- **互斥访问****条件同步**
79-
80-
![bg right:40% 100%](figs/sema-train.png)
72+
* 信号量的分类
73+
- 二进制信号量:资源数目为0或1
74+
- 计数信号量:资源数目为任何非负值
75+
<!-- - 两者等价:基于一个可以实现另一个 -->
76+
* 信号量的使用
77+
- **互斥访问**
78+
- **条件同步**
8179

80+
![bg right:35% 95%](figs/sema-train.png)
8281

8382
---
8483

8584
### 互斥访问举例
86-
- 每个临界区设置一个信号量,其初值为1
87-
- 需成对使用P()操作和V()操作
85+
- 每个临界区设置一个初值为1的信号量
86+
- **成对**使用P()操作和V()操作
8887
- P()操作保证互斥访问资源
8988
- V()操作在使用后释放资源
9089
- PV操作次序不能错误、重复或遗漏
9190

9291
![bg right:50% 100%](figs/semaphore-use-1.png)
93-
94-
9592

9693
---
9794

@@ -128,8 +125,8 @@ backgroundColor: white
128125

129126
### 生产者-消费者问题
130127

128+
![w:900px](figs/semaphore-use-4.png)
131129
P、V操作的顺序有影响吗?
132-
![w:1000](figs/semaphore-use-4.png)
133130

134131
---
135132

0 commit comments

Comments
 (0)