SlideShare une entreprise Scribd logo
1  sur  142
Télécharger pour lire hors ligne
作業系統基本觀念複習 Process & Thread 
Yiling Lai 
2011/8/24 
1
•恐龍書 
Operating System Concepts 
Silberschatz, Galvin, Gagne 
2
什麼是Process? 
•A program in execution. 執行中的程式 
3
什麼是Process? 
•A program in execution. 執行中的程式 
3
什麼是Process? 
•A program in execution. 執行中的程式 
3
什麼是Process? 
•A program in execution. 執行中的程式 
3 
Text Section 
Data Section 
Heap 
Stack 
Program counter
什麼是Process? 
•A program in execution. 執行中的程式 
3 
Text Section 
Data Section 
Heap 
Stack 
Program counter 
Registers
Process的一生 (STD) 
New 
4 
Job Queue
Process的一生 (STD) 
New 
Ready 
Load到memory裡, 準備搶CPU控制權 
4 
Ready Queue 
Job Queue
Process的一生 (STD) 
New 
Ready 
Load到memory裡, 準備搶CPU控制權 
4 
Ready Queue 
PCB 
Process ID Process State PC CPU Registers …. 
Job Queue
Process的一生 (STD) 
New 
Ready 
Running 
Load到memory裡, 準備搶CPU控制權 
搶到CPU了 
4 
Ready Queue 
PCB 
Process ID Process State PC CPU Registers …. 
Job Queue
Process的一生 (STD) 
New 
Ready 
Running 
Wait 
(Block) 
Wait for I/O complete or resources available 
Load到memory裡, 準備搶CPU控制權 
搶到CPU了 
4 
Ready Queue 
PCB 
Process ID Process State PC CPU Registers …. 
Job Queue
Process的一生 (STD) 
New 
Ready 
Running 
Wait 
(Block) 
Wait for I/O complete or resources available 
Load到memory裡, 準備搶CPU控制權 
CPU被搶走了 
搶到CPU了 
4 
Ready Queue 
PCB 
Process ID 
Process State 
PC 
CPU Registers 
…. 
Job Queue
Process的一生 (STD) 
New 
Ready 
Running 
Terminate 
Wait 
(Block) 
Wait for I/O complete or resources available 
Load到memory裡, 準備搶CPU控制權 
CPU被搶走了 
搶到CPU了 
4 
Ready Queue 
PCB 
Process ID 
Process State 
PC 
CPU Registers 
…. 
Job Queue
Process的一生 (STD) 
New 
Ready 
Running 
Terminate 
Wait 
(Block) 
Wait for I/O complete or resources available 
Load到memory裡, 準備搶CPU控制權 
CPU被搶走了 
搶到CPU了 
4 
Ready Queue 
PCB 
Process ID 
Process State 
PC 
CPU Registers 
…. 
Job Queue
Process的一生 (STD) 
New 
Ready 
Running 
Terminate 
Wait (Block) 
Wait for I/O complete or resources available 
Load到memory裡, 準備搶CPU控制權 
CPU被搶走了 
我等著你回來~~ (好無聊啊!!) 
搶到CPU了 
4 
Ready Queue 
PCB 
Process ID 
Process State 
PC 
CPU Registers 
…. 
Job Queue
多找幾個行程來填 補我的空虛與寂寞!! 
(Concurrent Processing) 
5
多找幾個行程來填 補我的空虛與寂寞!! 
(Concurrent Processing) 
你這個詐騙集 團!! 我才是真的 平行化好嘛! 
5
Parallel Processing 
多找幾個行程來填 補我的空虛與寂寞!! 
(Concurrent Processing) 
你這個詐騙集 團!! 我才是真的 平行化好嘛! 
P0 
P1 
P2 
5
Parallel Processing 
Concurrnt Processing 
P0 
P1 
P2 
多找幾個行程來填 補我的空虛與寂寞!! 
(Concurrent Processing) 
你這個詐騙集 團!! 我才是真的 平行化好嘛! 
P0 
P1 
P2 
5
Parallel Processing 
Concurrnt Processing 
P0 
P1 
P2 
大家輪流使用CPU,但是怎麼輪?? 
多找幾個行程來填 補我的空虛與寂寞!! (Concurrent Processing) 
你這個詐騙集 團!! 我才是真的 平行化好嘛! 
P0 
P1 
P2 
5
6
6
6
我就知道沒有 我果然不行, 交給我吧!! 
6
7
1.CPU的使用率(Utilization)要最大 
2.工作產能(Throughput)要高 
3.Process等待的時間要短 
4.完成時間(Turnaround time)要短 
5.資源利用率也要大 
6.要公平 
7.… 
7
1.CPU的使用率(Utilization)要最大 
2.工作產能(Throughput)要高 
3.Process等待的時間要短 
4.完成時間(Turnaround time)要短 
5.資源利用率也要大 
6.要公平 
7.… 
•FIFO: First come first out 
•SJF: Shortest Job First 
•SRJF: Shortest Remaining Time Job First 
•Priority Scheduling 
•RR: Round Robin 
•….. 
7
1.CPU的使用率(Utilization)要最大 
2.工作產能(Throughput)要高 
3.Process等待的時間要短 
4.完成時間(Turnaround time)要短 
5.資源利用率也要大 
6.要公平 
7.… 
•FIFO: First come first out 
•SJF: Shortest Job First 
•SRJF: Shortest Remaining Time Job First 
•Priority Scheduling 
•RR: Round Robin 
•….. 
7 
Scheduling Algorithm
FIFO: 誰先來誰先做 
SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ 
(SJF: shortest time job first) 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
1.CPU的使用率要最大 
2.工作產能要高 
3.Process等待的時間要短 
4.完成時間要短 
5.資源利用率也要大 
6.要公平 
FIFO: 
SJF: 
8
FIFO: 誰先來誰先做 
SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ 
(SJF: shortest time job first) 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P0 
1.CPU的使用率要最大 
2.工作產能要高 
3.Process等待的時間要短 
4.完成時間要短 
5.資源利用率也要大 
6.要公平 
FIFO: 
SJF: 
8
FIFO: 誰先來誰先做 
SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ 
(SJF: shortest time job first) 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P1 
P0 
1.CPU的使用率要最大 
2.工作產能要高 
3.Process等待的時間要短 
4.完成時間要短 
5.資源利用率也要大 
6.要公平 
FIFO: 
SJF: 
8
FIFO: 誰先來誰先做 
SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ 
(SJF: shortest time job first) 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P2 
P1 
P0 
1.CPU的使用率要最大 
2.工作產能要高 
3.Process等待的時間要短 
4.完成時間要短 
5.資源利用率也要大 
6.要公平 
FIFO: 
SJF: 
8
FIFO: 誰先來誰先做 
SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ 
(SJF: shortest time job first) 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
平均等待時間 = (0+ 14+19)/3 = 11 
P2 
P1 
P0 
2 
5 
14 
1.CPU的使用率要最大 
2.工作產能要高 
3.Process等待的時間要短 
4.完成時間要短 
5.資源利用率也要大 
6.要公平 
FIFO: 
SJF: 
8
FIFO: 誰先來誰先做 
SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ 
(SJF: shortest time job first) 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
平均等待時間 = (0+ 14+19)/3 = 11 
P2 
P1 
P0 
2 
5 
14 
1.CPU的使用率要最大 
2.工作產能要高 
3.Process等待的時間要短 
4.完成時間要短 
5.資源利用率也要大 
6.要公平 
FIFO: 
SJF: 
8
FIFO: 誰先來誰先做 
SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ 
(SJF: shortest time job first) 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
平均等待時間 = (0+ 14+19)/3 = 11 
P2 
P2 
P1 
P0 
2 
5 
14 
1.CPU的使用率要最大 
2.工作產能要高 
3.Process等待的時間要短 
4.完成時間要短 
5.資源利用率也要大 
6.要公平 
FIFO: 
SJF: 
8
FIFO: 誰先來誰先做 
SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ 
(SJF: shortest time job first) 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
平均等待時間 = (0+ 14+19)/3 = 11 
P2 
P1 
P2 
P1 
P0 
2 
5 
14 
1.CPU的使用率要最大 
2.工作產能要高 
3.Process等待的時間要短 
4.完成時間要短 
5.資源利用率也要大 
6.要公平 
FIFO: 
SJF: 
8
FIFO: 誰先來誰先做 
SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ 
(SJF: shortest time job first) 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
平均等待時間 = (0+ 14+19)/3 = 11 
P2 
P1 
P0 
P2 
P1 
P0 
2 
5 
14 
1.CPU的使用率要最大 
2.工作產能要高 
3.Process等待的時間要短 
4.完成時間要短 
5.資源利用率也要大 
6.要公平 
FIFO: 
SJF: 
8
FIFO: 誰先來誰先做 
SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ 
(SJF: shortest time job first) 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
平均等待時間 = (0+2+7)/3 = 3 
平均等待時間 = (0+ 14+19)/3 = 11 
P2 
P1 
P0 
2 
5 
14 
P2 
P1 
P0 
2 
5 
14 
1.CPU的使用率要最大 
2.工作產能要高 
3.Process等待的時間要短 
4.完成時間要短 
5.資源利用率也要大 
6.要公平 
FIFO: 
SJF: 
8
FIFO: 誰先來誰先做 
SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ 
(SJF: shortest time job first) 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
平均等待時間 = (0+2+7)/3 = 3 
平均等待時間 = (0+ 14+19)/3 = 11 
P2 
P1 
P0 
2 
5 
14 
P2 
P1 
P0 
2 
5 
14 
1.CPU的使用率要最大 
2.工作產能要高 
3.Process等待的時間要短 
4.完成時間要短 
5.資源利用率也要大 
6.要公平 
FIFO: 
SJF: 
8
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P2 
P1 
P0 
9
P2 
P1 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P2 
P1 
P0 
9
P2 
P1 
P3 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P2 
P1 
P0 
9
P3 
P2 
P1 
P2 
P1 
P3 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P2 
P1 
P0 
9
P3 
P2 
P1 
P2 
P1 
P3 
P4 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P2 
P1 
P0 
9
P3 
P2 
P1 
P2 
P1 
P3 
P4 
PN 
…. 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P2 
P1 
P0 
9
P3 
P2 
P1 
P2 
P1 
P3 
P4 
PN 
…. 
P4 
P2 
P1 
…. 
PN 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P2 
P1 
P0 
9
P3 
P2 
P1 
P2 
P1 
P3 
P4 
PN 
…. 
P4 
P2 
P1 
…. 
PN 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P2 
P1 
P0 
喂…那 我咧… 
P0 
9
P3 
P2 
P1 
P2 
P1 
P3 
P4 
PN 
…. 
P4 
P2 
P1 
…. 
PN 
Process 
CPU Time 
P0 
14 
P1 
5 
P2 
2 
P2 
P1 
P0 
喂…那 我咧… 
P0 
Starvation 飢餓:Process因為長 期無法取得完工所需的全部資 源,以致形成indefinite blocking 之現象。 解法:Aging Tech等… 
9
SRJF: Shortest Remaining Time Job First 
•可插隊的。 
Process 
Arrival Time 
CPU Time 
P0 
0 
6 
P1 
1 
4 
P2 
2 
7 
P3 
3 
3 
P0 
T0 
T1 
T2 
T3 
10 
T1 
T2 
T3 
T5 
T20
SRJF: Shortest Remaining Time Job First 
•可插隊的。 
Process 
Arrival Time 
CPU Time 
P0 
0 
6 
P1 
1 
4 
P2 
2 
7 
P3 
3 
3 
P0 
P1 
T0 
T1 
T2 
T3 
10 
T1 
T2 
T3 
T5 
T20
SRJF: Shortest Remaining Time Job First 
•可插隊的。 
Process 
Arrival Time 
CPU Time 
P0 
0 
6 
P1 
1 
4 
P2 
2 
7 
P3 
3 
3 
P0 
P1 
P0 
P1 
T0 
T1 
T2 
T3 
10 
T1 
T2 
T3 
T5 
T20
SRJF: Shortest Remaining Time Job First 
•可插隊的。 
Process 
Arrival Time 
CPU Time 
P0 
0 
6 
P1 
1 
4 
P2 
2 
7 
P3 
3 
3 
P2 
P0 
P1 
P0 
P1 
T0 
T1 
T2 
T3 
10 
T1 
T2 
T3 
T5 
T20
SRJF: Shortest Remaining Time Job First 
•可插隊的。 
Process 
Arrival Time 
CPU Time 
P0 
0 
6 
P1 
1 
4 
P2 
2 
7 
P3 
3 
3 
P2 
P0 
P1 
P0 
P1 
P0 
P1 
T0 
T1 
T2 
T3 
10 
T1 
T2 
T3 
T5 
T20
SRJF: Shortest Remaining Time Job First 
•可插隊的。 
Process 
Arrival Time 
CPU Time 
P0 
0 
6 
P1 
1 
4 
P2 
2 
7 
P3 
3 
3 
P2 
P0 
P1 
P0 
P1 
P0 
P1 
P3 
T0 
T1 
T2 
T3 
10 
T1 
T2 
T3 
T5 
T20
SRJF: Shortest Remaining Time Job First 
•可插隊的。 
Process 
Arrival Time 
CPU Time 
P0 
0 
6 
P1 
1 
4 
P2 
2 
7 
P3 
3 
3 
P2 
P0 
P1 
P0 
P1 
P0 
P1 
P3 
P0 
P1 
T0 
T1 
T2 
T3 
10 
T1 
T2 
T3 
T5 
T20
SRJF: Shortest Remaining Time Job First 
•可插隊的。 
Process 
Arrival Time 
CPU Time 
P0 
0 
6 
P1 
1 
4 
P2 
2 
7 
P3 
3 
3 
P2 
P0 
P1 
P0 
P1 
P0 
P1 
P3 
P0 
P1 
P2 
P0 
P3 
T0 
T1 
T2 
T3 
10 
T1 
T2 
T3 
T5 
T20
SRJF: Shortest Remaining Time Job First 
•可插隊的。 
Process 
Arrival Time 
CPU Time 
P0 
0 
6 
P1 
1 
4 
P2 
2 
7 
P3 
3 
3 
P2 
P0 
P1 
P0 
P1 
P0 
P1 
P3 
P0 
P1 
P2 
P0 
P3 
P0 
P1 
P3 
P0 
P2 
T0 
T1 
T2 
T3 
10 
T1 
T2 
T3 
T5 
T20
New 
Ready 
Running 
Terminate 
Wait (Block) 
Load到memory裡, 準備搶CPU控制權 
CPU被搶走了 
搶到CPU了 
Registers 
11 
PCB 
Process ID ReProcess State PC CPU gisters ….
New 
Ready 
Running 
Terminate 
Wait (Block) 
Load到memory裡, 準備搶CPU控制權 
CPU被搶走了 
搶到CPU了 
Registers 
11 
PCB 
Process ID 
ReProcess State 
PC 
CPU gisters 
….
New 
Ready 
Running 
Terminate 
Wait (Block) 
Load到memory裡, 準備搶CPU控制權 
CPU被搶走了 
搶到CPU了 
Registers 
11 
PCB 
Process ID ReProcess State PC CPU gisters ….
New 
Ready 
Running 
Terminate 
Wait (Block) 
Load到memory裡, 準備搶CPU控制權 
CPU被搶走了 
搶到CPU了 
Registers 
Context Switching:若CPU將執行中的Process切換 給其他Process使用時,必須保存目前執行中 Process的狀態,並載入欲執行Process的狀態資訊。 
11 
PCB 
Process ID ReProcess State PC CPU gisters ….
問題是搬家是需要成本的… 
P0 
P1 
P2 
12
問題是搬家是需要成本的… 
P0 
P1 
P2 
太多Process並行效 能反而不如預期… 
12
問題是搬家是需要成本的… 
P0 
P1 
P2 
太多Process並行效 能反而不如預期… 
解法1:提供多套Registers 
Registers 
12
問題是搬家是需要成本的… 
P0 
P1 
P2 
太多Process並行效 能反而不如預期… 
解法1:提供多套Registers 
Registers 
12
問題是搬家是需要成本的… 
P0 
P1 
P2 
太多Process並行效 能反而不如預期… 
解法1:提供多套Registers 
Registers 
解法2:改用Thread~ 
Thread: Light weight process. 是 CPU分配資源的最小單位,而同 一個Process內的threads共享 code section, data section, 跟一 些OS資源 
12
問題是搬家是需要成本的… 
P0 
P1 
P2 
太多Process並行效 能反而不如預期… 
解法1:提供多套Registers 
Registers 
解法2:改用Thread~ 
Thread: Light weight process. 是 CPU分配資源的最小單位,而同 一個Process內的threads共享 code section, data section, 跟一 些OS資源 
12
建立Thread也是有成本的 
→ 用空間換取時間~~ 
13
建立Thread也是有成本的 
→ 用空間換取時間~~ 
Thread Pool: 在Process建立之初,預先 建立多條threads置於thread pool中,當 需要使用時,就從thread pool中取出使 用,用完再還給thread pool。 
13
到目前為止… 
14 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮
到目前為止… 
14 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能
到目前為止… 
14 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
排程問 題
到目前為止… 
14 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
排程問 題
到目前為止… 
14 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
排程問 題 
Context Switching
到目前為止… 
14 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
排程問 題 
Context Switching
到目前為止… 
14 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
排程問 題 
Context Switching 
建立 Thread的 成本
到目前為止… 
14 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
Thread Pool 
排程問 題 
Context Switching 
建立 Thread的 成本 
…
到目前為止… 
14 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
Thread Pool 
排程問 題 
Context Switching 
建立 Thread的 成本 
?? 
…
Multi-Processing / Multi-Threading (1) 
15 
•系統的資源通常是有限的 
–CPU週期、記憶體空間、檔案、I/O Device… 
當Process需要資源時…
Multi-Processing / Multi-Threading (1) 
15 
•系統的資源通常是有限的 
–CPU週期、記憶體空間、檔案、I/O Device… 
當Process需要資源時… 
Process提出 Request
Multi-Processing / Multi-Threading (1) 
15 
•系統的資源通常是有限的 
–CPU週期、記憶體空間、檔案、I/O Device… 
當Process需要資源時… 
Process提出 Request 
資源是 否足夠
Multi-Processing / Multi-Threading (1) 
15 
•系統的資源通常是有限的 
–CPU週期、記憶體空間、檔案、I/O Device… 
當Process需要資源時… 
Process提出 Request 
資源是 否足夠 
Yes 
Process使 用資源 
使用完畢, 釋放
Multi-Processing / Multi-Threading (1) 
15 
•系統的資源通常是有限的 
–CPU週期、記憶體空間、檔案、I/O Device… 
當Process需要資源時… 
Process提出 Request 
資源是 否足夠 
Yes 
Process使 用資源 
使用完畢, 釋放 
No 
Process等 待…
Multi-Processing / Multi-Threading (1) 
15 
•系統的資源通常是有限的 
–CPU週期、記憶體空間、檔案、I/O Device… 
當Process需要資源時… 
Process提出 Request 
資源是 否足夠 
Yes 
Process使 用資源 
使用完畢, 釋放 
No 
Process等 待…
16 
New 
Ready 
Running 
Terminate 
Wait 
(Block) 
Wait for I/O complete or resources available
16 
Thread 1 
R1 
used 
New 
Ready 
Running 
Terminate 
Wait 
(Block) 
Wait for I/O complete or resources available
16 
Thread 1 
R1 
used 
Thread 2 
R2 
used 
New 
Ready 
Running 
Terminate 
Wait (Block) 
Wait for I/O complete or resources available
16 
Thread 1 
R1 
used 
Thread 2 
R2 
used 
Wait 
New 
Ready 
Running 
Terminate 
Wait 
(Block) 
Wait for I/O complete or resources available
16 
Thread 1 
R1 
used 
Thread 2 
R2 
used 
Wait 
Wait 
New 
Ready 
Running 
Terminate 
Wait 
(Block) 
Wait for I/O complete or resources available
Deadlock: 系統中存在一組 Processes,彼此形成 circular waiting的情況,使 得Processes皆無法繼續往 下執行,導致CPU利用度 及產能急速下降。 
16 
Thread 1 
R1 
used 
Thread 2 
R2 
used 
Wait 
Wait 
New 
Ready 
Running 
Terminate 
Wait 
(Block) 
Wait for I/O complete or resources available
Deadlock 處理策略 
17 
T1 
R1 
used 
T2 
R2 
used 
Wait 
Wait
Deadlock 處理策略 
17 
•Deadlock形成的必要條件: 
•資源的Mutual Exclusion 
•Hold & Wait 
•No Preemptive 
•Circular waiting 
T1 
R1 
used 
T2 
R2 
used 
Wait 
Wait
Deadlock 處理策略 
•處理策略: 
–Deadlock Prevention 
–Deadlock Avoidance 
–Deadlock Detection & Recovery 
17 
•Deadlock形成的必要條件: 
•資源的Mutual Exclusion 
•Hold & Wait 
•No Preemptive 
•Circular waiting 
T1 
R1 
used 
T2 
R2 
used 
Wait 
Wait
Deadlock 處理策略 
•處理策略: 
–Deadlock Prevention 
–Deadlock Avoidance 
–Deadlock Detection & Recovery 
17 
•Deadlock形成的必要條件: 
•資源的Mutual Exclusion 
•Hold & Wait 
•No Preemptive 
•Circular waiting 
T1 
R1 
used 
T2 
R2 
used 
Wait 
Wait 
預防勝於治療
Deadlock 處理策略 
•處理策略: 
–Deadlock Prevention 
–Deadlock Avoidance 
–Deadlock Detection & Recovery 
17 
•Deadlock形成的必要條件: 
•資源的Mutual Exclusion 
•Hold & Wait 
•No Preemptive 
•Circular waiting 
T1 
R1 
used 
T2 
R2 
used 
Wait 
Wait 
預防勝於治療 
見到棺材才掉淚
Multi-Processing / Multi-Threading (2) 
•Communication 
–Shared Memory 
–Message Passing 
18 
Thread 1 
data 
Thread 2 
Memory / … 
Process 1 
Process 2 
Send Msg 
Process 1 
Process 2
Producer & Consumer 
19
Producer & Consumer 
19 
Bounded buffer Producer/Consumer Problem: 
(1) 當Buffer滿時,則Producer必須等待。 
(2) 當Buffer空時,則Consumer必須等待。
Producer & Consumer 
19 
Bounded buffer Producer/Consumer Problem: 
(1) 當Buffer滿時,則Producer必須等待。 
(2) 當Buffer空時,則Consumer必須等待。 
→ 採用一個共用變數count來記錄buffer裡item 的個數
Producer: 
生產一個item; 
while(count==size) 
do no-op; 
buffer[in] = item; 
in = (in+1) % size; 
count = count+1; 
20 
Consumer: 
while(count==0) 
do no-op; 
item = buffer[out]; 
out = (out+1) mod size; 
count = count-1;
Producer: 
生產一個item; 
while(count==size) 
do no-op; 
buffer[in] = item; 
in = (in+1) % size; 
count = count+1; 
20 
Consumer: 
while(count==0) 
do no-op; 
item = buffer[out]; 
out = (out+1) mod size; 
count = count-1; 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數
Producer: 
生產一個item; 
while(count==size) 
do no-op; 
buffer[in] = item; 
in = (in+1) % size; 
count = count+1; 
20 
Consumer: 
while(count==0) 
do no-op; 
item = buffer[out]; 
out = (out+1) mod size; 
count = count-1; 
Registers 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數
21 
Registers 
Producer (Thread1) count = count+1; 
Register1 = count …(1) 
Register1 = Register1 + 1 …(2) 
count = Register1 …(3) 
Consumer (Thread2) count = count-1; 
Register2 = count …(4) 
Register2 = Register2 – 1 …(5) 
count = Register2 …(6) 
count 
4 
Register2 
Register1 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) 
Consumer (Thread2) count = count-1; 
Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) 
count 
4 
Register2 
4 
Register1 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) 
Consumer (Thread2) count = count-1; 
Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) 
count 
4 
Register2 
4 
Register1 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Register1 = count …(1) 
Register1 = Register1 + 1 …(2) 
count = Register1 …(3) 
Consumer (Thread2) count = count-1; 
Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) 
count 
4 
Register2 
4 
Register1 
5 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) 
Consumer (Thread2) count = count-1; 
Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) 
count 
4 
Register2 
4 
Register1 
5 
5 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) 
Consumer (Thread2) count = count-1; 
Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) 
count 
4 
Register2 
4 
Register1 
5 
5 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
4 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) 
Consumer (Thread2) count = count-1; 
Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) 
count 
4 
Register2 
4 
Register1 
5 
5 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
4 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Consumer (Thread2) count = count-1; 
count 
4 
Register2 
4 
Register1 
5 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) 
Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Consumer (Thread2) count = count-1; 
count 
4 
Register2 
4 
Register1 
5 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) 
Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 
4 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Consumer (Thread2) count = count-1; 
count 
4 
Register2 
4 
Register1 
5 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) 
Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 
4 
5 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Consumer (Thread2) count = count-1; 
count 
4 
Register2 
4 
Register1 
5 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) 
Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 
4 
5 
4 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Consumer (Thread2) count = count-1; 
count 
4 
Register2 
4 
Register1 
5 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) 
Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 
4 
5 
4 
3 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Consumer (Thread2) count = count-1; 
count 
4 
Register2 
4 
Register1 
5 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) 
Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 
4 
5 
4 
3 
Not Atomic!!
21 
Registers 
Producer (Thread1) count = count+1; 
Consumer (Thread2) count = count-1; 
count 
4 
Register2 
4 
Register1 
5 
5 
1.Producer跟 Consumer 是concurrent的 
2.共享count變數 
3.CPU可被搶奪的 (e.g. SRJF) 
Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) 
Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 
4 
5 
4 
3 
3 
Not Atomic!!
Race Condition 
•在Share Memory溝通方式下, 共享變數的值會因為 Processes執行的順序不同而 有所不同。 
22 
Producer count = count+1; 
Consumer: count = count-1;
Race Condition 
•在Share Memory溝通方式下, 共享變數的值會因為 Processes執行的順序不同而 有所不同。 
22 
Producer count = count+1; 
Consumer: count = count-1; 
保證同一時間只有一個 Process在存取共享變數
Critical Section 
23 
Repeat … C.S. … Until false 
Entry section 
Exit section
Critical Section 
23 
•Mutual Exclusion: 在任何時間點 最多允許一個process在其C.S.內 活動 
Repeat … C.S. … Until false 
Entry section 
Exit section
Critical Section 
23 
•Mutual Exclusion: 在任何時間點 最多允許一個process在其C.S.內 活動 
•Progress 
–不想進入C.S.的Process不能阻礙其 他process進入 
–在有限的時間內必須從想進入C.S. 的processes中決定出一個Process進 入C.S. 
Repeat … C.S. … Until false 
Entry section 
Exit section
Critical Section 
23 
•Mutual Exclusion: 在任何時間點 最多允許一個process在其C.S.內 活動 
•Progress 
–不想進入C.S.的Process不能阻礙其 他process進入 
–在有限的時間內必須從想進入C.S. 的processes中決定出一個Process進 入C.S. 
•Bounded Waiting: Process從提出 申請要進入C.S.到其獲准進入C.S. 的這段時間是有限的 
Repeat 
… 
C.S. 
… 
Until false 
Entry section 
Exit section
Critical Section 
23 
•Mutual Exclusion: 在任何時間點 最多允許一個process在其C.S.內 活動 
•Progress 
–不想進入C.S.的Process不能阻礙其 他process進入 
–在有限的時間內必須從想進入C.S. 的processes中決定出一個Process進 入C.S. 
•Bounded Waiting: Process從提出 申請要進入C.S.到其獲准進入C.S. 的這段時間是有限的 
No Deadlock 
Repeat … C.S. … Until false 
Entry section 
Exit section
Critical Section 
23 
•Mutual Exclusion: 在任何時間點 最多允許一個process在其C.S.內 活動 
•Progress 
–不想進入C.S.的Process不能阻礙其 他process進入 
–在有限的時間內必須從想進入C.S. 的processes中決定出一個Process進 入C.S. 
•Bounded Waiting: Process從提出 申請要進入C.S.到其獲准進入C.S. 的這段時間是有限的 
No Deadlock 
No Starvation 
Repeat … C.S. … Until false 
Entry section 
Exit section
C.S. Design – design entry/exit section 
•Software Solution 
•Hardware Solution 
•Semaphore 
•Monitor 
•Critical Region 
•… 
24 
Repeat … C.S. … Until false 
Entry section 
Exit section
Multi-Processing / Multi-Threading (3) 
•同步問題 
25 
P1 
P2 
… 
… 
A 
B 
… 
… 
如果我們希望A敘述 一定要在B敘述之前 執行,怎麼做?
Multi-Processing / Multi-Threading (3) 
•同步問題 
25 
P1 
P2 
… 
… 
A 
B 
… 
… 
如果我們希望A敘述 一定要在B敘述之前 執行,怎麼做? 
Wait(s){ 
while(s<=0) do no-op; 
s = s – 1; 
} 
Signal(s){ s++; }
Multi-Processing / Multi-Threading (3) 
•同步問題 
25 
P1 
P2 
… 
… 
A 
B 
… 
… 
如果我們希望A敘述 一定要在B敘述之前 執行,怎麼做? 
Wait(s){ while(s<=0) do no-op; s = s – 1; } 
Signal(s){ s++; } 
P1 
P2 
… 
… 
A 
B 
… 
… 
Signal(s) 
wait(s)
Multi-Processing / Multi-Threading (3) 
•同步問題 
25 
P1 
P2 
… 
… 
A 
B 
… 
… 
如果我們希望A敘述 一定要在B敘述之前 執行,怎麼做? 
Wait(s){ while(s<=0) do no-op; s = s – 1; } 
Signal(s){ s++; } 
P1 
P2 
… 
… 
A 
B 
… 
… 
Signal(s) 
wait(s)
Synchronization 
•著名的同步問題 
–Dining philosophers problem 
–Producer-consumer problem 
–Readers-writers problem 
–Sleeping barber problem 
•解法: 
–Semaphore 
–Monitor 
–Critical Region 
26
27 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
Thread Pool 
排程 問題 
Context Switching 
建立 Thread 的成本
27 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
Thread Pool 
排程 問題 
Context Switching 
建立 Thread 的成本 
溝通
27 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
Thread Pool 
排程 問題 
Context Switching 
建立 Thread 的成本 
溝通 
Deadlock
27 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
Thread Pool 
排程 問題 
Context Switching 
建立 Thread 的成本 
溝通 
Deadlock 
Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery
27 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
Thread Pool 
排程 問題 
Context Switching 
建立 Thread 的成本 
溝通 
共 享 記 憶 體 
訊 息 傳 遞 
Deadlock 
Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery 
…
27 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
Thread Pool 
排程 問題 
Context Switching 
建立 Thread 的成本 
溝通 
共 享 記 憶 體 
訊 息 傳 遞 
Deadlock 
Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery 
… 
Race Condition
27 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
Thread Pool 
排程 問題 
Context Switching 
建立 Thread 的成本 
溝通 
共 享 記 憶 體 
訊 息 傳 遞 
Deadlock 
Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery 
… 
Race Condition 
同步問 題
27 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
Thread Pool 
排程 問題 
Context Switching 
建立 Thread 的成本 
溝通 
共 享 記 憶 體 
訊 息 傳 遞 
Deadlock 
Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery 
… 
Race Condition 
Critical Section 
同步問 題
27 
單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 
多 行 程 並 行 , 提 升 了CPU效 能 
OS運 用 排 程 演 算 法 協 助 排 程 
改 用 輕 量 級 行 程 threads 
Thread Pool 
排程 問題 
Context Switching 
建立 Thread 的成本 
溝通 
共 享 記 憶 體 
訊 息 傳 遞 
Deadlock 
Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery 
… 
Race Condition 
Critical Section 
Software Sol. Hardware Sol. 
Semaphore 
Monitor 
Critical Region 
… 
同步問 題
補充 
28
補充 
28

