操作系統之(一篇文章讓你簡單搞定:什麼是進程和線程)

1.爲什麼引入進程

1、我們知道,最早出現的OS系統是單道批處理系統,它是順序執行程序的,即一個一個地按先到先執行的順序依次執行。
作業運行過程中如果發生I/O請求,高速的CPU便需要等待低速的I/O操作完成,導致CPU資源利用率和系統吞吐量降低。
在這裏插入圖片描述

2、 而後爲了緩解這個矛盾,人們引入了多道批處理系統,該系統讓程序宏觀上併發執行,即在一道程序發起I/O請求時CPU不再選擇等待I/O完全運行結束,而是當一道程序因I/O請求而暫停運行時,CPU便立即轉去運行另一道程序,用戶既不能瞭解自己程序的運行情況,也不能控制計算機【因爲萬一有其中一道程序根本不會佔用CPU資源,但是系統還是會給它分配了同等的資源,所以根本不能達到人工控制】
在這裏插入圖片描述
3、再然後就誕生了分時操作系統,把處理器的運行時間分成很短的時間片,按時間片輪流把處理器分配給各聯機作業使用。若某個作業在分配給它的時間片內不能完成其計算,則該作業暫時停止運行,把處理器讓給其他作業使用,等待下一輪再繼續運行;將程序分成一小片一小片的,這個進程執行一點,那個進程執行一點。雖然在內部進程的執行是一段一段的,但是CPU的速度很快的(速度都是納秒級別的),所以我們是感受不到進程執行過程中的停頓。
在這裏插入圖片描述
解釋:
1.上面的簡單操作系統通過一些系統指令去操作程序,然而程序本身也是一組指令的集合,指令操作指令,這是一個靜態的概念,無法描述程序在內存中的執行情況,即我們無法從程序的字面上看出它何時執行,何時停頓,也無法看出它與其它執行程序的關係。

2.多道程序在執行時,需要共享系統資源,從而導致各程序在執行過程中出現相互制約的關係,程序的執行表現出間斷性的特徵.這些特徵都是在程序的執行過程中發生的,是動態的過程。

3.程序這個靜態概念已不能如實反映程序併發執行過程的特徵.**爲了深刻描述程序動態執行過程的性質,**人們引入“進程(Process)”概念。

4.引入進程想要實現的目標是什麼呢?

-資源對多個應用程序是可用的;
-物理處理器在多個應用程序間切換以保障所有程序都在執行中;
-處理器和IO設備能得到充分利用。

5.所有現代操作系統採用的方法都是依據對應於一個或多個進程存在的應用程序執行的一種模型。

2.進程究竟是什麼?進程的定義和屬性:

在這裏插入圖片描述

程序是一個沒有生命的實體,只有處理器賦予程序生命時,它才能成爲一個活動的實體,我們稱其爲進程

1、從理論角度看:進程是對正在運行的程序過程的抽象

怎麼理解這句話呢

正在運行的程序過程的抽象

你想象一下你在打LOL程序的時候,電腦需要把程序抽象成進程進行管理,什麼時候操作什麼指令。

從實現角度看:是一種數據結構,目的在於清晰地刻劃動態系統的內在規律,有效管理和調度進入計算機系統主存儲器運行的程序。


2、上面的話也許有點難以理解,那是因爲沒了解它的狹義和廣義定義:

狹義定義:進程就是一段程序執行過程

廣義定義【官方定義】:進程是一個具有一定獨立功能的程序關於某個數據集合的一次運行活動。它是操作系統動態執行的基本單元,在傳統的操作系統中,進程既是基本的分配單元,也是基本的執行單元。

仔細看就會發現,進程的目的是在於清晰地刻畫動態系統的內在規律,進而纔能有效管理和調度進入計算機系統主存儲器運行的程序

進程的定義總結爲一句話:一個執行中的程序的實例

進程提供給應用程序的關鍵抽象:
①進程是一個獨立的邏輯控制流,它提供一個假象,好像我們的程序獨佔地使用處理器
②進程是一個私有的地址空間,它提供一個假象,好像我們的程序獨佔地使用存儲器系統


