狠狠撸

狠狠撸Share a Scribd company logo
OS第二次讀書會
2017/04/15
TA 鄭人瑋
Process的溝通方式
? Independent Process→獨立不受其他Process影響
? Cooperating Process→Inter-Process Communication(IPC)
a) Shared Memory
b) Message Passing
(blocking send/receive,
rendezvous)
2
Client-Server之間Process的傳遞(1/3)
? Socket:ip address+port=a socket
? 使用Socket是較底層有效率的,只允許傳遞字串
? 3 ways in socket:
1. Connection-Oriented(TCP)
2. Connectionless(UDP)
3. Multicast Socket(like broacast)
192.168.10.1:8080
192.168.10.1:80
3
Client-Server之間Process的傳遞(2/3)
? Remote Procedure Call(RPC)
? 運用在應用層的服務,將使記remote call內容包裝起來,執行起
來就像是在同一平台上直行程是一樣。
? 分散是網路服務、遠端管理、NFS檔案分享
? 詳細原理:https://www.zhihu.com/question/25536695
4
Client-Server之間Process的傳遞(2/3)
Client Server
Client
Program
Server
Program
Client
Stub
(Proxy)
Server
Stub
(Proxy)
Client
Call
Port Map
TCP/IP Layer
1.exactly once(match maker方式)
2.at most once(timestamp方式)
Application Layer Application Layer
upload port info.
XDR轉換(external data
representation)
→避免big/small endian
1
2
connect to
server program
search the port of
server program
3
5
Pipe
? 仿照硬體 pipeline 的行為,在process間開一條或數條線來放資
料
? 可以在Linux 指令或是CGI(common gateway interface)看到
? Ordinary Pipe and Named Pipe
6
read-end write-end
Ordinary Pipe
7
Process A
f_mode
f_pos
…
f_inode
…
f_op
Process B
f_mode
f_pos
…
f_inode
…
f_op
Pipe(類似中間的Buffer)
fd[0](write end)
fd[1](read end)
fd[0](write end)
fd[1](read end)
Ch4 執行緒(Thread)
8
Program? Process?
Thread?
9
Program? Process? Thread?
? Program→靜態的指令集(file)
? Process→正在執行的指令集,有被載入主記憶體的
Program(executable file)
? Thread→Process的小分身,共用Process的記憶體且自己也擁
有一個獨立的空間(Stack)可以做自己的事(e.g.多工的應用程式、
拼音檢查)
10
如何Multi-programming?
? Concurrent(並發)→利用排程(Scheduling)使多個process快速處
理,感覺很像同時處理很多事情。
? Single-core中實現,Single-threaded process
11
code data stack
files register
Thread~
從排程pop out出來的Task
就由單一個Thread來處理
如何Multi-programming?
? Parallelism(並行)→真的可以同時進行多個process
? 在multi-core中實現,multi-threaded process
12
code data stack1
files
register1 Thread1~
stack2 register2 Thread2~
從不同core pop out出來的task由一個
multi-threaded process接收處理
如何Multi-programming?
? 假設有150份15題的考卷,由3個TA來批改
? Data Parallelism→每個助教分別改50份考卷(1~15題)
? Task Parallelism→每個助教改150份考卷分別的前、中、後5題
? Task Parallelism發揮所長,理論上效率較好,但會有溝通的問題,
所以實做上兩者速度會差不多
? 參考SIMD、MIMD架構:https://read01.com/6PJKon.html
13
Thread的分類
? User Thread
? 在User端使用thread library產生thread
? e.g. Pthreads, Win32 Thread, Java Thread。
? Kernel Thread
? OS自己產生的thread
? 用來處理OS各種服務(e.g. system call), daemon的使用以及處理User
Thread
? e.g. Grand Central Dispatch(GCP), Open MP, Thread Pool
14
Multithreading Model
? Many-to-one→多個user thread連到單個kernel thread
15
Multithreading Model
? One-to-one→單個user-thread連到單個kernel-thread
? 最早實現multithreading的方式,但需要限制user-thread數量
以免kernel-thread負擔太重
16
Multithreading Model
? Many-to-many→允許多個user-thread連到有限多個kernel-
thread。
17
thread的分配方式
? Thread Pool→產生一個thread queue,有需要用時從中取出一
個thread出來用,而不用因thread不夠用而中斷目前正在執行的
thread。
18
thread的分配方式
? Grand Central Dispatch (GCP)→Apple用來開發支援multi-
core的應用程式使用。將一個個task包在由Block所組成的
Dispatch queue裡面,再一個個丟到Thread pool去處理。
19
thread的分配方式
? OpenMP→實現跨平台的multithreading,主thread會先產生一
系列的子thread(fork())進行parallelism(multi-core),結束後子
thread們將併回去主thread(join())。
20
Signal
? Signal handling→signal是通知特殊事件發生用的,通常由
Signal handler發出,而process接收到signal時則會用thread來
處理。
21
Thread的三種模式及刪除
? 欲刪除的thread稱為target thread
? state = Disabled
? target thread是不可被刪除的
? state = Defferred
? 預設值,週期性檢查target thread是否被刪掉
? state = Asynchrous
? 不管後果如何,直接刪掉target thread
22
Q & A
23

More Related Content

翱蝉读书会20170415