Contenu connexe

Tendances

Wrapping a C++ library with Cython
Wrapping a C++ library with CythonWrapping a C++ library with Cython
Wrapping a C++ library with Cython
fuzzysphere
 
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
CODE BLUE
 
How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernel
Naoya Ito
 

Tendances (20)

基本計概祕笈(張逸)
基本計概祕笈(張逸)基本計概祕笈(張逸)
基本計概祕笈(張逸)
 
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyieldPHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
 
ROP 輕鬆談
ROP 輕鬆談ROP 輕鬆談
ROP 輕鬆談
 
系統程式 -- 第 3 章
系統程式 -- 第 3 章系統程式 -- 第 3 章
系統程式 -- 第 3 章
 
系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言
 
A whirlwind tour of the LLVM optimizer
A whirlwind tour of the LLVM optimizerA whirlwind tour of the LLVM optimizer
A whirlwind tour of the LLVM optimizer
 
系統程式 -- 第 1 章
系統程式 -- 第 1 章系統程式 -- 第 1 章
系統程式 -- 第 1 章
 
系統程式 -- 第 6 章 巨集處理器
系統程式 -- 第 6 章 巨集處理器系統程式 -- 第 6 章 巨集處理器
系統程式 -- 第 6 章 巨集處理器
 
Wrapping a C++ library with Cython
Wrapping a C++ library with CythonWrapping a C++ library with Cython
Wrapping a C++ library with Cython
 
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
 
