# OS筆記-Chapter 4: Threads ###### tags: `OS` --- #### 目錄 * 總論 [Chapter 1: Introduction](https://hackmd.io/NoZq3J7IQvOQpcbo_tctjA) [Chapter 2: Operating-System Structures](https://hackmd.io/OKykRLBESI6v9a13HgS35A) * 行程管理 [Chapter 3: Processes](https://hackmd.io/HOqN-iQ3RIKIC-NB9QjBIQ) <font color="red">Chapter 4: Threads</font> [Chapter 5: CPU Scheduling](https://hackmd.io/IT5g2wHzTdOtMSDXPVEpOw) [Chapter 6: Process Synchronization](https://hackmd.io/rv-PNe3ESxi08PElyUTc4Q) [Chapter 7: Deadlocks](https://hackmd.io/Uu0jDK-rSyKNKq690y146g) * 記憶體管理 [Chapter 8: Main Memory](https://hackmd.io/4KS_yPkBQzGZfHDisPciog) [Chapter 9: Virtual Memory](https://hackmd.io/yirxZFn8Rz2wT56AAR7Sxw) * 儲存裝置 [Chapter 10: File-System Interface](https://hackmd.io/aNPWKsFhTlGc-WFgQ__KRg) [Chapter 11: File System Implementation](https://hackmd.io/bFcrlmefQsGp6hZdbI1MHQ) [Chapter 12: Mass-Storage Systems](https://hackmd.io/9Y7Qo0OERda6htK7OOI36Q) [Chapter 13: I/O Systems](https://hackmd.io/VNwXrhJPSo-l_t9tUBhYIg) * 保護和安全 [Chapter 14: Protection](https://hackmd.io/izkd4JwXRwub_ZmhSMTlNw) [Chapter 15: Security](https://hackmd.io/ofyvDidvQf-PxLMMZYhtsg) --- ### 概論 * 執行緒是CPU使用時的一個基本單位,它是由一個執行緒ID、程式計數器、一組暫存器、一個堆疊空間組成。它和屬於同一行程的其它執行緒共用程式碼區域、資料區域、作業系統資源  * 如果一個網頁伺服器只有一個執行緒,它一次只能服務一個客戶,客戶的等待時間就會很長。 * 當伺服器收到一項要求時,它就會產生一個個別的行程去服務該要求 * 行程的產生是費時且耗費資源的 * 讓一個行程包含許多執行緒來達到相同的目的,比較有效率  * 現在大部份的作業系統是多執行緒 * 多執行緒的好處 * 應答(Responsiveness):當部分的程式被暫停或執行冗長的操作時,允許應用程式保持對使用者的回應 * 資源分享(Resource Sharing):共享資源,比共享記憶體或訊息傳遞還容易 * 經濟(Economy):產生和內容交換都比形成還要經濟 * 可擴展性(Scalability):多執行緒可以並行在多核心處理架構上 ### 多核心程式(Multicore Programming) * 多核心/多處理器(multicore/multiprocessor):無論多個運算核心是在單一或多個CPU晶片上,都稱為多核心/多處理器 * 並行(concurrency): * 單運算核心:執行緒隨時間交錯的執行  * 平行(parallelism): * 多運算核心:可以平行執行(同一時間)  * 多核心程式的挑戰: * 辨識任務(Dividing activities):找出可以切割成獨立並行的任務 * 平衡(Balance):評估任務是否值得使用一個獨立的核心(任務對行程貢獻不同) * 資料分割(Data splitting):資料必須被分割才能在個別的核心執行 * 資料相依(Data dependency):確認兩個或多個任務間的資料相依性 * 測試與偵錯(Testing and debugging) * Amdahl’s Law * S is serial portion * N processing cores  * 當core數(N)趨近於無窮大時,加速會收斂到1/S * 平行的類型 * 資料平行(Data parallelism):強調分配同一筆資料的子集合到多個核心運算,例如:(1+2+...+N)分成(1+2+...+N/2-1)與(N/2+....+N) * 任務平行(Task parallelism):將多個執行緒分配給核心,執行不同的任務 ### 多執行緒模式(Multithreading Models) * 使用者執行緒(User Threads):使用者層次 * 核心執行緒(Kernel Threads):由作業系統支援管理 * 多對一(Many-to-One): * 一個呼叫暫停,整個行程暫停 * 不能平行  * 一對一(One-to-One): * 產生核心執行緒的負擔可能造成應用程式的性能上的負擔  * 多對多(Many-to-Many):  * 二層模式(two-level model): * 類似多對多,但允許使用者執行緒被綁到一個核心執行緒 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up