進程與線程相關

以下內容整理自互聯網,僅用于個人學習


1. 進程

1.1 進程的定義

  • 進程是程序運行的一次執行過程。
  • 進程是一個程序及其數據在處理機上順序執行所發生的活動。
  • 進程是具有獨立功能的程序在一個數據集合上運行的過程,它是系統進行資源分配和調度的一個獨立單位。

為了使參與并發執行的程序(含數據)能獨立的運行,必須為之配置一個專門的數據結構,稱為進程控制塊(Process Control Block,PCB)。系統利用PCB來描述進程的基本情況和運行狀態,進而控制和管理進程。相應地,由程序段、相關數據段和PCB三部分過程了進程映像(進程實體)。所謂創建進程,實質上是創建進程映像中的PCB;而撤銷進程實質上是撤銷進程的PCB。值得注意的是,進程映像是靜態的,進程則是動態的

PCB是進程存在的唯一標識!

引入進程實體的概念后,我們可以把傳統操作系統中的進程定義為:
進程是進程實體的運行過程,是系統進行資源分配和調度的一個獨立單位。

1.2 進程狀態轉換

  • 運行狀態:進程正在處理機上運行。但處理機環境下,每一時刻最多只有一個進程處于運行狀態。
  • 就緒狀態:進程已處于準備運行狀態,即進程獲得了除了處理機之外的一切所需資源,一旦得到處理機即可運行。
  • 阻塞狀態:又稱為等待狀態。進程正在等待某一事件而暫停運行,如等待某資源為可用(不包括處理機)或等待輸入/輸出完成。即使處理器空閑,該進程也不能運行。
  • 創建狀態:進程正在被創建,尚未轉入到就緒狀態。進程創建需要多個步驟:首先申請一個空白的PCB,并向PCB中填寫一些控制和管理進程的信息;然后由系統為該進程分配運行時所必需的資源;最后把該進程轉入就緒狀態。
  • 結束狀態:進程正從系統中消失,這可能是進程正常結束或其他原因中斷退出運行。當進程需要結束運行時,系統首先必須置該進程為結束狀態,然后進一步處理資源釋放和回收等工作。
進程狀態轉換.jpg
  • 就緒→運行:處于就緒狀態的進程被調度后,獲得處理機資源(分派處理機時間片),于是進程由就緒狀態轉運行狀態。
  • 運行→就緒:處于運行狀態的進程在時間片用完后,不得不讓出處理機,從而進程由運行狀態轉換為就緒。此外,在可剝奪的操作系統中,當有更高級的進程就緒時,調度程度將正執行的進程轉換為就緒狀態,讓更高優先級的進程執行。
  • 運行→阻塞:當進程請求某一資源(如外設)的使用和分配或等待某一事件的發生(如I/O操作的完成)時,它就從運行狀態轉換為阻塞狀態。進程以系統調用的形式請求操作系統提供服務,這是一種特殊、由用戶態程序調用操作系統內核過程的形式。
  • 阻塞→就緒:當進程等待的時間到來時,如I/O操作結束或中斷結束時,終端處理程序必須把相應的進程狀態由阻塞狀態轉為就緒狀態。

2. 線程

引入進程的目的,是為了使多道程序并發執行,以提高資源利用率和系統吞吐量;而引入線程,則是為了減少程序在并發執行時所付出的時空開銷,提高操作系統的并發性能。

線程就是"輕量級進程",它是一個基本的CPU執行單元,也是程序執行流的最小單元,由線程ID、程序計數器、寄存器集合和堆棧組成。線程自己不擁有系統資源,只擁有在運行中必不可少的資源,但與其他線程共享進程所擁有的全部資源。

線程也有 就緒阻塞運行 三種基本狀態。

引入線程后,進程的內涵發送了改變:進程只作為除CPU以外系統資源
的分配單元,線程則作為處理機分配單元。

3. 進程與線程比較

3.1 調度

在傳統操作系統中,用于資源和獨立調度的基本單位都是進程。在引入線程的操作系統中,線程是獨立調度的基本單位,進程是資源擁有的基本單位。統一進程中,線程的切換不會引起進程切換。在不同進程中的線程切換,如從一個進程內的線程切換到另一個進程的線程時,會引起進程切換。

3.2 資源

不論是傳統操作系統還是設有線程的操作系統,進程都是擁有資源的基本單位,而線程不擁有系統資源(也有一點必不可少的資源),但線程可以訪問其隸屬進程的系統資源。

3.3 并發性

在引入線程的操作系統中,不僅進程之間可以并發執行,而且多個線程之間也可以并發執行,從而使操作系統具有更好的并發性,提高系統的吞吐量。

3.4 系統開銷

由于創建或撤銷進程時,系統都要為之分配或回收資源,如內存空間、I/O設備等,因此操作系統所付出的開銷遠大于創建或撤銷線程時的開銷。

類似的,在進行進程切換時,涉及當前執行進程CPU環境的保存以及新調度到進程CPU環境的設置,而線程切換只需保存和設置少量寄存器內容,開銷很小。

此外,由于同一個進程內的多個線程共享進程的地址空間,因此,這些線程之間的同步與通信非常容易實現,甚至無需操作系統的干預。

3.5 地址空間和其他資源(如打開文件)

進程的地址空間之間相互獨立,同一進程的各線程間共享進程的資源,某進程內的線程對于其他進程不可見。

3.6 通信

進程間通信(IPC)需要進程同步和互斥手段輔助,以保證數據的一致性,而線程間可以直接讀寫進程數據段(如全局變量)來進行通信。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 11.1進程的概念 進程的定義 進程是指一個具有一定獨立功能的程序在一個數據集合上的一次動態執行過程 精髓:正在執...
    龜龜51閱讀 493評論 0 1
  • 又來到了一個老生常談的問題,應用層軟件開發的程序員要不要了解和深入學習操作系統呢? 今天就這個問題開始,來談談操...
    tangsl閱讀 4,172評論 0 23
  • 進程和線程 進程線程的區別1、進程是什么?是具有一定獨立功能的程序、它是系統進行資源分配和調度的一個獨立單位,重點...
    HeartGo閱讀 1,236評論 0 4
  • 小紅帽住在一個森林里,她木制的臥室里掛滿了紅色帽子,春夏秋冬每個季節都有數不清的帽子,她出門總是選一頂自己當天喜歡...
    梅子Mey閱讀 808評論 0 1
  • 說字符串之前,我先說說字符,所謂字符(Character)是文字與符號的總稱,包括文字、圖 形符號、數學符號等。 ...
    魂夢云邊閱讀 490評論 1 0