Cpu Cache and Memory Ordering——并发程序设计入门
Cpu Cache and Memory Ordering——并发程序设计入门Cpu Cache and Memory Ordering——并发程序设计入门
Cpu Cache and Memory Ordering——并发程序设计入门
 
系統程式 -- 第 11 章
系統程式 -- 第 11 章系統程式 -- 第 11 章
系統程式 -- 第 11 章
 
Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る 
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
系統程式 -- 第 9 章 虛擬機器
系統程式 -- 第 9 章 虛擬機器系統程式 -- 第 9 章 虛擬機器
系統程式 -- 第 9 章 虛擬機器
 
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
 
作業系統祕笈(張逸)
作業系統祕笈(張逸)作業系統祕笈(張逸)
作業系統祕笈(張逸)
 
How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernel
 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)
 
系統程式 - 第二章
系統程式 - 第二章系統程式 - 第二章
系統程式 - 第二章
 

En vedette

En vedette (10)

20150604 docker 新手入門
20150604 docker 新手入門20150604 docker 新手入門
20150604 docker 新手入門
 
高效能執行緒
高效能執行緒高效能執行緒
高效能執行緒
 
reading group 成為卓越程式設計師的38項必修法則(20~23)
reading group 成為卓越程式設計師的38項必修法則(20~23)reading group 成為卓越程式設計師的38項必修法則(20~23)
reading group 成為卓越程式設計師的38項必修法則(20~23)
 