3、進程的一般特徵:

**動態性:**進程的實質是程序在多道程序系統中的一次執行過程,進程是動態產生,動態消亡的。【這個很關鍵】
**併發性:**任何進程都可以同其他進程一起併發執行
**獨立性:**進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位;【這個也很關鍵】
**異步性:**由於進程間的相互制約,使進程具有執行的間斷性,即進程按各自獨立的、不可預知的速度向前推進


4、進程的結構特徵:進程由進程控制塊【PCB】、數據段和正文段三部分組成:

進程控制塊(PCB):進程控制塊包含了充分的信息,這樣就可以中斷一個進程的執行,並且在後來恢復執行進程時就好像進程未被中斷過一樣。PCB是進程存在的唯一標誌,PCB與進程同生死。系統創建進程時會產生一個PCB,撤銷進程時,PCB也自動消失。

數據段系統把進程的數據段又劃分成三部分:
用戶棧區(供用戶程序使用的信息區);
用戶數據區(包括用戶工作數據和非可重入的程序段);
系統數據區(包括系統變量和對換信息)。

正文段能被若干進程共享,爲了管理可共享的正文段,UNIX設置了一張正文表,每個正文段都佔用一個表目,用來指出該正文段在內存和磁盤上的位置、段的大小以及調用該段的進程數等情況。

**注意:**多個不同的進程可以包含相同的程序:一個程序在不同的數據集裏就構成不同的進程,能得到不同的結果;
但是執行過程中,程序不能發生改變。

可以這麼說:進程 = 程序代碼 + 相關數據 + 進程控制塊


3.進程的狀態和轉換

進程的三種基本狀態:

**1. 就緒狀態:**進程已獲得除處理器外的所需資源,等待分配處理器資源;只要分配了處理器進程就可執行。就緒進程可以按多個優先級來劃分隊列。例如,當一個進程由於時間片用完而進入就緒狀態時,排入低優先級隊列;當進程由I/O操作完成而進入就緒狀態時,排入高優先級隊列。
   **2. 運行狀態:**進程佔用處理器資源;處於此狀態的進程的數目小於等於處理器的數目。在沒有其他進程可以 執行時(如所有進程都在阻塞狀態),通常會自動執行系統的空閒進程。
   **3. 阻塞狀態:**由於進程等待某種條件(如I/O操作或進程同步),在條件滿足之前無法繼續執行。該事件發生 前即使把處理機分配給該進程,也無法運行。
   在這裏插入圖片描述
進程狀態的轉換:
   
運行—>就緒:這是由資源調度引起的,主要是進程佔用CPU的時間過長,人家嫌棄它就讓它去等待一下
就緒—>運行:運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適的進程分配CPU
運行—>阻塞:發生了I/O請求或等待某件事的發生,突然就有別的請求發生,導致運行變阻塞
阻塞—>就緒:進程所等待的事件發生,就進入就緒隊列【隊列是先進先出的表】

這裏可以比喻成去超市排隊買菜,【運行—>就緒】攤位只有一個窗口的時候一次性只能和一個人買菜,買菜時間太久了就一邊去繼續排隊,排隊的過程其實就是就緒狀態,【就緒—>運行】輪到你了纔可以再次購買,【運行—>阻塞】當你正在窗口前買菜的時候,突然有人插隊了,直接推開你,【阻塞—>就緒】這時候你只能重新去排隊,誰讓插隊那個人比較霸道。

以上4種情況可以相互正常轉換,不是還有兩種情況嗎?

阻塞–>運行:即使給阻塞進程分配CPU,也無法執行,操作系統載進行調度時不會載阻塞隊列進行挑選,其調度的選擇對象爲就緒隊列:
就緒–>阻塞:因爲就緒態根本就沒有執行,何來進入阻塞態?

這裏可以比喻成,你去超市買菜的時候,看到很多很多人在排隊買菜,【阻塞–>運行】你想強制插隊進去窗口直接買菜,但是排隊的人就不同意了,同樣,【就緒–>阻塞】你在排隊買菜的時候快排到自己了會考慮強制插隊嗎?

