從進(jìn)程的觀點(diǎn)研究操作系統(tǒng),把OS看作是由若干個(gè)可獨(dú)立運(yùn)行的程序和一個(gè)可對(duì)這些程序進(jìn)行協(xié)調(diào)控制的核心(內(nèi)核)組成。
這些運(yùn)行的程序稱為進(jìn)程,它是資源分配和獨(dú)立運(yùn)行的基本單位,每一個(gè)進(jìn)程都完成某一特定任務(wù)。OS的內(nèi)核則必須要控制和協(xié)調(diào)這些進(jìn)程的運(yùn)行,解決進(jìn)程之間的通信,并從系統(tǒng)可并發(fā)工作為出發(fā)點(diǎn),實(shí)現(xiàn)并發(fā)進(jìn)程間通信,并解決由此帶來的共享資源的競(jìng)爭(zhēng)問題。
本文地址:http://www.CUOXin.com/archimedes/p/os-PRocess-management1.html,轉(zhuǎn)載請(qǐng)注明源地址。
1.進(jìn)程的基本概念前趨圖:
定義:有向無循環(huán)圖,是一個(gè)二元組,由結(jié)點(diǎn)的集合和有向邊組成。其中:
結(jié)點(diǎn):表示一條語句、一個(gè)程序段或一個(gè)進(jìn)程有向邊:兩個(gè)結(jié)點(diǎn)之間的前趨關(guān)系“ ”(→={(Pi,Pj)|Pi必須在Pj開始執(zhí)行之前完成})。
直接前趨、直接后繼
初始結(jié)點(diǎn)、終止結(jié)點(diǎn)
程序順序執(zhí)行通常一個(gè)程序可分成若干個(gè)程序段,它們必須按照某種先后次序執(zhí)行,僅當(dāng)前一操作執(zhí)行后,才能執(zhí)行后繼操作。

Eg2:進(jìn)行計(jì)算: I:輸入操作 C:計(jì)算操作 P:打印操作 在進(jìn)行計(jì)算時(shí),總是先輸入用戶的程序和數(shù)據(jù),然后進(jìn)行計(jì)算,最后將結(jié)果打印出來。
程序順序執(zhí)行時(shí)有如下特征:
順序性—處理機(jī)的操作嚴(yán)格按照程序所規(guī)定的順序執(zhí)行,每一操作必須在下一個(gè)操作開始之前結(jié)束。
封閉性—在封閉環(huán)境下執(zhí)行,獨(dú)占全機(jī)資源,執(zhí)行結(jié)果不受外界影響。
可再現(xiàn)性—只要程序執(zhí)行時(shí)的環(huán)境和初始條件相同,當(dāng)程序重復(fù)執(zhí)行時(shí),不論它是從頭到尾不停頓地執(zhí)行,還是“走走停停”地執(zhí)行,都將獲得相同的結(jié)果。
程序并發(fā)執(zhí)行在處理一批作業(yè)時(shí),有的程序可實(shí)現(xiàn)并發(fā)執(zhí)行
程序并發(fā)執(zhí)行時(shí)的特征間斷性—相互制約導(dǎo)致并發(fā)程序具有“執(zhí)行-暫停-執(zhí)行”這種間斷性的活動(dòng)規(guī)律。失去封閉性—多個(gè)程序共享系統(tǒng)中的各種資源,資源狀態(tài)由多個(gè)程序來改變。不可再現(xiàn)性—由于程序的并發(fā)執(zhí)行,打破了由另一程序獨(dú)占系統(tǒng)資源的封閉性,因而破壞了可再現(xiàn)性。進(jìn)程的定義、特征1、進(jìn)程(process)的定義
1)進(jìn)程是程序的一次執(zhí)行。
2)進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時(shí)所發(fā)生的活動(dòng)。
3)進(jìn)程是程序在一個(gè)數(shù)據(jù)集合上的運(yùn)行過程,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。
進(jìn)程與程序的主要區(qū)別:程序 | 進(jìn)程 | |
概念 | 靜態(tài) | 動(dòng)態(tài) |
所在存儲(chǔ)器 | 外存 | 內(nèi)存 |
存在時(shí)間 | 永久 | 有生命期 |
組成 | 有序指令 | 程序段,數(shù)據(jù)段,PCB |
對(duì)應(yīng)關(guān)系 | 一個(gè)程序可對(duì)應(yīng)多個(gè)進(jìn)程 一個(gè)進(jìn)程可對(duì)應(yīng)多個(gè)程序 | |
進(jìn)程(process)的基本特征:
(1)結(jié)構(gòu)特征
為了描述和記錄進(jìn)程的運(yùn)動(dòng)變化過程,并使之能正確運(yùn)行,每個(gè)進(jìn)程都應(yīng)配置了一個(gè)PCB。所以,從結(jié)構(gòu)上看,每個(gè)進(jìn)程(進(jìn)程實(shí)體)都是由程序段、相關(guān)數(shù)據(jù)段及進(jìn)程控制塊(PCB)組成。
注:在早期UNIX版本中稱進(jìn)程的三個(gè)組成部分為“進(jìn)程映像”
(2)動(dòng)態(tài)性
進(jìn)程的實(shí)質(zhì)是程序在處理機(jī)上的一次執(zhí)行過程,因此是動(dòng)態(tài)的。所以動(dòng)態(tài)性是進(jìn)程的最基本的特征。同時(shí)動(dòng)態(tài)性還表現(xiàn)在進(jìn)程是有生命期的,它因創(chuàng)建而產(chǎn)生,因調(diào)度而執(zhí)行,因得不到資源而暫停執(zhí)行,因撤消而消亡。
(3)并發(fā)性
指多個(gè)進(jìn)程實(shí)體同時(shí)存在于內(nèi)存中,能在一段時(shí)間內(nèi)同時(shí)運(yùn)行。
引入進(jìn)程的目的就是為了使進(jìn)程能并發(fā)執(zhí)行,以提高資源利用率,所以并發(fā)性是進(jìn)程的重要特征,也是OS的重要特征。
(4)獨(dú)立性
指進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的基本單位,也是系統(tǒng)進(jìn)行資源分配和調(diào)度的獨(dú)立單位。
(5)異步性
指進(jìn)程以各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn)。
進(jìn)程的狀態(tài)為了刻畫了整個(gè)進(jìn)程,可以將一個(gè)進(jìn)程的生命周期劃分為一組狀態(tài):
1、進(jìn)程的五種狀態(tài)(兩種短暫的狀態(tài)、三種基本狀態(tài))new新建/創(chuàng)建:進(jìn)程正在創(chuàng)建中的狀態(tài)terminated終止/撤消/退出:進(jìn)程執(zhí)行完畢,釋放所占資源的狀態(tài)。ready-就緒: 進(jìn)程已獲得了除處理機(jī)以外的所有資源,等待分配處理機(jī)執(zhí)行的狀態(tài)。running-運(yùn)行/執(zhí)行: 當(dāng)一個(gè)進(jìn)程獲得必要的資源并正在處理機(jī)上執(zhí)行的狀態(tài)。waiting-等待/阻塞: 正在執(zhí)行的進(jìn)程由于發(fā)生某事件而暫時(shí)無法執(zhí)行下去,此時(shí)進(jìn)程所處的狀態(tài)。進(jìn)程在運(yùn)行期間并非固定處于某個(gè)狀態(tài),而是不斷從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)。
2、進(jìn)程狀態(tài)轉(zhuǎn)換
在某些系統(tǒng)中,為了更好地管理和調(diào)度進(jìn)程,引入了掛起狀態(tài):
掛起狀態(tài)/靜止?fàn)顟B(tài):程序在運(yùn)行期間,由于某種需要,往往要將進(jìn)程暫停執(zhí)行,使其靜止下來,以滿足某些需要。這種靜止?fàn)顟B(tài)就稱為進(jìn)程的掛起狀態(tài)。
引入掛起狀態(tài)的原因:
在引入掛起狀態(tài)后,就增加了掛起狀態(tài)(靜止?fàn)顟B(tài))與非掛起狀態(tài)(活動(dòng)狀態(tài))間的轉(zhuǎn)換,如圖所示:

進(jìn)程控制塊PCB
是操作系統(tǒng)為了管理和控制進(jìn)程的運(yùn)行而為每一個(gè)進(jìn)程定義的一個(gè)數(shù)據(jù)結(jié)構(gòu),它記錄了系統(tǒng)管理進(jìn)程所需的全部信息。系統(tǒng)根據(jù)PCB而感知進(jìn)程的存在,PCB是進(jìn)程存在的唯一標(biāo)志。例:linux中的PCB
1、進(jìn)程控制塊PCB的作用
?是OS對(duì)并發(fā)執(zhí)行的進(jìn)程進(jìn)行控制和管理的根據(jù)。也是系統(tǒng)用來感知進(jìn)程存在的根據(jù),即PCB是進(jìn)程存在的唯一標(biāo)志。2、進(jìn)程控制塊PCB中的信息
根據(jù)操作系統(tǒng)的要求不同,PCB所包含信息有些不同,但通常包含以下信息:
?(1)進(jìn)程標(biāo)識(shí)符:內(nèi)部標(biāo)識(shí)符(由系統(tǒng)創(chuàng)建進(jìn)程時(shí)分配給進(jìn)程的唯一標(biāo)識(shí)號(hào),通常為一整數(shù),稱為進(jìn)程號(hào),用于區(qū)分不同的進(jìn)程)外部標(biāo)識(shí)符(由字母、數(shù)字組成,由用戶訪問該進(jìn)程時(shí)使用)。
?(2)處理機(jī)狀態(tài)(斷點(diǎn)信息): 即處理機(jī)中各種寄存器(通用寄存器、PC、PSW等)的內(nèi)容
?(3)進(jìn)程調(diào)度: 記錄了進(jìn)程調(diào)度的相關(guān)信息(狀態(tài)、優(yōu)先級(jí)、事件等)。
?(4)進(jìn)程控制:記錄了系統(tǒng)對(duì)進(jìn)程控制的信息(程序和數(shù)據(jù)的地址、同步機(jī)制、資源清單、鏈接指針)
3、進(jìn)程控制塊PCB的組織方式
在一個(gè)系統(tǒng)中,通常存在著許多進(jìn)程,它們所處的狀態(tài)不同,為了方便進(jìn)程的調(diào)度和管理,需要將各進(jìn)程的PCB用適當(dāng)方法組織起來。目前常用的組織方式有:?
鏈接方式:把同一狀態(tài)的PCB鏈接成一個(gè)隊(duì)列,這樣就形成了就緒隊(duì)列、阻塞隊(duì)列等。

進(jìn)程的控制進(jìn)程控制是進(jìn)程管理中最基本的功能,即對(duì)系統(tǒng)中所有的進(jìn)程實(shí)施有效的管理,其功能包括
這些功能一般是由操作系統(tǒng)的內(nèi)核來完成。
進(jìn)程創(chuàng)建一個(gè)進(jìn)程可以創(chuàng)建若干個(gè)新進(jìn)程,新創(chuàng)建的進(jìn)程又可以創(chuàng)建子進(jìn)程,為了描述進(jìn)程之間的創(chuàng)建關(guān)系,引入了進(jìn)程圖(如下圖所示:)
1、進(jìn)程圖:又稱為進(jìn)程樹或進(jìn)程家族樹,是描述進(jìn)程家族關(guān)系的一棵有向樹。
2、引起進(jìn)程創(chuàng)建的事件在多道程序環(huán)境中,只有進(jìn)程才可以在系統(tǒng)中運(yùn)行。為了使一個(gè)程序能運(yùn)行,必須為它創(chuàng)建進(jìn)程。導(dǎo)致進(jìn)程創(chuàng)建的事件有:
用戶登錄:在分時(shí)OS中,用戶在終端鍵入登錄命令后,如是合法用戶,則系統(tǒng)為該終端創(chuàng)建一進(jìn)程,并插入就緒隊(duì)列。作業(yè)調(diào)度:在批處理OS中,當(dāng)按某算法調(diào)度一作業(yè)進(jìn)內(nèi)存,系統(tǒng)為之分配必要資源,同時(shí)為該作業(yè)創(chuàng)建一進(jìn)程,并插入就緒隊(duì)列。
?提供服務(wù):在程序運(yùn)行中,若用戶需某種服務(wù),則系統(tǒng)創(chuàng)建一進(jìn)程為用戶提供服務(wù),并插入就緒隊(duì)列。
?應(yīng)用請(qǐng)求:在運(yùn)行中,由于應(yīng)用進(jìn)程本身的需求,自己創(chuàng)建一進(jìn)程,并插入就緒隊(duì)列。
3、進(jìn)程的創(chuàng)建
操作系統(tǒng)一旦發(fā)現(xiàn)了要求創(chuàng)建進(jìn)程的事件后,便調(diào)用進(jìn)程創(chuàng)建原語create()按以下過程創(chuàng)建一新進(jìn)程:
進(jìn)程的撤消一個(gè)進(jìn)程在完成其任務(wù)后,應(yīng)加以撤消,以便及時(shí)釋放其占有的各類資源。
1、導(dǎo)致進(jìn)程撤消的事件
如果系統(tǒng)中發(fā)生了要求撤消進(jìn)程的事件,OS便調(diào)用撤消原語去撤消進(jìn)程。
2、撤消原語可采用2種撤消策略
只撤消指定的進(jìn)程
撤消指定進(jìn)程及其所有的子孫進(jìn)程
進(jìn)程的撤消的過程:
進(jìn)程的阻塞與喚醒當(dāng)一個(gè)進(jìn)程期待的事件還沒有出現(xiàn)時(shí),該進(jìn)程調(diào)用阻塞原語block()將自己阻塞起來;
block()功能:將進(jìn)程由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)樽枞麪顟B(tài)。
對(duì)于處于阻塞狀態(tài)的進(jìn)程,當(dāng)該進(jìn)程期待的事件出現(xiàn)時(shí),由其它相關(guān)進(jìn)程調(diào)用喚醒原語wakeup() 將阻塞的進(jìn)程喚醒,使其進(jìn)入就緒狀態(tài);
wakeup()功能:將進(jìn)程由阻塞狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)。
1、引起進(jìn)程阻塞和喚醒的事件
2、進(jìn)程的阻塞過程

3、進(jìn)程的喚醒過程
進(jìn)程的掛起與激活當(dāng)引起進(jìn)程掛起的事件發(fā)生時(shí),系統(tǒng)就將利用掛起原語suspend()將指定進(jìn)程或處于阻塞狀態(tài)的進(jìn)程掛起。當(dāng)發(fā)生激活進(jìn)程的事件時(shí),系統(tǒng)就將利用激活原語active()將指定進(jìn)程激活。
進(jìn)程的掛起過程:

進(jìn)程的激活過程:

新聞熱點(diǎn)
疑難解答
圖片精選