貪食蛇
貪食蛇貪食蛇
貪食蛇
 
怎樣寫出比較沒有問題的 Code
怎樣寫出比較沒有問題的 Code怎樣寫出比較沒有問題的 Code
怎樣寫出比較沒有問題的 Code
 
Iottoolkit wot
Iottoolkit wotIottoolkit wot
Iottoolkit wot
 
電路學 - [第二章] 電路分析方法
電路學 - [第二章] 電路分析方法電路學 - [第二章] 電路分析方法
電路學 - [第二章] 電路分析方法
 
電路學 - [第一章] 電路元件與基本定律
電路學 - [第一章] 電路元件與基本定律電路學 - [第一章] 電路元件與基本定律
電路學 - [第一章] 電路元件與基本定律
 
API Token 入門
API Token 入門API Token 入門
API Token 入門
 
大型 Web Application 轉移到 微服務的經驗分享
大型 Web Application 轉移到微服務的經驗分享大型 Web Application 轉移到微服務的經驗分享
大型 Web Application 轉移到 微服務的經驗分享
 

Similaire à 作業系統基本觀念複習

Similaire à 作業系統基本觀念複習 (9)

服务器端性能优化 提升Qps、rt
服务器端性能优化 提升Qps、rt服务器端性能优化 提升Qps、rt
服务器端性能优化 提升Qps、rt
 
