(四)操作系統進程(2)-學習筆記

線程管理

  • 爲什麼使用線程?
  • 什麼是線程?
  • 線程的實現?
  • 多線程編程接口舉例

1.1 爲什麼使用進程

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

  • 實體之間可以併發地執行
  • 實體之間共享相同的地址空間

這種實體就是進程。

1.2 什麼是線程

進程當中的一條執行流程

從兩個方面重新理解進程

  • 從資源組合的角度: 進程把一組相關的資源組合起來,構成了一個資源平臺(環境),包括地址空間(代碼段、數據段)、打開文件的各種資源;
  • 從運行的角度: 代碼在這個資源平臺上的一條執行流程。

線程 = 進程 - 共享資源

線程的優點:

  • 一個進程可以同時存在多個線程
  • 各個線程之間可以併發地執行
  • 各個線程之間可以共享地址空間和文件等資源

線程的缺點:

  • 一個線程崩潰,會導致其所屬進程的所有線程崩潰

chrome一個進程打開一個網頁

線程所佔進程提供的資源中,哪些是線程獨佔的,哪些是線程共享的?

如下圖所示:

在這裏插入圖片描述

代碼段、數據段和文件是共享的,寄存器、堆棧是獨立的。

線程與進程的比較

  • 進程是資源分配單位,線蟲是CPU調度的單位
  • 進程擁有一個完整的資源平臺,而線程只獨享必不可少的資源,如寄存器和棧
  • 線程同樣具有就緒、阻塞和執行三種基本狀態,同樣具有狀態之間的轉換關係
  • 進程能減少併發執行的時間和空間開銷
    • 線程的創建時間比進程短
    • 線程的終止時間比進程短
    • 同一進程內的線程切換時間比進程短(屬於同一進程的線蟲具有同一頁表)
    • 由於同一進程的各線程之間共享內存和文件資源,可直接進行不通過內核的通信

1.3 線程的實現

主要有三種線程的實現方式

  • 用戶線程: 在用戶空間實現(操作系統看不到的,應用程序的庫管理)
  • 內核線程: 在內核中實現(操作系統管理的)
  • 輕量級進程: 在內核中實現,支持用戶線程

用戶線程與內核線程的對應關係

  • 多對一
  • 一對一
  • 多對多

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

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

用戶線程缺點

  • 如果一個線程發起系統調用而阻塞,則整個進程在等待
  • 當一個線程開始運行後,除非他主動交出CPU的使用權,否則它所在的進程當中的其它線程將無法運行
  • 由於時間片分配給進程,故與其它進程比,在多線程執行時,每個線程得到時間片較少,執行會比較慢。

內核線程

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

  • 在支持內核線程的操作系統中,由內核來維護進程和線程的上下文信息(PCB和TCB)
  • 線程的創建、終止和切換都是通過系統調用/內核函數的方式來進行,由內核完成,因此係統開銷較大
  • 在一個進程當中,如果某個內核線程發起系統調用而阻塞,並不會影響其他內核線程的運行
  • 時間片分配給線程,多線程的進程獲得更多CPU的時間
  • Windows NT和Windows 2000/XP 支持內核線程

輕量級線程

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章