1、進程
進程是指一個具有一定獨立功能
的程序在一個數據集合
上的一次動態執行
過程。
1.1 概念:
進程的組成:
進程包含了正在運行的一個程序的所有狀態信息
。
- 代碼
- 數據
- 狀態寄存器
- CPU狀態CR0、指令指針IP
- 通用寄存器
- AX、BX、CX …
- 進程佔用系統資源
- 打開文件、已分配內存 …
進程的特點:
- 動態性
- 可以動態地創建、結束進程
- 併發性
- 進程可以被獨立調度並佔用處理器運行
- 獨立性
- 不同進程的工作不相互影響
- 制約性
- 因訪問共享數據/資源或進程間同步而產生制約
1.2 進程控制塊(PCB):
進程控制塊是操作系統管理控制進程運行所用的信息集合
。
作用:
- 操作系統用PCB來描述進程的
基本情況
以及運行變化
的過程; - PCB是進程存在的
唯一標誌
;- 每個進程在操作系統中有一個對應的PCB
組成:
- 進程標識信息
- 處理器現場保存
- 進程控制信息
- 調度和狀態信息(調度進程和處理器使用情況)
- 進程間通信信息(進程間通信相關的各種標識)
- 存儲管理信息(進程映像存儲空間數據結構)
- 進程所用資源(進程使用的系統資源,如打開文件等)
- 有關數據結構連接信息(與PCB線管的進程隊列)
1.3 進程的生命週期劃分
- 進程創建
- 進程執行
- 進程等待
- 進程搶佔
- 進程喚醒
- 進程結束
1.4 三狀態進程模型:
進程在整個生命週期分爲三種基本狀態:
- 運行
- 就緒(進程獲得除CPU之外的所需資源,得到CPU即可運行)
- 等待(進程正在等待某一事件的出現而暫停運行)
NULL -> 創建 -> 就緒 -> 運行 -> 結束
運行 -> 就緒:處於運行狀態的進程在其運行過程中,由於分配給它的處理器時間片用完而讓出處理器
運行 -> 等待:當進程請求某資源而必須等待
等待 -> 運行:當進程等待某事件到來時,它從阻塞狀態變到就緒狀態
1.5 掛起進程模型:
處於掛起狀態的進程映像在磁盤
上,目的是減少進程佔用內存
。
在此類系統中,進程增加了兩個新狀態:
- 掛起就緒態(ready,suspend)
掛起就緒態表明了進程具備運行條件
但目前在二級存儲器
中,只有當它被對換到主存才能被調度執行 - 掛起等待態(blocked,suspend)掛起等待態則表明了進程正在
等待某一個事件
且在二級存儲器
中。
引起進程狀態轉換的具體原因如下:
- 等待態—→掛起等待態:如果當前不存在就緒進程,那麼至少有一個等待態進程將被對換出去成爲掛起等待態;操作系統根據當前資源狀況和性能要求,可以決定把等待態進程對換出去成爲掛起等待態。
- 掛起等待態—→掛起就緒態:引起進程等待的事件發生之後,相應的掛起等待態進程將轉換爲掛起就緒態。
- 掛起就緒態—→就緒態:當內存中沒有就緒態進程,或者掛起就緒態進程具有比就緒態進程更高的優先級,系統將把掛起就緒態進程轉換成就緒態。
- 就緒態—→掛起就緒態:操作系統根據當前資源狀況和性能要求,也可以決定把就緒態進程對換出去成爲掛起就緒態。
- 掛起等待態—→等待態:當一個進程等待一個事件時,原則上不需要把它調入內存。但是在下面一種情況下,這一狀態變化是可能的。當一個進程退出後,主存已經有了一大塊自由空間,而某個掛起等待態進程具有較高的優先級並且操作系統已經得知導致它阻塞的事件即將結束,此時便發生了這一狀態變化。
- 運行態—→掛起就緒態:當一個具有較高優先級的掛起等待態進程的等待事件結束後,它需要搶佔 CPU,而此時主存空間不夠,從而可能導致正在運行的進程轉化爲掛起就緒態。另外處於運行態的進程也可以自己掛起自己。
- 新建態—→掛起就緒態:考慮到系統當前資源狀況和性能要求,可以決定新建的進程將被對換出去成爲掛起就緒態。
可以把一個掛起進程等同於不在主存的進程,因此掛起的進程將不參與進程調度直到它 們被對換進主存。一個掛起進程具有如下特徵:
- 該進程不能立即被執行。
- 掛起進程可能會等待一個事件,但所等待的事件是獨立於掛起條件的,事件結束並不能導致進程具備執行條件。
- 進程進入掛起狀態是由於操作系統、父進程或進程本身阻止它的運行。
- 結束進程掛起狀態的命令只能通過操作系統或父進程發出。
2、線程
由於一個進程的不同部分需要併發執行,且能共享資源,因此在進程內部增加一類實體,滿足以下特性:
- 實體之間可以
併發
執行 - 實體之間
共享
相同的地址空間
這種實體就是線程。
線程是進程的一部分,描述指令流執行狀態,它是進程中的指令執行流
的最小單元,是CPU調度
的基本單元。
進程與線程的關係:
線程 = 進程 - 共享資源
線程的優點:
- 一個進程中可以同時存在
多個線程
; - 各個線程之間可以
併發
地執行; - 各個線程之間可以
共享
地址空間和文件等資源;
線程的缺點:
- 一個線程崩潰,會導致其所屬的進程的所有線程崩潰;
線程與進程的比較:
- 進程是
資源分配
單位,線程是CPU調度
單位; - 進程擁有一個
完整的資源平臺
,而線程只獨享指令流執行的必要資源
,如寄存器和棧; - 線程具有就緒、等待和運行三種基本狀態和狀態間的轉換關係;
- 線程能
減少
併發執行的時間
和空間
開銷;- 線程的創建時間比進程短;
- 線程的終止時間比進程短;
- 同一進程內的線程切換時間比進程短;
- 由於同一進程的各線程間共享內存和文件資源,可以不通過內核進行直接通信;