A bunch of hpc
A bunch of hpcA bunch of hpc
A bunch of hpc
 
Linux性能监控cpu内存io网络
Linux性能监控cpu内存io网络Linux性能监控cpu内存io网络
Linux性能监控cpu内存io网络
 
Linux期末 效能調教(kernel trnning)
Linux期末 效能調教(kernel trnning)Linux期末 效能調教(kernel trnning)
Linux期末 效能調教(kernel trnning)
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130
 
ch13-pv1-system-calls
ch13-pv1-system-callsch13-pv1-system-calls
ch13-pv1-system-calls
 
Pptv lb日志实时分析平台
Pptv lb日志实时分析平台Pptv lb日志实时分析平台
Pptv lb日志实时分析平台
 
Java应用性能测试与分析
Java应用性能测试与分析Java应用性能测试与分析
Java应用性能测试与分析
 

Plus de azole Lai

20130908 Change the world?
20130908 Change the world?20130908 Change the world?
20130908 Change the world?
azole Lai
 

Plus de azole Lai (7)

AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginner
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
singularly continuous
singularly continuoussingularly continuous
singularly continuous
 
利用Javascript 與 html5開發線上遊戲_1骰子遊戲
利用Javascript 與 html5開發線上遊戲_1骰子遊戲利用Javascript 與 html5開發線上遊戲_1骰子遊戲
利用Javascript 與 html5開發線上遊戲_1骰子遊戲
 
利用Javascript 與 html5開發線上遊戲_0基本概念
利用Javascript 與 html5開發線上遊戲_0基本概念利用Javascript 與 html5開發線上遊戲_0基本概念
利用Javascript 與 html5開發線上遊戲_0基本概念
 
利用Javascript 與 html5開發線上遊戲_2彈力球
利用Javascript 與 html5開發線上遊戲_2彈力球利用Javascript 與 html5開發線上遊戲_2彈力球
利用Javascript 與 html5開發線上遊戲_2彈力球
 
20130908 Change the world?
20130908 Change the world?20130908 Change the world?
20130908 Change the world?
 

