盡管每個(gè)進(jìn)程是個(gè)獨(dú)立的實(shí)體脂倦,具有自己的程序計(jì)數(shù)器业崖、運(yùn)行空間等。但由于程序或進(jìn)程之間可能由于等等I/O操作呜师、競爭資源以及相互協(xié)作等原因產(chǎn)生了走走停停的動態(tài)性娶桦。因此,一個(gè)進(jìn)程在生存周期內(nèi)汁汗,可有多種狀態(tài)衷畦。進(jìn)程在生存周期內(nèi)至少有三種基本狀態(tài):
(1)運(yùn)行狀態(tài):當(dāng)進(jìn)程已獲得處理機(jī),其程序正在處理機(jī)上執(zhí)行知牌,此時(shí)的進(jìn)程狀態(tài)稱為執(zhí)行狀態(tài)祈争。(涉及調(diào)度的時(shí)機(jī),例如I/O完成產(chǎn)生一個(gè)I/O完成中斷信號后引起調(diào)度)
(2)就緒狀態(tài):當(dāng)進(jìn)程已分配到除CPU以外的所有必要的資源角寸,只要獲得處理機(jī)便可立即執(zhí)行铛嘱,這時(shí)的進(jìn)程狀態(tài)稱為就緒狀態(tài)。根據(jù)PCB的形式將其排成一個(gè)或多個(gè)就緒隊(duì)列袭厂。(由于進(jìn)程分配的時(shí)間片用完產(chǎn)生定時(shí)中斷,而將進(jìn)程從運(yùn)行狀態(tài)轉(zhuǎn)移到就緒狀態(tài)球匕,同時(shí)調(diào)度進(jìn)程)
(3)阻塞狀態(tài):阻塞狀態(tài)也稱等待/封鎖/睡眠狀態(tài)(等待的事件發(fā)生喚醒它就ok了)纹磺。正在執(zhí)行的進(jìn)程,由于等待某個(gè)事件發(fā)生而無法執(zhí)行時(shí)亮曹,便放棄處理機(jī)而處于阻塞狀態(tài)橄杨。引起進(jìn)程阻塞的事件可有多種,例如照卦,等待I/O完成式矫、申請緩沖區(qū)不能滿足、等待信件(信號)等役耕。同樣根據(jù)PCB的形式組織一個(gè)或多個(gè)阻塞隊(duì)列采转。(進(jìn)程遇到I/O指令,利用訪管指令或者系統(tǒng)調(diào)用瞬痘,自愿性中斷進(jìn)入中斷處理故慈,最終可能是由于沒有所要求的資源而進(jìn)入阻塞狀態(tài))
一個(gè)操作系統(tǒng)設(shè)計(jì)多少狀態(tài)與系統(tǒng)對進(jìn)程的管理方式有關(guān),也與系統(tǒng)的資源有關(guān)框全。
進(jìn)程在生存周期內(nèi)可以由一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)察绷,具體如下:
(1)就緒→執(zhí)行:選擇一個(gè)就緒隊(duì)列的進(jìn)程,分派處理機(jī)給它津辩,該進(jìn)程便由就緒狀態(tài)轉(zhuǎn)變成執(zhí)行狀態(tài)拆撼。(具體怎么選擇進(jìn)程由調(diào)度策略決定)
(2)運(yùn)行→就緒:處于執(zhí)行狀態(tài)的進(jìn)程在其執(zhí)行過程中容劳,因分配給它的一個(gè)時(shí)間片已用完而不得不讓出處理機(jī),于是進(jìn)程從執(zhí)行狀態(tài)轉(zhuǎn)變成就緒狀態(tài)闸度。
(3)運(yùn)行→阻塞:正在執(zhí)行的進(jìn)程因等待某種事件發(fā)生而無法繼續(xù)執(zhí)行時(shí)竭贩,或因?yàn)槟承l件無法得到滿足,便從執(zhí)行狀態(tài)變成阻塞狀態(tài)筋岛。
(4)阻塞→就緒:處于阻塞狀態(tài)的進(jìn)程娶视,若其等待的事件已經(jīng)發(fā)生,于是進(jìn)程由阻塞狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)睁宰。
進(jìn)程控制塊 PCB (Process Control Block)
存放進(jìn)程的管理和控制信息的數(shù)據(jù)結(jié)構(gòu)稱為進(jìn)程控制塊肪获。它是進(jìn)程管理和控制的最重要的數(shù)據(jù)結(jié)構(gòu),每一個(gè)進(jìn)程均有一個(gè)PCB柒傻,在創(chuàng)建進(jìn)程時(shí)孝赫,建立PCB,伴隨進(jìn)程運(yùn)行的全過程红符,直到進(jìn)程撤消而撤消青柄。在不同的操作系統(tǒng)中對進(jìn)程的控制和管理機(jī)制不同,PCB中的信息多少也不一樣预侯,通常PCB應(yīng)包含如下一些信息致开。
1、進(jìn)程標(biāo)識符 name:
每個(gè)進(jìn)程都必須有一個(gè)唯一的標(biāo)識符萎馅,可以是字符串双戳,也可以是一個(gè)數(shù)字。UNIX系統(tǒng)中就是一個(gè)整型數(shù)糜芳。在進(jìn)程創(chuàng)建時(shí)由系統(tǒng)賦予飒货。
2、進(jìn)程當(dāng)前狀態(tài) status:
說明進(jìn)程當(dāng)前所處的狀態(tài)峭竣。為了管理的方便塘辅,系統(tǒng)設(shè)計(jì)時(shí)會將相同的狀態(tài)的進(jìn)程組成一個(gè)隊(duì)列,如就緒進(jìn)程隊(duì)列皆撩,等待進(jìn)程則要根據(jù)等待的事件組成多個(gè)等待隊(duì)列扣墩,如等待打印機(jī)隊(duì)列、等待磁盤I/O完成隊(duì)列等等毅访。
3沮榜、進(jìn)程相應(yīng)的程序和數(shù)據(jù)地址,以便把PCB與其程序和數(shù)據(jù)聯(lián)系起來喻粹。
4蟆融、進(jìn)程資源清單。列出所擁有的除CPU外的資源記錄守呜,如擁有的I/O設(shè)備型酥,打開的文件列表等山憨。
5、進(jìn)程優(yōu)先級 priority:
進(jìn)程的優(yōu)先級反映進(jìn)程的緊迫程序弥喉,通常由用戶指定和系統(tǒng)設(shè)置郁竟。UNIX系統(tǒng)采用用戶設(shè)置和系統(tǒng)計(jì)算相結(jié)合的方式確定進(jìn)程的優(yōu)先級 。
6由境、CPU現(xiàn)場保護(hù)區(qū) cpustatus:
當(dāng)進(jìn)程因某種原因不能繼續(xù)占用CPU時(shí)(等待打印機(jī))棚亩,釋放CPU,這時(shí)就要將CPU的各種狀態(tài)信息保護(hù)起來虏杰,為將來再次得到處理機(jī)恢復(fù)CPU的各種狀態(tài)讥蟆,繼續(xù)運(yùn)行。
7纺阔、進(jìn)程同步與通信機(jī)制 用于實(shí)現(xiàn)進(jìn)程間互斥瘸彤、同步和通信所需的信號量等。
8笛钝、進(jìn)程所在隊(duì)列PCB的鏈接字 根據(jù)進(jìn)程所處的現(xiàn)行狀態(tài)质况,進(jìn)程相應(yīng)的PCB參加到不同隊(duì)列中。PCB鏈接字指出該進(jìn)程所在隊(duì)列中下一個(gè)進(jìn)程PCB的首地址玻靡。
9结榄、與進(jìn)程有關(guān)的其他信息。 如進(jìn)程記賬信息囤捻,進(jìn)程占用CPU的時(shí)間等潭陪。