在這裏插入圖片描述

4.什麼是進程上下文

一開始小編也是很疑惑,什麼是上下文,上面和下面的內容嗎?其實不然,我們都知道萬物必有因果,有上文才有下文,因此

操作系統中把進程運行的時的物理實體和運行的環境合稱爲進程上下文

△那麼進程上下文我們知道其實是系統運行時提供的環境了,系統調度新進程佔有處理器【可以暫時看做CPU】的時候,新老進程隨之發生上下文切換,這個上下文是什麼概念呢?老進程退出處理器的時候需要先保存其退出運行環境,然後退出,也就是說保存其退出進程上下文,然後退出處理器,這時候新進程要進來處理器了,爲了適應處理器的環境,新進程需要先創建新的運行環境,也就是說先創建新的進程上下文。新老進程發生上下文切換,進程的運行被認爲是在上下文中執行。


進程切換的步驟:
1.保存中斷進程的處理器現場情況
2.修改被中斷進程的進程控制塊有關信息,相當於創建一個新的上下文環境
3.把被中斷進程的PCB加入有關隊列
4.選擇下一個佔有處理器運行的進程,這時候新進程要準備進來了,因爲第二步已經爲它創建好了環境
5.修改被選中進程的PCB的有關信息
6.設置被選中進程的地址空間,回覆存儲管理信息
7.根據被選中進程的上下文信息恢復處理器現場
8.處理器開始新的進程處理

怎麼樣,是不是覺得進程的切換很簡單。

5.進程的控制和管理

上面說了進程從何而來,進程有什麼定義,進程有什麼狀態的切換,進程切換的進程上下文是什麼…說了這些,相信你一定很好奇,進程這麼厲害,那麼進程是如何控制,誰來控制的呢?

進程是由處理器控制,控制的內容包括:進程創建、進程撤銷、進程阻塞和喚醒進程等,這種功能由操作系統中的原語實現

原語是什麼呢?

原語是在管態下執行的,就是有管理員權限的時候執行,這個原語和我們所學的機器指令類似,其特點就是執行過程中不允許被中斷,是一個不可分割的基本單位,執行的時候是順序的不是併發的

因此進程有兩種執行模式:

一種是:非特權態常稱爲用戶態/目態,這是因爲用戶程序通常在該模式下運行

另一種是特權態可稱爲系統態/內核態/管態

既然知道了處理器可以進行進程的控制,現在,我們用掌握的知識創建一個進程吧

步驟:給新進程分配一個唯一的進程標識符->給進程分配空間->初始化進程控制塊PCB->設置正確的連接->創建或擴充其他數據結構
在這裏插入圖片描述
創建成功後假設計算機裏面有很多進程該如何切換呢?
步驟:在某一時刻,一個正在運行的進程被中斷,操作系統指定另一個進程爲運行態,並把控制權交給這個進程

這時候系統不需要一個進程該如何撤銷呢?
在這裏插入圖片描述
進程的阻塞和喚醒:

1.引起進程阻塞和喚醒的事件

1)請求系統服務
2)啓動某種操作
3)新數據尚未到達
4)無新工作可做

2.進程阻塞過程:
正在執行的進程,當發現上述某事件後,由於無法繼續執行,於是進程便通過調用阻塞原語block把自己阻塞。可見,進程的阻塞是進程自身的一種主動行爲。進入block過程後,由於此時該進程還處於執行狀態,所以應先立即停止執行,把進程控制塊中的現行狀態由執行改爲阻塞,並將PCB插入阻塞隊列。如果系統中設置了因不同事件而阻塞的多個阻塞隊列,則應將本進程插入到具有相同事件的阻塞 (等待)隊列。最後,轉調度程序進行重新調度,將處理機分配給另一就緒進程,並進行切換,亦即, 保留被阻塞進程的處理機狀態(在PCB中),再按新進程的PCB中的處理機狀態設置CPU環境。
3.進程喚醒過程:
當被阻塞的進程所期待的事件出現時,如I/O完成或者其所期待的數據已經到達,則由有關進程(比如, 用完並釋放了該I/O設備的進程)調用喚醒原語wakeup(),將等待該事件的進程喚醒。喚醒原語執行的過程是:首先把被阻塞的進程從等待該事件的阻塞隊列中移出,將其PCB中的現行狀態由阻塞改爲就緒,然後再將該PCB插入到就緒隊列中。
在這裏插入圖片描述