作業系統基本觀念複習

  • 1. 作業系統基本觀念複習 Process & Thread Yiling Lai 2011/8/24 1
  • 2. •恐龍書 Operating System Concepts Silberschatz, Galvin, Gagne 2
  • 3. 什麼是Process? •A program in execution. 執行中的程式 3
  • 4. 什麼是Process? •A program in execution. 執行中的程式 3
  • 5. 什麼是Process? •A program in execution. 執行中的程式 3
  • 6. 什麼是Process? •A program in execution. 執行中的程式 3 Text Section Data Section Heap Stack Program counter
  • 7. 什麼是Process? •A program in execution. 執行中的程式 3 Text Section Data Section Heap Stack Program counter Registers
  • 9. Process的一生 (STD) New Ready Load到memory裡, 準備搶CPU控制權 4 Ready Queue Job Queue
  • 10. Process的一生 (STD) New Ready Load到memory裡, 準備搶CPU控制權 4 Ready Queue PCB Process ID Process State PC CPU Registers …. Job Queue
  • 11. Process的一生 (STD) New Ready Running Load到memory裡, 準備搶CPU控制權 搶到CPU了 4 Ready Queue PCB Process ID Process State PC CPU Registers …. Job Queue
  • 12. Process的一生 (STD) New Ready Running Wait (Block) Wait for I/O complete or resources available Load到memory裡, 準備搶CPU控制權 搶到CPU了 4 Ready Queue PCB Process ID Process State PC CPU Registers …. Job Queue
  • 13. Process的一生 (STD) New Ready Running Wait (Block) Wait for I/O complete or resources available Load到memory裡, 準備搶CPU控制權 CPU被搶走了 搶到CPU了 4 Ready Queue PCB Process ID Process State PC CPU Registers …. Job Queue
  • 14. Process的一生 (STD) New Ready Running Terminate Wait (Block) Wait for I/O complete or resources available Load到memory裡, 準備搶CPU控制權 CPU被搶走了 搶到CPU了 4 Ready Queue PCB Process ID Process State PC CPU Registers …. Job Queue
  • 15. Process的一生 (STD) New Ready Running Terminate Wait (Block) Wait for I/O complete or resources available Load到memory裡, 準備搶CPU控制權 CPU被搶走了 搶到CPU了 4 Ready Queue PCB Process ID Process State PC CPU Registers …. Job Queue
  • 16. Process的一生 (STD) New Ready Running Terminate Wait (Block) Wait for I/O complete or resources available Load到memory裡, 準備搶CPU控制權 CPU被搶走了 我等著你回來~~ (好無聊啊!!) 搶到CPU了 4 Ready Queue PCB Process ID Process State PC CPU Registers …. Job Queue
  • 18. 多找幾個行程來填 補我的空虛與寂寞!! (Concurrent Processing) 你這個詐騙集 團!! 我才是真的 平行化好嘛! 5
  • 19. Parallel Processing 多找幾個行程來填 補我的空虛與寂寞!! (Concurrent Processing) 你這個詐騙集 團!! 我才是真的 平行化好嘛! P0 P1 P2 5
  • 20. Parallel Processing Concurrnt Processing P0 P1 P2 多找幾個行程來填 補我的空虛與寂寞!! (Concurrent Processing) 你這個詐騙集 團!! 我才是真的 平行化好嘛! P0 P1 P2 5
  • 21. Parallel Processing Concurrnt Processing P0 P1 P2 大家輪流使用CPU,但是怎麼輪?? 多找幾個行程來填 補我的空虛與寂寞!! (Concurrent Processing) 你這個詐騙集 團!! 我才是真的 平行化好嘛! P0 P1 P2 5
  • 22. 6
  • 23. 6
  • 24. 6
  • 26. 7
  • 27. 1.CPU的使用率(Utilization)要最大 2.工作產能(Throughput)要高 3.Process等待的時間要短 4.完成時間(Turnaround time)要短 5.資源利用率也要大 6.要公平 7.… 7
  • 28. 1.CPU的使用率(Utilization)要最大 2.工作產能(Throughput)要高 3.Process等待的時間要短 4.完成時間(Turnaround time)要短 5.資源利用率也要大 6.要公平 7.… •FIFO: First come first out •SJF: Shortest Job First •SRJF: Shortest Remaining Time Job First •Priority Scheduling •RR: Round Robin •….. 7
  • 29. 1.CPU的使用率(Utilization)要最大 2.工作產能(Throughput)要高 3.Process等待的時間要短 4.完成時間(Turnaround time)要短 5.資源利用率也要大 6.要公平 7.… •FIFO: First come first out •SJF: Shortest Job First •SRJF: Shortest Remaining Time Job First •Priority Scheduling •RR: Round Robin •….. 7 Scheduling Algorithm
  • 30. FIFO: 誰先來誰先做 SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ (SJF: shortest time job first) Process CPU Time P0 14 P1 5 P2 2 1.CPU的使用率要最大 2.工作產能要高 3.Process等待的時間要短 4.完成時間要短 5.資源利用率也要大 6.要公平 FIFO: SJF: 8
  • 31. FIFO: 誰先來誰先做 SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ (SJF: shortest time job first) Process CPU Time P0 14 P1 5 P2 2 P0 1.CPU的使用率要最大 2.工作產能要高 3.Process等待的時間要短 4.完成時間要短 5.資源利用率也要大 6.要公平 FIFO: SJF: 8
  • 32. FIFO: 誰先來誰先做 SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ (SJF: shortest time job first) Process CPU Time P0 14 P1 5 P2 2 P1 P0 1.CPU的使用率要最大 2.工作產能要高 3.Process等待的時間要短 4.完成時間要短 5.資源利用率也要大 6.要公平 FIFO: SJF: 8
  • 33. FIFO: 誰先來誰先做 SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ (SJF: shortest time job first) Process CPU Time P0 14 P1 5 P2 2 P2 P1 P0 1.CPU的使用率要最大 2.工作產能要高 3.Process等待的時間要短 4.完成時間要短 5.資源利用率也要大 6.要公平 FIFO: SJF: 8
  • 34. FIFO: 誰先來誰先做 SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ (SJF: shortest time job first) Process CPU Time P0 14 P1 5 P2 2 平均等待時間 = (0+ 14+19)/3 = 11 P2 P1 P0 2 5 14 1.CPU的使用率要最大 2.工作產能要高 3.Process等待的時間要短 4.完成時間要短 5.資源利用率也要大 6.要公平 FIFO: SJF: 8
  • 35. FIFO: 誰先來誰先做 SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ (SJF: shortest time job first) Process CPU Time P0 14 P1 5 P2 2 平均等待時間 = (0+ 14+19)/3 = 11 P2 P1 P0 2 5 14 1.CPU的使用率要最大 2.工作產能要高 3.Process等待的時間要短 4.完成時間要短 5.資源利用率也要大 6.要公平 FIFO: SJF: 8
  • 36. FIFO: 誰先來誰先做 SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ (SJF: shortest time job first) Process CPU Time P0 14 P1 5 P2 2 平均等待時間 = (0+ 14+19)/3 = 11 P2 P2 P1 P0 2 5 14 1.CPU的使用率要最大 2.工作產能要高 3.Process等待的時間要短 4.完成時間要短 5.資源利用率也要大 6.要公平 FIFO: SJF: 8
  • 37. FIFO: 誰先來誰先做 SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ (SJF: shortest time job first) Process CPU Time P0 14 P1 5 P2 2 平均等待時間 = (0+ 14+19)/3 = 11 P2 P1 P2 P1 P0 2 5 14 1.CPU的使用率要最大 2.工作產能要高 3.Process等待的時間要短 4.完成時間要短 5.資源利用率也要大 6.要公平 FIFO: SJF: 8
  • 38. FIFO: 誰先來誰先做 SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ (SJF: shortest time job first) Process CPU Time P0 14 P1 5 P2 2 平均等待時間 = (0+ 14+19)/3 = 11 P2 P1 P0 P2 P1 P0 2 5 14 1.CPU的使用率要最大 2.工作產能要高 3.Process等待的時間要短 4.完成時間要短 5.資源利用率也要大 6.要公平 FIFO: SJF: 8
  • 39. FIFO: 誰先來誰先做 SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ (SJF: shortest time job first) Process CPU Time P0 14 P1 5 P2 2 平均等待時間 = (0+2+7)/3 = 3 平均等待時間 = (0+ 14+19)/3 = 11 P2 P1 P0 2 5 14 P2 P1 P0 2 5 14 1.CPU的使用率要最大 2.工作產能要高 3.Process等待的時間要短 4.完成時間要短 5.資源利用率也要大 6.要公平 FIFO: SJF: 8
  • 40. FIFO: 誰先來誰先做 SJF: 你要3個小時?我只要3分鐘,先給我用一下吧~ (SJF: shortest time job first) Process CPU Time P0 14 P1 5 P2 2 平均等待時間 = (0+2+7)/3 = 3 平均等待時間 = (0+ 14+19)/3 = 11 P2 P1 P0 2 5 14 P2 P1 P0 2 5 14 1.CPU的使用率要最大 2.工作產能要高 3.Process等待的時間要短 4.完成時間要短 5.資源利用率也要大 6.要公平 FIFO: SJF: 8
  • 41. Process CPU Time P0 14 P1 5 P2 2 P2 P1 P0 9
  • 42. P2 P1 Process CPU Time P0 14 P1 5 P2 2 P2 P1 P0 9
  • 43. P2 P1 P3 Process CPU Time P0 14 P1 5 P2 2 P2 P1 P0 9
  • 44. P3 P2 P1 P2 P1 P3 Process CPU Time P0 14 P1 5 P2 2 P2 P1 P0 9
  • 45. P3 P2 P1 P2 P1 P3 P4 Process CPU Time P0 14 P1 5 P2 2 P2 P1 P0 9
  • 46. P3 P2 P1 P2 P1 P3 P4 PN …. Process CPU Time P0 14 P1 5 P2 2 P2 P1 P0 9
  • 47. P3 P2 P1 P2 P1 P3 P4 PN …. P4 P2 P1 …. PN Process CPU Time P0 14 P1 5 P2 2 P2 P1 P0 9
  • 48. P3 P2 P1 P2 P1 P3 P4 PN …. P4 P2 P1 …. PN Process CPU Time P0 14 P1 5 P2 2 P2 P1 P0 喂…那 我咧… P0 9
  • 49. P3 P2 P1 P2 P1 P3 P4 PN …. P4 P2 P1 …. PN Process CPU Time P0 14 P1 5 P2 2 P2 P1 P0 喂…那 我咧… P0 Starvation 飢餓:Process因為長 期無法取得完工所需的全部資 源,以致形成indefinite blocking 之現象。 解法:Aging Tech等… 9
  • 50. SRJF: Shortest Remaining Time Job First •可插隊的。 Process Arrival Time CPU Time P0 0 6 P1 1 4 P2 2 7 P3 3 3 P0 T0 T1 T2 T3 10 T1 T2 T3 T5 T20
  • 51. SRJF: Shortest Remaining Time Job First •可插隊的。 Process Arrival Time CPU Time P0 0 6 P1 1 4 P2 2 7 P3 3 3 P0 P1 T0 T1 T2 T3 10 T1 T2 T3 T5 T20
  • 52. SRJF: Shortest Remaining Time Job First •可插隊的。 Process Arrival Time CPU Time P0 0 6 P1 1 4 P2 2 7 P3 3 3 P0 P1 P0 P1 T0 T1 T2 T3 10 T1 T2 T3 T5 T20
  • 53. SRJF: Shortest Remaining Time Job First •可插隊的。 Process Arrival Time CPU Time P0 0 6 P1 1 4 P2 2 7 P3 3 3 P2 P0 P1 P0 P1 T0 T1 T2 T3 10 T1 T2 T3 T5 T20
  • 54. SRJF: Shortest Remaining Time Job First •可插隊的。 Process Arrival Time CPU Time P0 0 6 P1 1 4 P2 2 7 P3 3 3 P2 P0 P1 P0 P1 P0 P1 T0 T1 T2 T3 10 T1 T2 T3 T5 T20
  • 55. SRJF: Shortest Remaining Time Job First •可插隊的。 Process Arrival Time CPU Time P0 0 6 P1 1 4 P2 2 7 P3 3 3 P2 P0 P1 P0 P1 P0 P1 P3 T0 T1 T2 T3 10 T1 T2 T3 T5 T20
  • 56. SRJF: Shortest Remaining Time Job First •可插隊的。 Process Arrival Time CPU Time P0 0 6 P1 1 4 P2 2 7 P3 3 3 P2 P0 P1 P0 P1 P0 P1 P3 P0 P1 T0 T1 T2 T3 10 T1 T2 T3 T5 T20
  • 57. SRJF: Shortest Remaining Time Job First •可插隊的。 Process Arrival Time CPU Time P0 0 6 P1 1 4 P2 2 7 P3 3 3 P2 P0 P1 P0 P1 P0 P1 P3 P0 P1 P2 P0 P3 T0 T1 T2 T3 10 T1 T2 T3 T5 T20
  • 58. SRJF: Shortest Remaining Time Job First •可插隊的。 Process Arrival Time CPU Time P0 0 6 P1 1 4 P2 2 7 P3 3 3 P2 P0 P1 P0 P1 P0 P1 P3 P0 P1 P2 P0 P3 P0 P1 P3 P0 P2 T0 T1 T2 T3 10 T1 T2 T3 T5 T20
  • 59. New Ready Running Terminate Wait (Block) Load到memory裡, 準備搶CPU控制權 CPU被搶走了 搶到CPU了 Registers 11 PCB Process ID ReProcess State PC CPU gisters ….
  • 60. New Ready Running Terminate Wait (Block) Load到memory裡, 準備搶CPU控制權 CPU被搶走了 搶到CPU了 Registers 11 PCB Process ID ReProcess State PC CPU gisters ….
  • 61. New Ready Running Terminate Wait (Block) Load到memory裡, 準備搶CPU控制權 CPU被搶走了 搶到CPU了 Registers 11 PCB Process ID ReProcess State PC CPU gisters ….
  • 62. New Ready Running Terminate Wait (Block) Load到memory裡, 準備搶CPU控制權 CPU被搶走了 搶到CPU了 Registers Context Switching:若CPU將執行中的Process切換 給其他Process使用時,必須保存目前執行中 Process的狀態,並載入欲執行Process的狀態資訊。 11 PCB Process ID ReProcess State PC CPU gisters ….
  • 64. 問題是搬家是需要成本的… P0 P1 P2 太多Process並行效 能反而不如預期… 12
  • 65. 問題是搬家是需要成本的… P0 P1 P2 太多Process並行效 能反而不如預期… 解法1:提供多套Registers Registers 12
  • 66. 問題是搬家是需要成本的… P0 P1 P2 太多Process並行效 能反而不如預期… 解法1:提供多套Registers Registers 12
  • 67. 問題是搬家是需要成本的… P0 P1 P2 太多Process並行效 能反而不如預期… 解法1:提供多套Registers Registers 解法2:改用Thread~ Thread: Light weight process. 是 CPU分配資源的最小單位,而同 一個Process內的threads共享 code section, data section, 跟一 些OS資源 12
  • 68. 問題是搬家是需要成本的… P0 P1 P2 太多Process並行效 能反而不如預期… 解法1:提供多套Registers Registers 解法2:改用Thread~ Thread: Light weight process. 是 CPU分配資源的最小單位,而同 一個Process內的threads共享 code section, data section, 跟一 些OS資源 12
  • 70. 建立Thread也是有成本的 → 用空間換取時間~~ Thread Pool: 在Process建立之初,預先 建立多條threads置於thread pool中,當 需要使用時,就從thread pool中取出使 用,用完再還給thread pool。 13
  • 71. 到目前為止… 14 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮
  • 72. 到目前為止… 14 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能
  • 73. 到目前為止… 14 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 排程問 題
  • 74. 到目前為止… 14 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 排程問 題
  • 75. 到目前為止… 14 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 排程問 題 Context Switching
  • 76. 到目前為止… 14 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads 排程問 題 Context Switching
  • 77. 到目前為止… 14 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads 排程問 題 Context Switching 建立 Thread的 成本
  • 78. 到目前為止… 14 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads Thread Pool 排程問 題 Context Switching 建立 Thread的 成本 …
  • 79. 到目前為止… 14 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads Thread Pool 排程問 題 Context Switching 建立 Thread的 成本 ?? …
  • 80. Multi-Processing / Multi-Threading (1) 15 •系統的資源通常是有限的 –CPU週期、記憶體空間、檔案、I/O Device… 當Process需要資源時…
  • 81. Multi-Processing / Multi-Threading (1) 15 •系統的資源通常是有限的 –CPU週期、記憶體空間、檔案、I/O Device… 當Process需要資源時… Process提出 Request
  • 82. Multi-Processing / Multi-Threading (1) 15 •系統的資源通常是有限的 –CPU週期、記憶體空間、檔案、I/O Device… 當Process需要資源時… Process提出 Request 資源是 否足夠
  • 83. Multi-Processing / Multi-Threading (1) 15 •系統的資源通常是有限的 –CPU週期、記憶體空間、檔案、I/O Device… 當Process需要資源時… Process提出 Request 資源是 否足夠 Yes Process使 用資源 使用完畢, 釋放
  • 84. Multi-Processing / Multi-Threading (1) 15 •系統的資源通常是有限的 –CPU週期、記憶體空間、檔案、I/O Device… 當Process需要資源時… Process提出 Request 資源是 否足夠 Yes Process使 用資源 使用完畢, 釋放 No Process等 待…
  • 85. Multi-Processing / Multi-Threading (1) 15 •系統的資源通常是有限的 –CPU週期、記憶體空間、檔案、I/O Device… 當Process需要資源時… Process提出 Request 資源是 否足夠 Yes Process使 用資源 使用完畢, 釋放 No Process等 待…
  • 86. 16 New Ready Running Terminate Wait (Block) Wait for I/O complete or resources available
  • 87. 16 Thread 1 R1 used New Ready Running Terminate Wait (Block) Wait for I/O complete or resources available
  • 88. 16 Thread 1 R1 used Thread 2 R2 used New Ready Running Terminate Wait (Block) Wait for I/O complete or resources available
  • 89. 16 Thread 1 R1 used Thread 2 R2 used Wait New Ready Running Terminate Wait (Block) Wait for I/O complete or resources available
  • 90. 16 Thread 1 R1 used Thread 2 R2 used Wait Wait New Ready Running Terminate Wait (Block) Wait for I/O complete or resources available
  • 91. Deadlock: 系統中存在一組 Processes,彼此形成 circular waiting的情況,使 得Processes皆無法繼續往 下執行,導致CPU利用度 及產能急速下降。 16 Thread 1 R1 used Thread 2 R2 used Wait Wait New Ready Running Terminate Wait (Block) Wait for I/O complete or resources available
  • 92. Deadlock 處理策略 17 T1 R1 used T2 R2 used Wait Wait
  • 93. Deadlock 處理策略 17 •Deadlock形成的必要條件: •資源的Mutual Exclusion •Hold & Wait •No Preemptive •Circular waiting T1 R1 used T2 R2 used Wait Wait
  • 94. Deadlock 處理策略 •處理策略: –Deadlock Prevention –Deadlock Avoidance –Deadlock Detection & Recovery 17 •Deadlock形成的必要條件: •資源的Mutual Exclusion •Hold & Wait •No Preemptive •Circular waiting T1 R1 used T2 R2 used Wait Wait
  • 95. Deadlock 處理策略 •處理策略: –Deadlock Prevention –Deadlock Avoidance –Deadlock Detection & Recovery 17 •Deadlock形成的必要條件: •資源的Mutual Exclusion •Hold & Wait •No Preemptive •Circular waiting T1 R1 used T2 R2 used Wait Wait 預防勝於治療
  • 96. Deadlock 處理策略 •處理策略: –Deadlock Prevention –Deadlock Avoidance –Deadlock Detection & Recovery 17 •Deadlock形成的必要條件: •資源的Mutual Exclusion •Hold & Wait •No Preemptive •Circular waiting T1 R1 used T2 R2 used Wait Wait 預防勝於治療 見到棺材才掉淚
  • 97. Multi-Processing / Multi-Threading (2) •Communication –Shared Memory –Message Passing 18 Thread 1 data Thread 2 Memory / … Process 1 Process 2 Send Msg Process 1 Process 2
  • 99. Producer & Consumer 19 Bounded buffer Producer/Consumer Problem: (1) 當Buffer滿時,則Producer必須等待。 (2) 當Buffer空時,則Consumer必須等待。
  • 100. Producer & Consumer 19 Bounded buffer Producer/Consumer Problem: (1) 當Buffer滿時,則Producer必須等待。 (2) 當Buffer空時,則Consumer必須等待。 → 採用一個共用變數count來記錄buffer裡item 的個數
  • 101. Producer: 生產一個item; while(count==size) do no-op; buffer[in] = item; in = (in+1) % size; count = count+1; 20 Consumer: while(count==0) do no-op; item = buffer[out]; out = (out+1) mod size; count = count-1;
  • 102. Producer: 生產一個item; while(count==size) do no-op; buffer[in] = item; in = (in+1) % size; count = count+1; 20 Consumer: while(count==0) do no-op; item = buffer[out]; out = (out+1) mod size; count = count-1; 1.Producer跟 Consumer 是concurrent的 2.共享count變數
  • 103. Producer: 生產一個item; while(count==size) do no-op; buffer[in] = item; in = (in+1) % size; count = count+1; 20 Consumer: while(count==0) do no-op; item = buffer[out]; out = (out+1) mod size; count = count-1; Registers 1.Producer跟 Consumer 是concurrent的 2.共享count變數
  • 104. 21 Registers Producer (Thread1) count = count+1; Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) Consumer (Thread2) count = count-1; Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) count 4 Register2 Register1 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Not Atomic!!
  • 105. 21 Registers Producer (Thread1) count = count+1; Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) Consumer (Thread2) count = count-1; Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) count 4 Register2 4 Register1 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Not Atomic!!
  • 106. 21 Registers Producer (Thread1) count = count+1; Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) Consumer (Thread2) count = count-1; Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) count 4 Register2 4 Register1 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Not Atomic!!
  • 107. 21 Registers Producer (Thread1) count = count+1; Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) Consumer (Thread2) count = count-1; Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) count 4 Register2 4 Register1 5 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Not Atomic!!
  • 108. 21 Registers Producer (Thread1) count = count+1; Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) Consumer (Thread2) count = count-1; Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) count 4 Register2 4 Register1 5 5 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Not Atomic!!
  • 109. 21 Registers Producer (Thread1) count = count+1; Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) Consumer (Thread2) count = count-1; Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) count 4 Register2 4 Register1 5 5 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) 4 Not Atomic!!
  • 110. 21 Registers Producer (Thread1) count = count+1; Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(3) Consumer (Thread2) count = count-1; Register2 = count …(4) Register2 = Register2 – 1 …(5) count = Register2 …(6) count 4 Register2 4 Register1 5 5 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) 4 Not Atomic!!
  • 111. 21 Registers Producer (Thread1) count = count+1; Consumer (Thread2) count = count-1; count 4 Register2 4 Register1 5 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) Not Atomic!!
  • 112. 21 Registers Producer (Thread1) count = count+1; Consumer (Thread2) count = count-1; count 4 Register2 4 Register1 5 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 4 Not Atomic!!
  • 113. 21 Registers Producer (Thread1) count = count+1; Consumer (Thread2) count = count-1; count 4 Register2 4 Register1 5 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 4 5 Not Atomic!!
  • 114. 21 Registers Producer (Thread1) count = count+1; Consumer (Thread2) count = count-1; count 4 Register2 4 Register1 5 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 4 5 4 Not Atomic!!
  • 115. 21 Registers Producer (Thread1) count = count+1; Consumer (Thread2) count = count-1; count 4 Register2 4 Register1 5 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 4 5 4 3 Not Atomic!!
  • 116. 21 Registers Producer (Thread1) count = count+1; Consumer (Thread2) count = count-1; count 4 Register2 4 Register1 5 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 4 5 4 3 Not Atomic!!
  • 117. 21 Registers Producer (Thread1) count = count+1; Consumer (Thread2) count = count-1; count 4 Register2 4 Register1 5 5 1.Producer跟 Consumer 是concurrent的 2.共享count變數 3.CPU可被搶奪的 (e.g. SRJF) Register1 = count …(1) Register1 = Register1 + 1 …(2) count = Register1 …(5) Register2 = count …(3) Register2 = Register2 – 1 …(4) count = Register2 …(6) 4 5 4 3 3 Not Atomic!!
  • 118. Race Condition •在Share Memory溝通方式下, 共享變數的值會因為 Processes執行的順序不同而 有所不同。 22 Producer count = count+1; Consumer: count = count-1;
  • 119. Race Condition •在Share Memory溝通方式下, 共享變數的值會因為 Processes執行的順序不同而 有所不同。 22 Producer count = count+1; Consumer: count = count-1; 保證同一時間只有一個 Process在存取共享變數
  • 120. Critical Section 23 Repeat … C.S. … Until false Entry section Exit section
  • 121. Critical Section 23 •Mutual Exclusion: 在任何時間點 最多允許一個process在其C.S.內 活動 Repeat … C.S. … Until false Entry section Exit section
  • 122. Critical Section 23 •Mutual Exclusion: 在任何時間點 最多允許一個process在其C.S.內 活動 •Progress –不想進入C.S.的Process不能阻礙其 他process進入 –在有限的時間內必須從想進入C.S. 的processes中決定出一個Process進 入C.S. Repeat … C.S. … Until false Entry section Exit section
  • 123. Critical Section 23 •Mutual Exclusion: 在任何時間點 最多允許一個process在其C.S.內 活動 •Progress –不想進入C.S.的Process不能阻礙其 他process進入 –在有限的時間內必須從想進入C.S. 的processes中決定出一個Process進 入C.S. •Bounded Waiting: Process從提出 申請要進入C.S.到其獲准進入C.S. 的這段時間是有限的 Repeat … C.S. … Until false Entry section Exit section
  • 124. Critical Section 23 •Mutual Exclusion: 在任何時間點 最多允許一個process在其C.S.內 活動 •Progress –不想進入C.S.的Process不能阻礙其 他process進入 –在有限的時間內必須從想進入C.S. 的processes中決定出一個Process進 入C.S. •Bounded Waiting: Process從提出 申請要進入C.S.到其獲准進入C.S. 的這段時間是有限的 No Deadlock Repeat … C.S. … Until false Entry section Exit section
  • 125. Critical Section 23 •Mutual Exclusion: 在任何時間點 最多允許一個process在其C.S.內 活動 •Progress –不想進入C.S.的Process不能阻礙其 他process進入 –在有限的時間內必須從想進入C.S. 的processes中決定出一個Process進 入C.S. •Bounded Waiting: Process從提出 申請要進入C.S.到其獲准進入C.S. 的這段時間是有限的 No Deadlock No Starvation Repeat … C.S. … Until false Entry section Exit section
  • 126. C.S. Design – design entry/exit section •Software Solution •Hardware Solution •Semaphore •Monitor •Critical Region •… 24 Repeat … C.S. … Until false Entry section Exit section
  • 127. Multi-Processing / Multi-Threading (3) •同步問題 25 P1 P2 … … A B … … 如果我們希望A敘述 一定要在B敘述之前 執行,怎麼做?
  • 128. Multi-Processing / Multi-Threading (3) •同步問題 25 P1 P2 … … A B … … 如果我們希望A敘述 一定要在B敘述之前 執行,怎麼做? Wait(s){ while(s<=0) do no-op; s = s – 1; } Signal(s){ s++; }
  • 129. Multi-Processing / Multi-Threading (3) •同步問題 25 P1 P2 … … A B … … 如果我們希望A敘述 一定要在B敘述之前 執行,怎麼做? Wait(s){ while(s<=0) do no-op; s = s – 1; } Signal(s){ s++; } P1 P2 … … A B … … Signal(s) wait(s)
  • 130. Multi-Processing / Multi-Threading (3) •同步問題 25 P1 P2 … … A B … … 如果我們希望A敘述 一定要在B敘述之前 執行,怎麼做? Wait(s){ while(s<=0) do no-op; s = s – 1; } Signal(s){ s++; } P1 P2 … … A B … … Signal(s) wait(s)
  • 131. Synchronization •著名的同步問題 –Dining philosophers problem –Producer-consumer problem –Readers-writers problem –Sleeping barber problem •解法: –Semaphore –Monitor –Critical Region 26
  • 132. 27 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads Thread Pool 排程 問題 Context Switching 建立 Thread 的成本
  • 133. 27 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads Thread Pool 排程 問題 Context Switching 建立 Thread 的成本 溝通
  • 134. 27 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads Thread Pool 排程 問題 Context Switching 建立 Thread 的成本 溝通 Deadlock
  • 135. 27 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads Thread Pool 排程 問題 Context Switching 建立 Thread 的成本 溝通 Deadlock Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery
  • 136. 27 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads Thread Pool 排程 問題 Context Switching 建立 Thread 的成本 溝通 共 享 記 憶 體 訊 息 傳 遞 Deadlock Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery …
  • 137. 27 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads Thread Pool 排程 問題 Context Switching 建立 Thread 的成本 溝通 共 享 記 憶 體 訊 息 傳 遞 Deadlock Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery … Race Condition
  • 138. 27 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads Thread Pool 排程 問題 Context Switching 建立 Thread 的成本 溝通 共 享 記 憶 體 訊 息 傳 遞 Deadlock Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery … Race Condition 同步問 題
  • 139. 27 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads Thread Pool 排程 問題 Context Switching 建立 Thread 的成本 溝通 共 享 記 憶 體 訊 息 傳 遞 Deadlock Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery … Race Condition Critical Section 同步問 題
  • 140. 27 單 一 行 程 若 進 入IO,CPU效 能 則 無 法 發 揮 多 行 程 並 行 , 提 升 了CPU效 能 OS運 用 排 程 演 算 法 協 助 排 程 改 用 輕 量 級 行 程 threads Thread Pool 排程 問題 Context Switching 建立 Thread 的成本 溝通 共 享 記 憶 體 訊 息 傳 遞 Deadlock Deadlock Prevention Deadlock Avoidance Deadlock Detection & Recovery … Race Condition Critical Section Software Sol. Hardware Sol. Semaphore Monitor Critical Region … 同步問 題