[操作系統] 線程管理


一、 為什么使用線程

  效率低下,多線程有效利用系統資源

  問題:進程之間如何通信,共享數據另外,維護進程的系統開銷較大:創建進程時,分配資源、建立PCB;撤消進程時,回收資源、撤消PCB;進程切換時,保存當前進程的狀態信息。

  需要提出一種新的實體,滿足以下特性:

  (1)實體之間可以並發地執行;
  (2)實體之間共享相同的地址空間;

 

  從兩個方面來理解進程

    1. 資源角度來看,進程把一組相關的資源組合起來,構成了一個資源平台,擺闊地址空間(代碼段,數據段)、打開的文件等各種資源

    2. 運行的角度看,代碼是在這個自由平台上的一條執行流程

  (所以,進程可以看為 資源管理,線程管理)

  線程可以同時共享進程的代碼 數據資源

  

  線程優點

    1. 一個進程可以同時存在多個線程

    2. 各個線程之間可以並發的執行

    3. 各個線程之間可以共享地址空間和文件信息

  線程的缺點

    一個線程崩潰,會導致所屬進程的所有線程崩潰 (不安全,安全可靠性沒有保證)

 

  線程所需資源

  

  單個線程:進程空間里面只有一個控制流

  多個線程:進程空間有多個控制流 每個控制流還不一樣,而且有多個堆棧和寄存器 但是能夠共享代碼段 數據段 打開的文件

 

  線程和進程的比較

    1. 進程的是資源分配單位,進程是CPU調度單位

    2. 進程擁有一個完整的資源平台,而線程只獨享必不可少的資源,比如寄存器和堆棧

    3. 線程同樣具有就緒、阻塞和執行三種基本狀態,同樣具有狀態之間的轉換關系

    4. 線程能減少並發執行的事件和空間開銷

      線程的創建時間比線程短 (可以直接只用進程的相關資源)

      線程的終止時間被線程短

      同一進程內的線程切換比進程切換快 (所有線程在一個頁表 切換的時候不需要切換頁表)

      由於進程的各個線程之間可以共享內存和文件資源,可以不用過內核通信 (數據交換效率高)

 

線程的實現(三種) 

  用戶線程:在用戶空間實現

    POSIX Pthreads,Mach C-threads,Solars threads

  內核線程:在內核中實現

    Windows、Solaris、Linux

  輕量級進程:在內核中實現,支持用戶線程

    Solaris (LightWeight Process)

 

  用戶線程:操作系統不可見的  (由用戶線程庫管理)

  內核線程:由操作系統關系的 操作系統可見的  (操作系統本身管理)

 

  用戶線程和內核線程的對應關系

    多對一:N個用戶線程對應一個內核線程

    一對一:一個用戶線程對應一個內核線程

    多對多:多個用戶線程對應多個內核線程

 

  用戶線程實現

    由TCB(Thread Control Block)控制管理 操作系統不可見 由線程庫管理

    在用戶空間實現的線程機制,它不依賴於操作系統的內核,由一組用戶級的線程庫函數來完成線程的管理,包括進程的創建、終止、同步和調度等。 

    

    ·由於用戶線程的維護由相應進程來完成(通過線程庫函數),不需要操作系統內核了解用戶線程的存在,可用於不支持線程技術的多進程操作系統;
    ·每個進程都需要它自己私有的線程控制塊(TCB)列表,用來跟蹤記錄它的各個線程的狀態信息(PC、棧指針、寄存器),TC由線程庫函數來維護
    ·用戶線程的切換也是由線程庫函數來完成,無需用戶態/核心態切換,所以速度特別快
    ·允許每個進程擁有自定義的線程調度算法。

    

    用戶線程缺點

      進程執行了一個阻塞的系統調用,那么整個進程都在等待  

      當一個線程開始運行之后,除非是主動交出CPU使用權,否則他所在的進程中的其他線程將無法運行

      由於時間片分配給進程,故與其他進程比,多線程在執行時,每個線程得到的時間片較少,執行較慢

      

內核線程

  TCB在在內核里面

  

  內核線程是指操作系統的內核當中實現的一種線程機制,由操作系統內核來完成線程的創建、終止和管理

    在支持內核線程的操作系統中,由內核來維護進程和線程的上下文信息(PCB和TCB)

    線程的創建、終止和切換都是通過系統調用/內核函數的方式來進行的,由內核完成,所以系統開銷比較大 (每次都有從內核態到用戶態的變化 開銷大)

    在一個進程中,如果某個內核進程發起系統調用而被阻塞,並不會影響其他內核線程的運行

    時間片分配給線程,多線程的進程獲得更多CPU時間

    Windows NT 和 Windows 2000/XP 支持內核線程

 

輕量級進程 (LightWeiht Process)

  它是內核支持的用戶線程。一個進程可有一個或多個輕量級進程,每個量級進程由一個單獨的內核線程來支持。(Solaris/Linux)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM