操作系統-進程的狀態以及轉換

進程的引入

程序:就是一個指令序列
早期的計算機(只支持單道程序)
內存中把一個應用程序分爲程序段和數據段,這個應用程序在運行期間佔據內存,IO設備,CPU,所以浪費的資源較大。在引入多道批處理後,內存中可以放多個程序,各個程序的代碼段和數據段都不相同,操作系統是怎樣找到各個程序存放的位置呢?

爲了方便操作系統管理各個程序併發執行,引入了進程,進程實體的概念,系統在執行一個程序之前,會爲每個程序配置一個數據結構,稱爲進程控制塊(PCB),用來描述進程的各種信息(如程序代碼存放的位置)

進程的定義

程序段、數據段、PCB三部分組成了進程實體(進程映象)。一般情況下,我們把進程實體簡稱爲進程。例如,所謂創建進程,實質上是創建進程實體中的PCB ;而撤銷進程,實質上是撤銷進程實體中的PCB。
從不同的角度來看,進程喲不同的定義,例如:

  1. 進程是程序運行的一個過程
  2. 進程是一個程序及其數據在處理機上順序執行時所發生的活動
  3. 進程是具有獨立功能的程序在數據集合上運行的過程,他是系統資源分配和 調度的基本單位(在線程出現之前)

進程就是進程實體的運行過程,是系統進行資源分配和調度的基本單位。

注意:嚴格上來講進程和進程實體是不一樣的,進程實體是靜態的,進程是動態執行的一個過程。不過除非題目專門考察二者的區別否則可以認爲進程就是進程實體。

進程的組成

進程由PCB,程序段,數據段三部分組成;
PCB:進程控制塊,包含有進程的描述信息(UID,PID),進程控制和管理信息(進程優先狀態,進程優先級),資源分配清單(程序段指針,數據段指針),處理機相關信息(寄存器的值)。
程序段:存放要執行的代碼
數據段:存放在運行過程中的各種數據

進程的組織形式

鏈接方式:按進程狀態將PCB分爲多個隊列,
索引方式:按照進程狀態建立幾張索引表,表的每項都指向一個PCB
以上兩種方式操作系統都持有指向各個索引表的指針。

進程的特徵

動態性:動態性是進程最基本的特徵,進程是程序的一次執行過程,是動態的產生、變化、消亡
併發性:內存中有多個進程實體,各個進程可以併發執行
獨立性:進程是能夠獨立運行,獨立獲取資源、獨立接收調度的基本單位
異步性:各個進程按各自獨立的,不可預知的速度向前推進,操作系統要提供“進程同步機制”來解決異步問題
結構性:每個進程都會配置一個PCB。結構上看,進程由程序段、數據段、PCB組成。

進程的狀態

進程是程序的一次執行。在這個執行過程中,有時進程正在被CPU處理,有時又需要等待CPU服務,可見,進程的狀態是會變化的。爲了方便對進程的管理,操作系統需要將進程何力地劃分爲幾種狀態。
進程的三種基本狀態
運行態(Running)、就緒態(Ready),阻塞態(Wait/Blocked)
Running:佔有CPU,在CPU上運行(這時候的進程是佔有其他資源和CPU)
Ready:已具備運行條件,但是沒有空閒的CPU,所以出於閒置狀態。(萬事俱備,只欠CPU)
Wait/Blocked: 因等待某一事件而不能運行。(進程沒有獲得CPU和資源)
在單核處理器環境下,每一時刻最多隻有一個進程出於運行態。(雙核環境下可以同時有兩個進程出於運行態)
另外兩種狀態
創建態(New):進程正在被創建,操作系統爲進程分配資源,初始化PCB
終止態(Terminated,又稱結束態):進程正在從系統中撤銷,操作系統會回收進程擁有的資源,撤銷PCB。

進程狀態之間的轉換

  • 就緒態->運行態:進程被調度 運行態->就緒態:時間片執行完了,或者CPU開始執行優先級更高的進程

  • 運行態->阻塞態:等待系統資源分配,或等待某一事件發生(進程的主動行爲)

  • 阻塞態->就緒態:資源分配到位,等待時間發生。(進程的被動行爲)

  • 創建態->就緒態:系統完成創建進程的相關工作 運行態->終止態:進程運行結束或者遇到了不可修復的錯誤或異常

進程狀態轉換

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