一诡右、進(jìn)程的概念
在多道程序環(huán)境下,允許多個(gè)程序并發(fā)執(zhí)行驾荣,此時(shí)它們將失去封閉性外构,并具有間斷性及不可再現(xiàn)性的特征。為此引入了進(jìn)程(Process)的概念播掷,以便更好地描述和控制程序的并發(fā)執(zhí)行审编,實(shí)現(xiàn)操作系統(tǒng)的并發(fā)性和共享性。
PCB(Process Control Block)是進(jìn)程的唯一標(biāo)志歧匈,系統(tǒng)利用PCB來描述進(jìn)程的基本情況和運(yùn)行狀態(tài)(PCB常駐內(nèi)存垒酬,系統(tǒng)可在任一時(shí)刻存取),進(jìn)而控制和管理進(jìn)程勘究。相應(yīng)地矮湘,由程序段、相關(guān)數(shù)據(jù)段和PCB三部分構(gòu)成了進(jìn)程映像(進(jìn)程實(shí)體)乱顾。創(chuàng)建和撤銷進(jìn)程板祝,實(shí)質(zhì)上是創(chuàng)建和撤銷進(jìn)程映像中的PCB宫静;進(jìn)程映像是靜態(tài)的走净,進(jìn)程則是動(dòng)態(tài)的。
在沒有引入線程的系統(tǒng)中孤里,進(jìn)程是系統(tǒng)資源分配和系統(tǒng)調(diào)度的獨(dú)立單位伏伯。
二、進(jìn)程的特征
進(jìn)程是由多程序的并發(fā)執(zhí)行而引出的捌袜,它和程序是兩個(gè)截然不同的概念说搅。進(jìn)程相對(duì)于程序的的基本特征如下:
動(dòng)態(tài)性:進(jìn)程是程序的一次執(zhí)行,它有著創(chuàng)建虏等、活動(dòng)弄唧、暫停、終止等過程霍衫,具有一定的生命周期候引,是動(dòng)態(tài)地產(chǎn)生、變化和消亡的敦跌。動(dòng)態(tài)性是進(jìn)程最基本的特征。
并發(fā)性:指多個(gè)進(jìn)程實(shí)體,同存于內(nèi)存中沪猴,能在一段時(shí)間內(nèi)同時(shí)運(yùn)行齐板,并發(fā)性是進(jìn)程的重要特征,同時(shí)也是操作系統(tǒng)的重要特征惧笛。引入進(jìn)程的目的就是為了使程序能與其他進(jìn)程的程序并發(fā)執(zhí)行从媚,以提高資源利用率。
獨(dú)立性:指進(jìn)程實(shí)體是一個(gè)能獨(dú)立運(yùn)行患整、獨(dú)立獲得資源和獨(dú)立接受調(diào)度的基本單位拜效。凡未建立PCB的程序都不能作為一個(gè)獨(dú)立的單位參與運(yùn)行。
異步性:由于進(jìn)程的相互制約并级,使進(jìn)程具有執(zhí)行的間斷性拂檩,即進(jìn)程按各自獨(dú)立的、 不可預(yù)知的速度向前推進(jìn)嘲碧。異步性會(huì)導(dǎo)致執(zhí)行結(jié)果的不可再現(xiàn)性稻励,為此,在操作系統(tǒng)中必須配置相應(yīng)的進(jìn)程同步機(jī)制。
結(jié)構(gòu)性:每個(gè)進(jìn)程都配置一個(gè)PCB對(duì)其進(jìn)行描述望抽。從結(jié)構(gòu)上看加矛,進(jìn)程實(shí)體是由程序段、數(shù)據(jù)段和進(jìn)程控制段三部分組成的煤篙。
三斟览、進(jìn)程的狀態(tài)轉(zhuǎn)換
進(jìn)程在執(zhí)行時(shí)的間斷性決定了進(jìn)程具有多中狀態(tài)。通常進(jìn)程有五種狀態(tài)辑奈,前三種是進(jìn)程的基本狀態(tài):
-
1)就緒狀態(tài)
進(jìn)程已處于準(zhǔn)備運(yùn)行的狀態(tài)苛茂,即進(jìn)程獲得了除處理機(jī)之外的一切所需資源,一旦得到處理機(jī)即可運(yùn)行鸠窗。 -
2)運(yùn)行狀態(tài)
進(jìn)程正在處理機(jī)上運(yùn)行妓羊。在單處理機(jī)環(huán)境下,每一時(shí)刻最多只有一個(gè)進(jìn)程處于運(yùn)行狀態(tài) -
3)阻塞狀態(tài)
又稱等待狀態(tài)稍计。正在執(zhí)行的進(jìn)程由于等待某一事件的發(fā)生而暫停運(yùn)行躁绸,導(dǎo)致等待的事件有:請(qǐng)求I/O,申請(qǐng)緩沖空間等臣嚣。 -
4)創(chuàng)建狀態(tài)
創(chuàng)建一個(gè)進(jìn)程通常有兩步驟:申請(qǐng)PCB净刮,填寫必要的管理信息;其次硅则,把進(jìn)程轉(zhuǎn)入就緒狀態(tài)并插入就緒隊(duì)列之中淹父。當(dāng)進(jìn)程擁有了PCB,但主存等資源尚未分配抢埋,進(jìn)程此時(shí)不能調(diào)度執(zhí)行弹灭,處于創(chuàng)建狀態(tài)。創(chuàng)建狀態(tài)的引入揪垄,增加了系統(tǒng)的靈活性:系統(tǒng)可以根據(jù)性能和主存容量限制穷吮,推遲提交創(chuàng)建的進(jìn)程。 -
5)終止?fàn)顟B(tài)
又稱結(jié)束狀態(tài)饥努。進(jìn)程的終止同樣分為兩個(gè)步驟捡鱼,首先系統(tǒng)進(jìn)行資源回收,然后將進(jìn)程PCB清零酷愧。當(dāng)一個(gè)進(jìn)程自然結(jié)束驾诈、遇到無法克服的錯(cuò)誤、被操作系統(tǒng)終止或被其他有權(quán)限的進(jìn)程所終結(jié)時(shí)溶浴,它將進(jìn)入終止?fàn)顟B(tài)乍迄。
在一些系統(tǒng)中,增加了掛起狀態(tài)士败,引入掛起的原因如下:
1)終端用戶請(qǐng)求
終端用戶在進(jìn)程運(yùn)行期間發(fā)現(xiàn)可疑問題時(shí)闯两,有暫停進(jìn)程褥伴,觀察分析的需求。2)父進(jìn)程請(qǐng)求
有時(shí)父進(jìn)程希望掛起某個(gè)子進(jìn)程漾狼,以便考察和修改子進(jìn)程重慢。3)負(fù)荷調(diào)節(jié)需要
當(dāng)實(shí)時(shí)系統(tǒng)中的工作負(fù)荷較重,可能影響到實(shí)時(shí)任務(wù)的交付時(shí)逊躁,可疑把一些不重要的進(jìn)程掛起似踱,以保證系統(tǒng)正常運(yùn)行。4)操作系統(tǒng)需要
操作系統(tǒng)有時(shí)希望掛起某些進(jìn)程稽煤,以便檢查器運(yùn)行中的資源使用情況核芽,以做記錄。
四念脯、進(jìn)程的組織
PCB
PCB的結(jié)構(gòu)如下:
下面對(duì)PCB的各部分做簡要說明:
1)進(jìn)程描述信息
進(jìn)程標(biāo)識(shí)符:標(biāo)識(shí)各個(gè)進(jìn)程狞洋,每個(gè)進(jìn)程都擁有唯一的標(biāo)識(shí)號(hào)弯淘。
用戶標(biāo)識(shí)符:進(jìn)程歸屬的用戶绿店,用戶標(biāo)識(shí)符主要為共享和保護(hù)服務(wù)。2)進(jìn)程控制和管理信息(調(diào)度信息)
進(jìn)程當(dāng)前狀態(tài):描述進(jìn)程的狀態(tài)信息庐橙,作為處理機(jī)分配的依據(jù)
進(jìn)程優(yōu)先級(jí):描述進(jìn)程搶占處理機(jī)的優(yōu)先級(jí)
事件:進(jìn)程由執(zhí)行狀態(tài)變?yōu)樽枞麪顟B(tài)所等待的事件假勿,阻塞原因。
進(jìn)程調(diào)度需要的其他相關(guān)信息:如CPU時(shí)間總和态鳖、已執(zhí)行時(shí)間總和等3)資源分配清單
用于說明有關(guān)內(nèi)存地址空間或者虛擬地址空間的狀況转培、所打開文件的列表和所使用的I/O設(shè)備等信息。4)處理機(jī)相關(guān)信息
主要指處理機(jī)中各寄存器值浆竭,當(dāng)前進(jìn)程被切換時(shí)浸须,處理機(jī)狀態(tài)信息都保存在相應(yīng)的PCB中,以便在該進(jìn)程重新執(zhí)行時(shí)邦泄,能從斷點(diǎn)繼續(xù)執(zhí)行删窒。這些寄存器包括:通用寄存器(又稱為用戶可視寄存器,用戶可以訪問)顺囊、指令寄存器(用于保存當(dāng)前正在執(zhí)行的一條指令)肌索、程序狀態(tài)字PSW(含有狀態(tài)信息,執(zhí)行方式特碳、中斷屏蔽等標(biāo)識(shí))以及用戶棧指針诚亚。
PCB的組織
在一個(gè)系統(tǒng)中,通常存在這許多進(jìn)程午乓,有的處于就緒狀態(tài)站宗,有的出于阻塞狀態(tài),而阻塞的原因各不相同益愈。為方便進(jìn)程的調(diào)度和管理梢灭,需要將各進(jìn)程用適當(dāng)?shù)姆绞浇M織起來。目前常用的組織方式有鏈接方式和索引方式兩種:
** 1)鏈接方式**
鏈接方式將同一狀態(tài)的PCB鏈成一個(gè)隊(duì)列,不同狀態(tài)對(duì)應(yīng)不同的隊(duì)列或辖,也可以把阻塞的進(jìn)程PCB根據(jù)不同的阻塞原因瘾英,排在不同的隊(duì)列中。同一隊(duì)列內(nèi)部按照優(yōu)先級(jí)進(jìn)行排序颂暇。2)索引方式
索引方式是將同一狀態(tài)的進(jìn)程組織在一個(gè)索引表中缺谴,索引表的表項(xiàng)指向相應(yīng)的PCB,不同狀態(tài)對(duì)應(yīng)不同的索引表耳鸯,如就緒索引表和阻塞索引表湿蛔。
程序段
程序段即為程序代碼段,其可以被多個(gè)進(jìn)程所共享县爬。多個(gè)進(jìn)程可以運(yùn)行同一個(gè)程序阳啥。
數(shù)據(jù)段
一個(gè)進(jìn)程的數(shù)據(jù)段,可以是進(jìn)程對(duì)應(yīng)的程序加工處理的原始數(shù)據(jù)财喳,也可以是程序執(zhí)行時(shí)產(chǎn)生的中間或最終結(jié)果察迟。