4-1 線程的引入
1.線程的概念
①進程具有兩個基本屬性:
- 是一個擁有資源的獨立單位,可獨立分配虛地址空間、主存和其他
- 又是一個可獨立調度和分派的基本單位
這使得進程成爲併發執行的基本單位
②問題:由於進程是一個資源的擁有者,因而在創建、撤銷、切換調度時,系統需要付出較大的時空開銷,故進程的數目不宜過多,進程的切換頻率不宜過高,限制了併發程度。
③方法:將進程的兩個基本屬性分開
對於擁有資源的基本單位,不對其進行頻繁切換,對於調度的基本單位,不作爲擁有資源的單位,“輕裝上陣”
④以內線程以小的開銷來提高進程內的併發程度。
2.線程的引入
①在引入線程以前,進程是資源分配單位和CPU調度單位。引入線程以後,線程作爲CPU的調度單位,而進程只作爲資源分配單位。
②線程的特點:
- 只擁有必不可少的資源,如:線程狀態、程序計數器、寄存器上下文和棧
- 同樣具有就緒、阻塞和執行三種基本狀態
- 與同屬於一個進程的其他進程共享擁有的全部資源
- 可併發執行
3.線程的優點
減小併發執行的時間和空間開銷(線程的創建、退出和調度),因此容許在系統中建立更多的線程來提高併發程度
- 線程的創建時間比進程短
- 線程的終止時間比進程短
- 同進程內線程切換時間比進程短
- 進程內的線程共享文件和文件資源,可直接進行不通過內核的通信
4.線程 Thread
①線程是CPU運用的基本單元,包括程序計數器、寄存器集和棧空間
②一個進程可以有多個線程,一個線程與它的對等線程共享代碼段、數據段、操作系統資源,總體作爲一個任務
③傳統的或重型的進程等價於只有一個線程的任務。
④單線程進程和多線程進程,進程內的多線程共享代碼段、數據段和文件資源,各自有自己的寄存器、棧。
5.進程和線程的比較
①併發性:引入進程的OS中,不僅進程間可以併發執行,在一個進程中的多個線程也可以併發執行,使OS有更好地併發性,提高資源利用率和系統的吞吐量。
②擁有資源:進程是擁有資源的獨立單位,線程只有一些必不可少的資源。
③系統開銷:OS創建或撤銷進程的開銷明顯大於創建或撤銷線程的開銷。
④地址空間和其他資源:進程間相互獨立,同一進程內的各線程共享。
⑤通信:線程間可直接讀寫數據段來進行通信——需要進程同步和互斥手段的輔助,保證數據的一致性。
⑥調度:線程上下文切換比進程上下文切換快得多。
6.引入線程的好處
①響應度高:一個多線程應用在執行中,即使其中一個線程阻塞,其他的線程還看繼續進行,從而提高響應速度。
②資源共享:同一個進程的多個線程共享該進程的內存等資源。
③經濟性:創建和切換線程開銷低於進程。
④MP體系結構的運用:多線程更適用於多處理結構。
4-2 用戶線程和內核線程
1.內核線程
①由內核支持,在內核空間執行線程創建、調度和管理。
②內核級線程時,線程才真正是CPU調度的基本單元。
③內核線程依賴於OS核心
- 內核維護進程和線程的上下文信息
- 線程切換由內核完成
- 一個線程發生系統調用而阻塞,不會影響其他線程的運行
- 時間片分配給線程,多線程的進程獲得更多的CPU時間
2.用戶線程
①由用戶程序庫進程管理的線程,無需內核支持,以進程爲單位被OS調度。
②用戶線程不依賴於OS核心,由線程庫調度,無需用戶態/核心態切換,速度特別快
- 由用戶程序完成
- 內核不瞭解用戶程序的存在
- 用戶線程切換不需要內核特權
- 缺點:若內核爲單線程控制,一個用戶線程發生系統調用而紫色,則整個進程阻塞。時間片分配給進程,多線程則每個線程就慢。
3.用戶線程和內核線程的比較
①調度方式:內核線程的調度和切換與進程相似,用戶線程的調度不需要OS的支持。
②調度單位:用戶程序的調度以進程爲單位,在採用時間片輪轉調度算法時,每個進程分配相同的時間片。
4-3 多線程模型
用戶線程要映射到內核線程上執行
1.多對一
①多個用戶線程映射待同一個內核線程
②用於不支持內核線程的系統中
③任一時刻只有一個線程可以訪問內核(併發性低)
④用戶線程發起系統調用而阻塞,則整個進程阻塞
2.一對一
①每個用戶級線程映像進一個內核線程
②提供更好的併發性,一個線程阻塞是運行另一個線程運行
③每創建一個用戶線程需創建一個相應的內核線程,帶來額外開銷,許多系統限制應用中線程數目。
3.多對多
不限制用於的線程數,多個線程可併發
4.兩級模型
在多對多的基礎上發展兩級模型,多對多+一對一,運行一個用戶線程綁定到內核線程。
本文知識以及圖片來源:慕課_操作系統原理_田麗華
網址:https://www.icourse163.org/learn/XJTU-1003409001?tid=1206408203#/learn/content