作業系統 執行緒的基本概念

2022-09-13 22:36:26 字數 2616 閱讀 1938

執行緒是作業系統排程的基本單位,它可以視為程序的乙個控制流。乙個程序包含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 年之前的時候,電腦並不像現在一樣普遍,它可不是一般人能碰的起的,除非是軍事或者學院的研究機構,而且當時大型...