6.爲什麼要引入線程

前面所學的進程我們瞭解到,創建和切換進程的時候既有進程上下文環境初始化,又有進程退出處理器時要保存其進程結束的上下文環境,這樣對系統的時間空間開銷都很大,效率很低,這時候,圍繞着效率低這件事情,我們引入線程的概念,以小的開銷來提高進程內的併發程度

那麼要提高效率,我們提供了一種基本思路:

  • 把進程的兩項功能①獨立分配資源②被調度分派執行進行分離
  • 進程作爲系統資源分配和保護的獨立單位,不需要頻繁地切換和加載
  • 線程作爲系統調度和分派執行的基本單位,會被頻繁地調度和切換

7.線程的概念

線程是進程內的一個相對獨立的可執行單元;
線程是操作系統中的基本調度單元,在線程中包含調度所需的信息。

一個進程至少有一個線程,可有多個線程。

線程並不擁有資源,而是共享和使用包含它的進程所擁有的所有資源。
線程在需要時也可創建其他線程。線程有自己的生命期,也有狀態變化。

和進程一樣,進程有進程控制塊【PCB】裏面存儲了充分被調用的信息,因此,每一個線程都有一個線程控制塊【thread】,用於保護自己私有信息,主要由四個基本部分組成:

一個唯一的線程標識符 、一組寄存器 、兩個棧指針 、一個私有存儲區
在這裏插入圖片描述
爲什麼線程又被叫做輕量級進程呢?

線程運行在進程的上下文中,並共享使用進程的資源和環境。

系統調度的基本單位是線程而不是進程,每當創建一個進程時,至少要同時爲該進程創建一個線程。

線程狀態有:運行、就緒、等待和終止,狀態轉換也類似於進程。

線程必須在某個進程內執行,一個進程可以包含一個線程或多個線程
在這裏插入圖片描述

8.引入線程的好處

1.兩個線程的調度切換方便:線程是調度的基本單位,進程是資源的擁有單位

2.進程可以由一個或多個線程組成。在同一進程中,線程的切換不會引起進程的切換,不同進程間的線程切換則會引起進程切換。

3.共享同一地址空間資源:不同進程間的地址空間是相對獨立的,而同一進程的各線程共享同一地址空間,可訪問其隸屬的進程資源。

4.線程通信方便:同一進程內的線程共享內存和文件,因此它們之間可以相互通信,無須調用內核。

5.佔用資源少:線程除了必不可少的一點資料 (私有堆棧和程序計數器)外,自己不擁有系統資源.

9.進程和線程的區別

1.進程是cpu資源分配的最小單位,線程是cpu調度的最小單位。以前進程既是資源分配也是調度的最小單位,後來爲了更合理的使用cpu(實際上是cpu性能越來越好),纔將資源分配和調度分開,就有了線程。線程是建立在進程的基礎上的一次程序運行單位。

2.進程是應用程序的執行實例。比如說,當你雙擊的Microsoft Word的圖標,你就開始運行的Word的進程。線程是執行進程中的路徑。另外,一個過程可以包含多個線程。啓動Word時,操作系統創建一個進程並開始執行該進程的主線程。由於一個進程可以由多個線程,線程可以被認爲是“輕量級”的過程。【參考】

在這裏插入圖片描述

內核不知道線程的活動,但仍然管理線程的進程的活動。當線程調用系統調用時,整個進程阻塞,但對線程庫來說,線程仍然是運行狀態,即線程狀態是與進程狀態獨立的。

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