首頁技術文章正文

計算機的進程是什么?進程組成部分內容介紹

更新時間:2021-01-08 來源:黑馬程序員 瀏覽量:

1577370495235_學IT就到黑馬程序員.gif

  程序是一個沒有生命的實體,它包含許多由程序設計語言編寫的、但未被執(zhí)行的指令,這些指令經過編譯和執(zhí)行才能完成指定動作。

  程序被執(zhí)行后成為了一個活動的實體,這個實體就是進程。換言之,操作系統(tǒng)調度并執(zhí)行程序,這個“執(zhí)行中的程序”稱為進程。進程是操作系統(tǒng)進行資源分配和調度的基本單位。

  在Windows操作系統(tǒng)下使用組合鍵Ctrl+Alt+Delete打開任務管理器,單擊任務管理器窗口中的“進程”選項卡查看計算機中所有的進程,如圖1所示。

圖1 任務管理器中的進程

  每個應用程序都有一個自己的進程,每個進程都在內存中占據(jù)一定空間,一般情況下,進程占據(jù)的內存空間由控制塊、程序段和數(shù)據(jù)段三個部分組成,各部分的介紹如下。

  (1) 控制塊(Proscessing Control Block,PCB):系統(tǒng)為管理進程專門設置的數(shù)據(jù)結構,常駐于內存中,用于記錄進程的外部特征與進程的運動變化過程??刂茐K是進程存在的唯一標志。

  (2) 程序段:用于存放程序執(zhí)行代碼的一塊內存區(qū)域。

  (3) 數(shù)據(jù)段:存儲變量和進程執(zhí)行期間產生中間或最終數(shù)據(jù)的一塊內存區(qū)域。

  隨著外界條件的變化,進程的狀態(tài)會發(fā)生變化。在五態(tài)模型中,進程有新建態(tài)、就緒態(tài)、運行態(tài)、阻塞態(tài)和終止態(tài)這五個狀態(tài),關于這些狀態(tài)的介紹如下:

  (1) 新建態(tài)。創(chuàng)建進程,申請一個空白的控制塊,向該控制塊中填寫控制和管理進程的信息,完成資源分配。

  (2) 就緒態(tài)。進程具備運行條件,等待系統(tǒng)分配處理器資源以便運行。

  (3) 運行態(tài)。進程占用處理器資源正在運行。

  (4) 阻塞態(tài)。進程不具備運行條件,正在等待某個事件(如I/O操作或進程同步)的完成,否則無法繼續(xù)運行。

  (5) 終止態(tài)。進程因出現(xiàn)錯誤或被系統(tǒng)終止而運行結束。

  除了以上五種狀態(tài)之外,進程還有一個掛起態(tài)。掛起態(tài)是一種主動行為,它是在計算機內存資源不足、處理器空閑、用戶主動掛起、系統(tǒng)檢查資源使用情況等條件下將進程暫時調離出內存形成的,在條件允許時可再次被調回內存。與掛起態(tài)相比,阻塞態(tài)是一種被動行為,它是在等待事件或者獲取不到資源而引發(fā)的等待表現(xiàn)。

  為了幫助大家理解,下面通過一張圖來描述進程狀態(tài)間的轉換關系,具體如圖2所示。

圖2 進程狀態(tài)的切換

  圖2中描述的切換過程如下。

  無→新建:當程序從存儲設備加載到內存中時,進程進入新建態(tài)。

  新建→就緒:處于新建態(tài)的進程會被調度器自動轉換為就緒態(tài),獲得了所需的資源,這個過程是非常短暫的。

  就緒-→運行:當處于就緒態(tài)的進程獲取CPU后進入運行態(tài),CPU開始執(zhí)行這個進程的命令。

  運行→阻塞:當處于運行態(tài)的進程因出現(xiàn)資源不足(I/O或緩沖區(qū)申請失敗等)等事件而終止運行,進入阻塞態(tài)。

  阻塞→就緒:當處于阻塞態(tài)的進程獲得了等待的資源后恢復為就緒態(tài)。

  阻塞→掛起:當處于阻塞態(tài)的進程遇到諸如處理器空閑、資源不足等情況時而調離內存,進入掛起態(tài)。進程的內存數(shù)據(jù)會保存到磁盤中,以釋放空間供其它進程使用。

  掛起→就緒: 當處于掛起態(tài)的進程遇到系統(tǒng)資源充足或主動請求激活時,進入就緒態(tài)。

  運行→終止:當處于運行態(tài)進程執(zhí)行完成或者被操作系統(tǒng)終止時,它會從內存中被移除,變?yōu)椤敖K止”狀態(tài)。

  進程具有以下一些特點:

  動態(tài)性。進程是程序的一次執(zhí)行過程,它是動態(tài)產生、動態(tài)消亡的。

  并發(fā)性。多個進程可并發(fā)執(zhí)行。

  獨立性。進程是一個能獨立運行的基本單位,同時也是系統(tǒng)分配資源和調度的獨立單位。

  異步性。進程之間的相互制約使得進程的執(zhí)行具有間斷性,它們按各自獨立的、不可預知的速度向前推進。



猜你喜歡:
numpy array和python list相比有什么優(yōu)勢?

Python如何一行一行讀取txt文件?

進程、線程、協(xié)程和GIL

黑馬程序員Python培訓課程 

分享到:
在線咨詢 我要報名
和我們在線交談!