全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

計(jì)算機(jī)的進(jìn)程是什么?進(jìn)程組成部分內(nèi)容介紹

更新時(shí)間:2021-01-08 來(lái)源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

  程序是一個(gè)沒(méi)有生命的實(shí)體,它包含許多由程序設(shè)計(jì)語(yǔ)言編寫(xiě)的、但未被執(zhí)行的指令,這些指令經(jīng)過(guò)編譯和執(zhí)行才能完成指定動(dòng)作。

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

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

圖1 任務(wù)管理器中的進(jìn)程

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

  (1) 控制塊(Proscessing Control Block,PCB):系統(tǒng)為管理進(jìn)程專(zhuān)門(mén)設(shè)置的數(shù)據(jù)結(jié)構(gòu),常駐于內(nèi)存中,用于記錄進(jìn)程的外部特征與進(jìn)程的運(yùn)動(dòng)變化過(guò)程??刂茐K是進(jìn)程存在的唯一標(biāo)志。

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

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

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

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

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

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

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

  (5) 終止態(tài)。進(jìn)程因出現(xiàn)錯(cuò)誤或被系統(tǒng)終止而運(yùn)行結(jié)束。

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

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

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

  圖2中描述的切換過(guò)程如下。

  無(wú)→新建:當(dāng)程序從存儲(chǔ)設(shè)備加載到內(nèi)存中時(shí),進(jìn)程進(jìn)入新建態(tài)。

  新建→就緒:處于新建態(tài)的進(jìn)程會(huì)被調(diào)度器自動(dòng)轉(zhuǎn)換為就緒態(tài),獲得了所需的資源,這個(gè)過(guò)程是非常短暫的。

  就緒-→運(yùn)行:當(dāng)處于就緒態(tài)的進(jìn)程獲取CPU后進(jìn)入運(yùn)行態(tài),CPU開(kāi)始執(zhí)行這個(gè)進(jìn)程的命令。

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

  阻塞→就緒:當(dāng)處于阻塞態(tài)的進(jìn)程獲得了等待的資源后恢復(fù)為就緒態(tài)。

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

  掛起→就緒: 當(dāng)處于掛起態(tài)的進(jìn)程遇到系統(tǒng)資源充足或主動(dòng)請(qǐng)求激活時(shí),進(jìn)入就緒態(tài)。

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

  進(jìn)程具有以下一些特點(diǎn):

  動(dòng)態(tài)性。進(jìn)程是程序的一次執(zhí)行過(guò)程,它是動(dòng)態(tài)產(chǎn)生、動(dòng)態(tài)消亡的。

  并發(fā)性。多個(gè)進(jìn)程可并發(fā)執(zhí)行。

  獨(dú)立性。進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的基本單位,同時(shí)也是系統(tǒng)分配資源和調(diào)度的獨(dú)立單位。

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



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

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

進(jìn)程、線(xiàn)程、協(xié)程和GIL

黑馬程序員Python培訓(xùn)課程 

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!