執行緒是作業系統排程的基本單位,它可以視為程序的乙個控制流。乙個程序包含1個到多個線性,程序的第乙個執行緒隨著程序的啟動而建立,也就是程序的主線程。執行緒無法獨立於程序存在。
每個執行緒擁有自己的執行緒棧,用於儲存自己的私有資料。執行緒之間共享程序的許多資源,包括**段、資料段、堆、訊號處理函式、程序已經開啟的檔案描述符表等等。
一、執行緒的描述符(tcb)
執行緒控制塊(tcb)也即執行緒描述符
字段說明
執行緒id(tid)
執行緒唯一識別符號
棧指標指向執行緒自己的棧
程式計數器
指向執行緒的當前程式指令
執行緒狀態
執行,準備,等待,開始,完成
暫存器值
執行緒的暫存器值
pcb指標
指向執行緒所屬程序的pcb
每個執行緒擁有自己的標識,成為執行緒id或者tid。理論上tid只需在所屬程序範圍內唯一即可,不過實際linux系統在系統範圍內保證了tid唯一。
二、執行緒的控制
乙個程序內所有執行緒之間的關係是平等的,任何執行緒都可以對同一程序的其他執行緒進行如下管理:
操作型別
系統呼叫
說明建立執行緒
pthread_create
建立新執行緒時,呼叫執行緒需要給定新執行緒要執行的函式和對應的引數。該函式的返回值可以通過連線新執行緒得到。新執行緒建立成功,呼叫執行緒會得到新執行緒的id。
終止執行緒
pthread_cancel
請求終止某個執行緒。它向目標執行緒傳送乙個終止執行的請求後立刻返回,目標執行緒收到請求後,在適當的時機響應終止請求。
連線以終止的執行緒
pthread_join
等待目標執行緒終止,並獲取目標執行緒執行函式的返回值。如果乙個執行緒可被連線,那麼在終止的時候就必須連線,否則就變成殭屍執行緒,造成資源浪費。
分離執行緒
pthread_detach
將目標執行緒變得不可連線,預設情況執行緒是可被連線的。分類操作不可逆。對分離的執行緒任可執行終止操作。
退出執行緒
pthread_exit
exit
目標執行緒終止,其他執行緒正常執行。
程序以及所有相關執行緒全部終止。
三、執行緒的狀態
執行緒的狀態轉移如圖所示:
執行緒進入阻塞態一般包括以下幾個原因:等待io操作完成,等待未收到的訊號量、等待獲得互斥量、等待某個條件變數等等。
四、執行緒的排程
使用優先順序佇列來進行執行緒的排程。優先順序佇列是若干鍊錶組成的陣列,每個鍊錶表示相同優先順序的執行緒。
每個cpu包含兩個優先順序佇列:乙個是存放等待執行的執行緒,另乙個是過期的優先順序佇列。
系統總是從啟用的優先順序佇列中選擇下乙個要執行的執行緒,如果某個執行緒a執行了相當長的時間,且啟用的優先順序佇列中有相同優先順序的執行緒b在等待,則將執行緒a放入過期的優先順序佇列,cpu執行執行緒b。
如果啟用的優先順序佇列中沒有等待執行的執行緒時,則將兩個優先順序佇列身份互換,啟用的轉為過期的,過期的轉為啟用的。
只有處在執行態和就緒態的執行緒才能把被排程,處於睡眠狀態的執行緒無法被排程,將會被移除出優先順序佇列。
對於多cpu的計算機而言,一般情況下,乙個執行緒總是在乙個特定cpu上排程執行。但是當某些cpu過於忙碌,而某些cpu有很空閒,排程器就會把一些執行緒從忙碌的cpu上排程到空閒的cpu上。
五、執行緒模型
核心排程實體(kernel scheduling entity,kse)是可以被核心排程器排程的物件。
使用者級執行緒、核心級執行緒、兩級執行緒。
使用者級執行緒
核心級執行緒
兩級執行緒
實現原理
使用者級執行緒庫自主管理和協調執行緒,核心不可見。
核心負責執行緒的建立和管理
執行緒庫通過核心建立若干核心級執行緒,利用核心級執行緒對使用者級執行緒進行排程。
管理物件
使用者級的執行緒庫
作業系統核心
使用者級的執行緒庫和核心共同管理
是否需要切換特權級別否是
是與kse關係
多對一(m:1)
一對一(1:1)
多對多(m:n)
優點不需要核心參與,速度快,移植性高。
實現真正的併發執行,乙個執行緒被阻塞,不會影響到其他執行緒。
真正的併發執行。
核心資源消耗少。
執行緒管理效率高。
缺點無法正真的併發執行,乙個執行緒被阻塞,整個程序也會被阻塞。
對於核心排程器而言,任然是以程序為單位進行排程。
核心資源消耗大。
排程速度慢,需要切換到核心態。
乙個程序的執行緒數量有限制。
實現複雜,需要執行緒庫和核心共同協作。
執行緒安全性和可重入性
執行緒安全性:乙個**塊(函式)可以被多個執行緒併發執行,而且總能夠產生預期的結果,那麼該**塊具有執行緒安全性。
可重入性:如果程序中所以執行緒都可以併發的對乙個函式呼叫,並且無論執行的情況如何,該函式都可以產生預期的結果,那麼這個函式是可重入的。
六、程序和執行緒區別
ⅰ 擁有資源
ⅱ 排程
ⅲ 系統開銷
ⅳ 通訊方面
作業系統基本概念
一.程序的基本狀態 1.初始態 2.就緒態 3.執行態 4.等待態 5.終止 相互轉換關係如下 二.執行緒和程序區別 程序 是作業系統分配資源的最小單位 執行緒 是排程的基本單元,共享所在程序的檔案資料 有自己的棧和程式計數器 一般對於許多相同或相似的任務,傾向於將他們設計為多執行緒模型。因為程序占...
作業系統 基本概念
本文為自己學習 unix環境高階程式設計 而來的學習記錄 我的學習方 是將此書作為工具書來使用,當實際工作中遇到相關的問題針對性地學習知識圓點。基礎概念從嚴格意義上說,可講作業系統定義為一種軟體,它控制計算機硬體資源,提供程式執行環境。系統呼叫 共用函式庫 shell 應用程式 unix系統登陸 a...
作業系統基本概念
1 桌面作業系統 macos linux 2 伺服器作業系統 windows server 3 嵌入式作業系統 linux 4 移動裝置作業系統 iosandroid 基於linux 1965 年之前的時候,電腦並不像現在一樣普遍,它可不是一般人能碰的起的,除非是軍事或者學院的研究機構,而且當時大型...