第2章 進程管理_第1頁
第2章 進程管理_第2頁
第2章 進程管理_第3頁
第2章 進程管理_第4頁
第2章 進程管理_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第2章進程管理

學(xué)習(xí)目標(biāo)和學(xué)習(xí)要點2.1系統(tǒng)的基本工作單位2.2進程的結(jié)構(gòu)2.3進程的控制2.4進程的協(xié)調(diào)2.5進程的通信2.6進程的安全性2.7進程的演化與進展2.8Linux的進程管理2.9Windows2000/XP的進程管理本章小結(jié)第2章:進程管理返回到目錄本章學(xué)習(xí)目標(biāo)

掌握:進程的定義,臨界區(qū)概念,進程的狀態(tài)及其轉(zhuǎn)換,進程的同步與互斥。

理解:程序與進程的對比,進程與線程,信號量及P,V操作、死鎖。

了解:Linux及WindowsXP實例,本章其他內(nèi)容。第2章:進程管理本章學(xué)習(xí)要點應(yīng)深入理解、掌握什么是進程及其特征,進程的狀態(tài)及引起進程狀態(tài)轉(zhuǎn)換的原因;什么是臨界區(qū)及其操作原則,進程同步與互斥;信號量和管程的概念及P,V操作;進程通信;同時要掌握引起死鎖的原因及怎樣解除和系統(tǒng)恢復(fù)。第2章:進程管理返回到本章2.1系統(tǒng)的基本工作單位

2.1.1進程概念的引入2.1.2進程管理第2章:進程管理返回到本章2.1.1進程概念的引入1.順序程序的基本特征2.程序的并行執(zhí)行特征3.進程的定義及其特征4.進程的類型第2章:進程管理1.順序程序的基本特征

順序程序是指程序中若干操作必須按照某種先后次序來執(zhí)行,并且每次操作前和操作后的數(shù)據(jù)、狀態(tài)之間都有—定的關(guān)系。在早期的程序設(shè)計中,程序一般都是順序地執(zhí)行的。順序程序的基本特征如下:(1)順序性;(2)惟一對應(yīng)性;(3)封閉性;(4)可再現(xiàn)性。第2章:進程管理2.程序的并行執(zhí)行特征

在多道程序系統(tǒng)中,程序的運行環(huán)境發(fā)生了很大的變化。主要體現(xiàn)在:(1)資源共享。為了提高資源的利用率,計算機系統(tǒng)中的資源不再由一道程序獨占使用,而是由多道程序共同使用。(2)程序的并發(fā)執(zhí)行或并行執(zhí)行。

第2章:進程管理2.程序的并行執(zhí)行特征

(1)并發(fā)性。即并發(fā)程序的若干個程序段同時在系統(tǒng)中運行,這些程序段的執(zhí)行在時間上是重迭的,一個程序段的執(zhí)行尚未結(jié)束,另一個程序段的執(zhí)行已經(jīng)開始,即使這種重迭是很小的一部分,也稱這幾個程序段是并發(fā)執(zhí)行的。(2)動態(tài)性。指程序與其執(zhí)行活動不再一一對應(yīng)。并發(fā)程序中的并發(fā)活動是動態(tài)產(chǎn)生、動態(tài)消亡的。如,幾道并發(fā)執(zhí)行的C語言程序共享C編譯系統(tǒng),在這種情況下,—個編譯程序能同時為多道程序服務(wù),每個程序調(diào)用—次就是執(zhí)行一次,即這個編譯程序?qū)?yīng)多個執(zhí)行活動。第2章:進程管理2.程序的并行執(zhí)行特征(3)開放性。指系統(tǒng)中并發(fā)執(zhí)行的程序,共享使用的資源,程序的執(zhí)行與外部因素(如執(zhí)行速度)有關(guān),不再具有封閉性。(4)相互制約性:指程序的動態(tài)活動相互依賴,相互制約。其制約關(guān)系可分為間接制約關(guān)系和直接制約關(guān)系兩種。間接制約關(guān)系是指相互無邏輯關(guān)系的用戶程序之間競爭使用資源所發(fā)生的制約關(guān)系;直接制約關(guān)系是指存在邏輯關(guān)系的程序之間相互等待而發(fā)生的制約關(guān)系。通過程序活動的這種相互制約關(guān)系,才能保證程序的正確運行。第2章:進程管理3.進程的定義及其特征進程是程序在數(shù)據(jù)集合上的運行過程,是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位。進程具有如下特征:(1)動態(tài)特征。(2)并發(fā)特征。(3)獨立特征。(4)相互制約特征。第2章:進程管理4.進程的類型(1)系統(tǒng)進程和用戶進程(2)父進程和子進程第2章:進程管理圖2-2進程族系關(guān)系圖返回到本節(jié)2.1.2進程管理進程作為操作系統(tǒng)的核心,具有如下管理的功能:

1.進程族系。

2.原語操作

3.進程創(chuàng)建

4.進程終止

5.進程阻塞

6.進程喚醒

7.進程映像的更換第2章:進程管理返回到本節(jié)2.2進程的結(jié)構(gòu)

2.2.1進程的實體2.2.2進程控制塊2.2.3進程的狀態(tài)

第2章:進程管理返回到本章2.2.1進程的實體進程的活動是通過在CPU上執(zhí)行一系列程序和對相應(yīng)數(shù)據(jù)進行操作來體現(xiàn)的,因此程序和它操作的數(shù)據(jù)是進程存在的實體。但這二者僅是靜態(tài)的文本,沒有反映出其動態(tài)特性。為此,還需要有一個數(shù)據(jù)結(jié)構(gòu)用來描述進程當(dāng)前的狀態(tài)、本身的特性等。這種數(shù)據(jù)結(jié)構(gòu)被稱為進程控制塊(PCB,ProcessControlBlock),它既能標(biāo)識進程的存在,又能刻畫進程瞬間特性的數(shù)據(jù)結(jié)構(gòu)。所以進程實體通常就由程序、數(shù)據(jù)集合,用PCB來標(biāo)識和刻畫實體的存在和變化。第2章:進程管理返回到本節(jié)2.2.2進程控制塊進程控制塊是進程組成中最關(guān)鍵的部分,其中含有進程的描述信息和控制信息,是進程動態(tài)特性的集中反映,它是系統(tǒng)對進程施行識別和控制的依據(jù)。系統(tǒng)為每個進程設(shè)置一個PCB,它是標(biāo)識和描述進程存在及有關(guān)特性的數(shù)據(jù)塊,是進程存在的唯一標(biāo)識,是進程動態(tài)特征的集合反映。PCB中所包含的信息類型和數(shù)量隨操作系統(tǒng)而異。在小型的比較簡單的操作系統(tǒng)中,PCB只占用十幾個單元,而在比較復(fù)雜的大型操作系統(tǒng)中,PCB則可能占用數(shù)十甚至數(shù)百個單元。系統(tǒng)創(chuàng)建一個進程時,就為其創(chuàng)建一個PCB;進程被撤離系統(tǒng)時,由系統(tǒng)撤離PCB。PCB的結(jié)構(gòu)如圖2-3所示。第2章:進程管理2.2.2進程控制塊

第2章:進程管理進程名進程號優(yōu)先數(shù)位置信息狀態(tài)信息現(xiàn)場信息通信信息資源記載其他圖2-3PCB結(jié)構(gòu)2.2.2進程控制塊

PCB常用兩種組織方式:一種是線性表,一種是鏈接表。第2章:進程管理返回到本節(jié)PCB1PCB2PCBn2.2.3進程的狀態(tài)

1.進程的基本狀態(tài)(1)運行態(tài)(running)(2)就緒態(tài)(ready)(3)阻塞態(tài)(blocked)

如圖所示:

第2章:進程管理2.2.3進程的狀態(tài)

2.進程狀態(tài)的轉(zhuǎn)換(1)就緒→運行(2)運行→阻塞(3)阻塞→就緒(4)運行一>就緒在不少系統(tǒng)中,處了上述的三種基本狀態(tài)之外,又增加了兩種狀態(tài):(1)創(chuàng)建狀態(tài)。(2)退出狀態(tài)。第2章:進程管理2.2.3進程的狀態(tài)

第2章:進程管理圖2-6具有五種狀態(tài)的進程狀態(tài)圖2.2.3進程的狀態(tài)

第2章:進程管理返回到本節(jié)圖2-7具有掛起狀態(tài)的進程基本狀態(tài)圖2.3進程的控制

2.3.1進程控制機構(gòu)2.3.2進程的創(chuàng)建與撤銷2.3.3進程的掛起與恢復(fù)第2章:進程管理返回到本章2.3.1進程控制機構(gòu)

常用的進程控制原語有:創(chuàng)建進程,刪除進程,掛起進程,激活進程,睡眠進程,喚醒進程等。操作系統(tǒng)通過這些原語的實現(xiàn)供外部調(diào)用,以達到控制進程活動的目的。第2章:進程管理返回到本節(jié)2.3.2進程的創(chuàng)建與撤銷

1.進程創(chuàng)建常用建立進程的方法有兩種:一是創(chuàng)建法;另一種方法是生成法。操作系統(tǒng)主要完成的工作是:(1)在系統(tǒng)空間中分配新的進程PCB空間,根據(jù)調(diào)用參數(shù)置PCB中的有關(guān)域;(2)裝配進程所需執(zhí)行的程序和數(shù)據(jù)集合,并將其存儲信息保存在PCB中;(3)初始化進程PCB中的現(xiàn)場區(qū),其中現(xiàn)場區(qū)PC相應(yīng)的域內(nèi),放入程序的入口地址;(4)將新進程加入就緒狀態(tài)隊列,請求進行進程調(diào)度。第2章:進程管理2.3.2進程的創(chuàng)建與撤銷

2.進程撤銷進程撤銷又叫進程刪除,撤消撤銷進程可能有兩種情形:一種是進程正常結(jié)束;一種是進程非正常結(jié)束。當(dāng)一個進程在完成其任務(wù)正常結(jié)束時,則系統(tǒng)自行調(diào)用該刪除進程原語將自身刪除。當(dāng)在運行過程中遇到某些意外事件無法繼續(xù)運行(處于非正常結(jié)束)時,則由父進程(即創(chuàng)建者)或由系統(tǒng)直接調(diào)用該原語,將其強行刪除。撤銷進程通常需要完成如下工作:(1)定位欲刪除的進程PCB;(2)回收進程所占的全部資源;(3)遞歸地刪除其所有“子孫”進程;(4)刪除PCB,處理記賬信息;(5)若刪除的是正在運行的進程,則請求重新調(diào)度,否則返回。第2章:進程管理返回到本節(jié)2.3.3進程的掛起與恢復(fù)

1.進程掛起在進程控制中,可以有多種掛起方式:(1)把發(fā)出本命令的進程自身掛起;(2)掛起具有指定標(biāo)識符的進程;(3)把某進程及其全部或部分子孫進程一起掛起。通常來說,掛起具有指定標(biāo)識符的進程的情形用的較多。在掛起進程控制中,操作系統(tǒng)主要完成如下工作:(1)定位欲掛起的進程PCB;(2)將其運行的有關(guān)現(xiàn)場信息放至調(diào)用者指定的區(qū)域;(3)將進程變?yōu)閽炱馉顟B(tài);(4)如果進程從運行狀態(tài)變?yōu)閽炱馉顟B(tài),則請求重新調(diào)度。第2章:進程管理2.3.3進程的掛起與恢復(fù)

2.激活進程與“掛起進程”原語相對應(yīng),系統(tǒng)提供了一條“激活進程”原語,供用戶或創(chuàng)建者用于將原來被掛起的進程重新激活。對于激活進程原語,操作系統(tǒng)主要完成如下工作:(1)定位欲激活的進程PCB;(2)將該進程改為就緒狀態(tài);(3)請求重新調(diào)度。第2章:進程管理2.3.3進程的掛起與恢復(fù)

3.進程睡眠進程在運行過程中一旦自身認為需等待某一事件的發(fā)生(如需等待伙伴進程的同步信號等)才能繼續(xù)運行,則自身調(diào)用睡眠進程原語,放棄CPU,進入“睡眠”狀態(tài)?!八摺迸c“掛起”原語的主要區(qū)別在于:掛起是人的干預(yù),將指定進程掛起;而睡眠是本進程使自身進入“睡眠”狀態(tài):對睡眠進程原語,系統(tǒng)主要完成如下工作(1)定位當(dāng)前運行狀態(tài)的進程PCB;(2)放棄CPU,保留現(xiàn)場;(3)將其狀態(tài)改變?yōu)椤八摺睜顟B(tài);(4)請求重新調(diào)度。第2章:進程管理2.3.3進程的掛起與恢復(fù)

4.喚醒進程與“睡眠”進程原語相對應(yīng),系統(tǒng)提供了一條“喚醒”進程原語。調(diào)用者可以使用該原語將某一個正在“睡眠”的進程喚醒,使它變?yōu)榫途w狀態(tài)。對于喚醒進程原語,操作系統(tǒng)應(yīng)完成的主要工作如下:(1)定位被喚醒的進程PCB;(2)將其改變?yōu)榫途w狀態(tài),插人就緒隊列(3)請求重新調(diào)度。第2章:進程管理返回到本節(jié)2.4進程的協(xié)調(diào)

2.4.1進程互斥2.4.2進程同步2.4.3信號量和P,V操作2.4.4管程2.4.5經(jīng)典進程的同步第2章:進程管理返回到本章2.4.1進程互斥進程間的制約關(guān)系具體可分為兩類。(1)互斥關(guān)系,也稱間接制約關(guān)系。指進程間因相互競爭使用獨占型資源,而產(chǎn)生的制約關(guān)系。它主要由資源共享引起。這種關(guān)系表現(xiàn)形式為:進程-資源-進程。(2)同步關(guān)系,也稱直接制約關(guān)系。指為了完成同一任務(wù)的諸進程間需要在某些位置上協(xié)調(diào)工作,進行相互等待,相互交換信息所表現(xiàn)出的相互制約關(guān)系。它可由共享資源引起,又可由進程合作而引起,主要是各個進程的行動時間次序必須滿足某種依賴關(guān)系。這種關(guān)系的表現(xiàn)形式為:進程-進程。第2章:進程管理2.4.1進程互斥

1.進程互斥與臨界區(qū)(1)臨界資源與臨界區(qū)為了保證臨界資源的正確使用,可以把臨界資源的訪問過程分成四個部分。

①進入?yún)^(qū):為了進入臨界區(qū)使用臨界資源,在進入?yún)^(qū)要檢查是否可以進入臨界區(qū);如果可以進入臨界區(qū),通常設(shè)置相應(yīng)的“正在訪問臨界區(qū)”標(biāo)志,以阻止其他進程同時進入臨界區(qū)。

②臨界區(qū):進程中訪問臨界資源的那段代碼,又稱臨界段。

③退出區(qū):臨界區(qū)后用于將“正在訪問臨界區(qū)”標(biāo)志清除的部分。

④剩余區(qū):進程中除進入?yún)^(qū)、臨界區(qū)、退出區(qū)以外的其他部分。第2章:進程管理2.4.1進程互斥

2.互斥的概念與要求在操作系統(tǒng)中,當(dāng)一個進程進入臨界區(qū)使用臨界資源時,另一個進程必須等待,當(dāng)占用臨界資源的進程退出臨界區(qū)后,另一進程才允許訪問此臨界資源,我們稱進程之間的這種相互制約關(guān)系為互斥。進程訪問臨界區(qū)的準(zhǔn)則:(1)空閑讓進。當(dāng)沒有進程處于臨界區(qū)時,可以允許一個請求進入臨界區(qū)的進程立即進入自己的臨界區(qū)。(2)忙則等待。當(dāng)已有進程進入其臨界區(qū)時,其他試圖進入臨界區(qū)的進程必須等待。(3)有限等待。當(dāng)進程不能進入自己的臨界區(qū)時,應(yīng)釋放處理機。第2章:進程管理2.4.1進程互斥

3.互斥的實現(xiàn)方法互斥的實現(xiàn)既可以用軟件方法,也可以用硬件方法。(1)軟件方法(2)硬件方法硬件方法的主要思想是用一條指令完成標(biāo)志的檢查和修改兩個操作,因而保證了檢查操作與修改操作不被打斷;或通過中斷屏蔽的方式來保證檢查和修改作為一個整體執(zhí)行。

①中斷屏蔽方法

②硬件指令方法第2章:進程管理返回到本節(jié)2.4.2進程同步所謂同步,就是并發(fā)進程在一些關(guān)鍵點上可能需要互相等待與互通消息,這種相互制約的等待與互通消息稱為進程同步。同步意味著兩個或多個進程之間根據(jù)它們一致協(xié)議進行相互作用。同步的實質(zhì)是使各合作進程的行為保持某種一致性或不變關(guān)系。要實現(xiàn)同步,一定存在著遵循的同步規(guī)則。第2章:進程管理返回到本節(jié)2.4.3信號量和P,V操作

1.信號量及P,V操作原語信號量,也叫信號燈,一般是有兩個成員組成的數(shù)據(jù)結(jié)構(gòu),其中一個成員是整型變量,表示該信號量的值,另一個是指向PCB的指針。當(dāng)多個進程都等待同一信號量時,它們就排成一個隊列,由信號量的指針項指出該隊列的頭,而PCB隊列是通過PCB本身所包含的指針項進行鏈接的。最后一個PCB(即隊尾)的鏈接指針為0。信號量的值是與相應(yīng)資源的使用情況有關(guān)的。當(dāng)它的值大于0時,表示當(dāng)前可用資源的數(shù)量;當(dāng)它的值小于0時,其絕對值表示等待使用該資源的進程個數(shù),既在該信號量隊列上排隊的PCB的個數(shù)。

第2章:進程管理2.4.3信號量和P,V操作

信號量在使用過程中它的值是可變的,但只能由P,V操作來改變。設(shè)信號量為S,對S的P操作記為P(S),對它的V操作記為V(S)。

P(S)順序執(zhí)行以下兩個動作:(1)信號量的值減1,即S=S-1;(2)如果S≥0,則該進程繼續(xù)執(zhí)行;如果S<0,則把該進程的狀態(tài)置為封鎖狀態(tài),把相應(yīng)的PCB連入該信號量隊列的末尾,并放棄處理機,進行等待(直至其他進程在S上執(zhí)行V操作,把它釋放出來為止)。第2章:進程管理2.4.3信號量和P,V操作

第2章:進程管理圖2-9P操作2.4.3信號量和P,V操作

V(S)順序執(zhí)行以下兩個動作:(1)S值加1,即S=S+1;(2)如果S>0,則該進程繼續(xù)運行;如果S≤0則釋放信號量隊列上的第一個PCB(即信號量指針項所指向的PCB)所對應(yīng)的進程(把封鎖狀態(tài)改為就緒狀態(tài)),執(zhí)行V操作的進程繼續(xù)運行。其流程圖如圖2-10所示。第2章:進程管理2.4.3信號量和P,V操作

第2章:進程管理圖2-10V操作3.用P,V原語實現(xiàn)簡單同步S1——表示緩沖區(qū)是否空(0表示不空,1表示空);S2——表示緩沖區(qū)是否滿(0表示不滿,1表示滿)。規(guī)定S1和S2的初值均為0,則對緩沖區(qū)的供者進程和用者進程的同步關(guān)系用下述方式實現(xiàn):供者進程用者進程L1:啟動讀卡機L2:............收到輸人結(jié)束中斷P(S2);

從緩沖區(qū)取出信息V(S2):V(S1);P(S1);加工并存盤gotoL1;gotoL2;第2章:進程管理2.4.3信號量和P,V操作

用P,V操作實現(xiàn)同步時應(yīng)注意:(1)分析進程間的制約關(guān)系,確定信號量種類。在保持進程間有正確的同步關(guān)系情況下,哪個進程應(yīng)先執(zhí)行,哪些進程后執(zhí)行,彼此間通過什么資源(信號量)進行協(xié)調(diào),從而明確要設(shè)置哪些信號量。(2)信號量的初值與相應(yīng)資源的數(shù)量有關(guān),也與P,V操作在程序代碼中出現(xiàn)的位置有關(guān)。(3)同一信號量的P,V操作要“成對”出現(xiàn),但它們分別在不同的進程代碼中。第2章:進程管理返回到本節(jié)2.4.4管程

管程定義了一個數(shù)據(jù)結(jié)構(gòu)和能為并發(fā)進程所執(zhí)行的一組操作,這組操作能同步進程和改變管程中的數(shù)據(jù)。由管程的定義可知,管程由局部于管程的共享數(shù)據(jù)結(jié)構(gòu)說明、對這些數(shù)據(jù)結(jié)構(gòu)進行操作的一組過程以及對局部于管程的數(shù)據(jù)結(jié)構(gòu)設(shè)置初始值的語句組成。管程有以下基本特征:(1)局部于管程的數(shù)據(jù)這能被局部于管程內(nèi)的過程所訪問。(2)一個進程只有通過調(diào)用管程內(nèi)的過程才能進入管程訪問共享數(shù)據(jù)。(3)每次僅允許一個進程在管程內(nèi)執(zhí)行某個內(nèi)部過程。即進程互斥地通過調(diào)用內(nèi)部過程進入管程。其他想進入管程的過程必須等待,并阻塞在等待隊列。第2章:進程管理返回到本節(jié)2.4.5經(jīng)典進程的同步1.生產(chǎn)者-消費者問題2.讀者—寫者問題3.哲學(xué)家問題第2章:進程管理返回到本節(jié)2.5進程的通信

2.5.1進程通信的類型2.5.2進程通信的方式

第2章:進程管理返回到本章2.5.1進程通信的類型

1.共享存儲器系統(tǒng)為了傳輸大量數(shù)據(jù),在存儲器中劃出一塊共享存儲區(qū),多個進程可以通過對共享存儲區(qū)進行讀或?qū)憗韺崿F(xiàn)通信。進程在通信前,向系統(tǒng)申請建立一個共享存儲區(qū),并指定該共享存儲區(qū)的關(guān)鍵字;若該共享存儲區(qū)已經(jīng)建立,則將該共享存儲區(qū)的描述符返回給申請者。然后,申請者把獲得的共享存儲區(qū)符接到進程上;這樣,進程便可以像讀寫普通存儲器一樣地讀寫共享存儲區(qū)。第2章:進程管理2.5.1進程通信的類型

2.消息傳遞系統(tǒng)

在消息傳遞系統(tǒng)中,進程間的數(shù)據(jù)交換以消息為單位,程序員直接利用系統(tǒng)提供的一組通信命令(原語)來實現(xiàn)通信。第2章:進程管理2.5.1進程通信的類型

3.管道通信系統(tǒng)

管道是用于連接讀進程和寫進程以實現(xiàn)它們之間通信的共享文件,向管道提供輸入的發(fā)送進程(即寫進程)以字符流形式將大量的數(shù)據(jù)送入管道,而接收管道輸出的接收進程(即讀進程)可以從管道中接收數(shù)據(jù)。第2章:進程管理返回到本節(jié)2.5.2進程通信的方式

1.消息緩沖通信。所謂消息是指一組信息,消息緩沖區(qū)是含有如下信息的緩沖區(qū):指向發(fā)送進程的指針sender;指向下一個消息緩沖區(qū)的指針next;消息長度size;消息正文text。第2章:進程管理2.5.2進程通信的方式

2.信箱通信

信箱通信是一種間接通信方式。信箱是一種數(shù)據(jù)結(jié)構(gòu),其中存放信件。當(dāng)一個進程(發(fā)送進程)要與另一個進程(接收進程)通信時,可由發(fā)送進程創(chuàng)建一個鏈接兩進程的信箱,通信時發(fā)送進程只須把它的信件投入信箱,接收進程就可以在任何時候取走信件,不存在信件丟失的可能。信箱邏輯上分為信箱頭和信箱體兩部分。信箱頭中存放有關(guān)信箱的描述,信箱體由若干格子組成,每格存放一個信件,格子的數(shù)目和大小在創(chuàng)建信箱時確定。信件的傳遞可以是單向的,也可以是雙向的。第2章:進程管理

3.消息通信中的同步問題

進程間的消息通信隱含著某種同步關(guān)系:只有當(dāng)一個進程發(fā)送出消息之后,接收進程才能接收消息。對于一個發(fā)送進程來說,它在執(zhí)行發(fā)送原語后,有兩種可能選擇:(1)發(fā)送進程阻塞,直到這個消息被接收進程接收到,這種發(fā)送稱為阻塞發(fā)送。(2)發(fā)送進程不阻塞,繼續(xù)執(zhí)行,這種發(fā)送稱為非阻塞發(fā)送。同樣,對于一個接收進程來說,在執(zhí)行接收原語后,也有兩種可能選擇:(1)如果一個消息在接收原語執(zhí)行之前已經(jīng)被發(fā)送,則該消息被接收進程接收,接收進程繼續(xù)執(zhí)行。(2)如果沒有正在等待的消息,則它或者阻塞到一個消息到達;或者繼續(xù)執(zhí)行,放棄接收的努力。前者稱為阻塞接收,后者稱為非阻塞接收。第2章:進程管理返回到本節(jié)2.6進程的安全性

2.6.1死鎖的概念2.6.2死鎖的預(yù)防2.6.3死鎖的避免2.6.4死鎖的解除與系統(tǒng)恢復(fù)

第2章:進程管理返回到本章2.6.1死鎖的概念所謂死鎖是指兩個或兩個以上的進程因競爭系統(tǒng)資源而無休止地互相等待時,我們就稱這些進程是死鎖的,或者說,它們處于死鎖狀態(tài)。死鎖問題是一種具有普遍性的現(xiàn)象,日常生活中屢見不鮮,如圖所示

第2章:進程管理2.6.1死鎖的概念把產(chǎn)生死鎖的各種因素歸納起來,得到了產(chǎn)生死鎖的以下四個必要條件。(1)互斥條件:進程訪問的是臨界資源,即一個資源一次只能被一個進程所使用。(2)請求和保持條件:一進程在請求新的資源的同時,保持對某些資源的占有。(3)不剝奪條件:一個資源僅能被占有它的進程所釋放,而不能被其他進程剝奪。(4)環(huán)路等待條件:存在一個進程的環(huán)行鏈,鏈中每個進程占有著某個或某些資源,又在等待被鏈中的另一個進程所占有的資源。第2章:進程管理2.6.1死鎖的概念解決死鎖的方法一般可分為三類:(1)預(yù)防死鎖。這種方法從上述的四個死鎖條件出發(fā),通過設(shè)置一些限制來破壞其中的至少一個條件,從而預(yù)防死鎖。(2)避免死鎖。這種方法不是預(yù)先加上各種限制條件一預(yù)防產(chǎn)生死鎖的可能性,而是允許又逼近死鎖的可能性,但當(dāng)接近死鎖狀態(tài)時,采取一些有效的措施加以避免,使死鎖不至于最終發(fā)生。(3)檢測及系統(tǒng)恢復(fù)。它允許在系統(tǒng)運行過程中發(fā)生死鎖,但一旦發(fā)生便能立即檢測出來,然后采取適當(dāng)措施使系統(tǒng)恢復(fù)。第2章:進程管理返回到本節(jié)2.6.2死鎖的預(yù)防

1.防止“請求和保持”條件的出現(xiàn)

系統(tǒng)要求任一進程必須預(yù)先申請它所需要的全部資源,而且僅當(dāng)該進程的全部資源要求都能得到滿足時。系統(tǒng)才給予一次性分配,然后啟動該進程運行。進程在整個生存期間,不再請求新的資源。因此“請求和保持”條件不會出現(xiàn),死鎖也就不可能發(fā)生。第2章:進程管理2.6.2死鎖的預(yù)防

2.防止“不剝奪”條件的出現(xiàn)

在允許進程動態(tài)申請資源的前提下,規(guī)定一個進程在請求新資源不能立即得到滿足而變?yōu)榈却隣顟B(tài)之前,它必須釋放己占有的全部資源;若需要,再更新申請新資源和已釋放的資源。換言之,一個進程在使用某資源過程可以暫時放棄該資源,即允許其他進程剝奪使用該資源,從而破壞了“不剝奪”條件的出現(xiàn)。

第2章:進程管理2.6.2死鎖的預(yù)防

3.防止“環(huán)路等待”條件的出現(xiàn)

采用資源順序使用法,其基本思想是:把系統(tǒng)中所有資源按類型線性排隊,并按遞增規(guī)則賦予每類資源以惟一的編號。

第2章:進程管理返回到本節(jié)2.6.3死鎖的避免

避免死鎖與預(yù)防死鎖的區(qū)別在于,預(yù)防死鎖是設(shè)法至少破壞產(chǎn)生死鎖的必要條件之一,嚴(yán)格地防止死鎖的出現(xiàn)。而避免死鎖則不那么嚴(yán)格地限制產(chǎn)生死鎖必要條件的存在(因為即使死鎖必要條件成立,也未必一定發(fā)生死鎖),一旦有可能出現(xiàn)死鎖時,就小心地避免死鎖的最終發(fā)生。

Dijkstra的銀行家算法是最著名的避免死鎖算法。銀行家算法允許存在死鎖的前三個必要條件,與預(yù)防死鎖的幾種策略相比,它放松了限制條件,提高了資源利用率。但它還比較保守,它要求系統(tǒng)資源數(shù)固定以及在一段時間內(nèi)進程數(shù)也保持不變,還要求用戶事先提供資源的最大需求數(shù)。這些往往是不易做到的。第2章:進程管理返回到本節(jié)2.6.4死鎖的解除與系統(tǒng)恢復(fù)

死鎖解除方法可歸納為以下兩種:(1)撤銷進程法:這可以是撤銷所有死鎖進程,或者逐個撤銷死鎖進程,每撤銷一個進程就檢測死鎖是否繼續(xù)存在,若不再存在,就停止撤銷。顯然,前者顯得比較武斷。但是采用逐個撤銷方法的一個關(guān)鍵問題是按照什么原則進行撤銷,可以依據(jù)進程優(yōu)先數(shù),也可以依據(jù)最小代價原則。所謂最小代價是指撤銷路徑最短,即按該撤銷路徑所撤銷的進程數(shù)最少,這需要較復(fù)雜的處理。(2)掛起進程法:使用掛起/激活機構(gòu)掛起一些進程,剝奪它們占有的資源以解除死鎖,待以后條件滿足時,再激活被掛進程。問題是在掛起點激活比較困難,而要回退到掛起點之前某個狀態(tài)才能重新執(zhí)行,這需要保留多個現(xiàn)場,增加了開銷。目前,掛起進程法比較受到重視,在IBM4300系列等機器上采用了這種方法。

第2章:進程管理返回到本節(jié)2.7進程的演化與進展

2.7.1基本工作單位的控制粒度2.7.2線程的概念第2章:進程管理返回到本章2.7.1基本工作單位的控制粒度在Mach,WindowsNT等采用微內(nèi)核結(jié)構(gòu)的操作系統(tǒng)中,進程的功能發(fā)生了變化:它只是資源分配的單位,而不再是調(diào)度運行的單位。在微內(nèi)核系統(tǒng)中,真正調(diào)度運行的基本單位是線程。因此,實現(xiàn)并發(fā)功能的單位是線程。第2章:進程管理返回到本節(jié)2.7.2線程的概念

1.線程的引入在操作系統(tǒng)中引入進程的目的是為了使多個程序并發(fā)執(zhí)行,以提高資源利用率及系統(tǒng)吞吐量;那么,在操作系統(tǒng)中再引入線程,則是為了減少程序并發(fā)執(zhí)行時所付出的時空開銷,使操作系統(tǒng)具有更好的并發(fā)性。

2.線程的定義

線程是進程內(nèi)一個相對獨立、可調(diào)度的執(zhí)行單元。線程自己基本上不擁有資源,只擁有少量的在運行時必不可少的資源(如程序計數(shù)器、一組寄存器和棧),但它可以與同屬一個進程的其他線程共享進程擁有的全部資源。第2章:進程管理2.7.2線程的概念

3.線程的實現(xiàn)

內(nèi)核級線程是指依賴于內(nèi)核,由操作系統(tǒng)內(nèi)核完成創(chuàng)建和撤銷工作的線程。用戶級線程是指不依賴于操作系統(tǒng)核心,由應(yīng)用進程利用線程庫提供創(chuàng)建、同步、調(diào)度和管理線程的函數(shù)來控制的線程。

第2章:進程管理2.7.2線程的概念

4.線程與進程的比較由于進程與線程密切相關(guān),因此有必要對進程與線程的異同進行比較。(1)調(diào)度。(2)擁有資源。(3)并發(fā)性。(4)系統(tǒng)開銷。第2章:進程管理返回到本節(jié)2.8Linux的進程管理2.8.1Linux進程概述

2.8.2Linux進程控制2.8.3Linux進程通信第2章:進程管理返回到本章2.8.1Linux進程概述

1.進程實體的組成

Linux進程由三部分組成:正文段、用戶數(shù)據(jù)段和系統(tǒng)數(shù)據(jù)段,如圖所示。第2章:進程管理2.8.1Linux進程概述

2.進程的狀態(tài)進程是一個動態(tài)的概念,在其運行的整個生命周期中可根據(jù)具體情況不斷改變其狀態(tài)。Linux進程主要有如下幾種狀態(tài):(1)可運行狀態(tài)(task_running)(2)等待狀態(tài)(3)暫停狀態(tài)(task_stopped)(4)僵死狀態(tài)(task_zomble)第2章:進程管理第2章:進程管理

3.Linux進程控制塊task_struct的結(jié)構(gòu)描述

Task_struct結(jié)構(gòu)包含的信息如下:(1)進程當(dāng)前的狀態(tài)(2)調(diào)度信息(3)進程標(biāo)識(4)進程通信信息(5)進程的家族關(guān)系(6)時間和定時信息(7)文件系統(tǒng)信息(8)存儲管理信息(9)CPU現(xiàn)場保留信息。

第2章:進程管理返回到本節(jié)

3.Linux進程控制塊task_struct的結(jié)構(gòu)描述

Linux內(nèi)核通過進程task_struct結(jié)構(gòu)中的信息來進行進程的控制:首先通過其中的調(diào)度信息決定該進程是否運行,當(dāng)進程被調(diào)度在CPU上運行時,要根據(jù)task_struct結(jié)構(gòu)中保留的處理機現(xiàn)場來恢復(fù)進程運行現(xiàn)場,再根據(jù)虛擬內(nèi)存信息定位進程的正文和數(shù)據(jù),并通過其中的通信信息和其他進程實現(xiàn)同步與通信??傊?,對進程所有操作都要依賴task_struct結(jié)構(gòu),task_struct結(jié)構(gòu)是進程實體的核心,是進程存在的惟一標(biāo)志。2.8.2Linux進程控制

1.進程創(chuàng)建

調(diào)用fork()的進程稱為父進程,通過fork()建立的新進程稱為子進程。系統(tǒng)執(zhí)行fork()時,首先為新進程分配空閑的task_struct結(jié)構(gòu)和進程標(biāo)識號(PID),為新進程堆棧分配物理頁。然后,拷貝當(dāng)前進程(父進程)的內(nèi)容:正文段、用戶數(shù)據(jù)段及系統(tǒng)數(shù)據(jù)段task_struct大部分內(nèi)容,對子進程有別于父進程的項進行初始化。新進程的task_struct結(jié)構(gòu)地址保存在task指針數(shù)組中。

2.進程映像的交換子進程創(chuàng)建后,繼承了父進程的地址空間。在UNIX中,父進程的正文和數(shù)據(jù)拷貝給了子進程,子進程為了和父進程完成不同的任務(wù),利用exec()系統(tǒng)調(diào)用裝載新的程序映像,放棄從父進程那里拷貝過來的內(nèi)容。

第2章:進程管理2.8.2Linux進程控制

3.等待進程結(jié)束當(dāng)父進程用fork()創(chuàng)建子進程后,子進程往往通過exec()轉(zhuǎn)去執(zhí)行新裝載的程序映像。父進程可用系統(tǒng)調(diào)用wait()等待它的一個子進程的結(jié)束,wait()的參數(shù)指定了父進程等待的子進程。如果子進程尚未終止(未完成任務(wù)),則父進程掛起,一旦等到指定的子進程結(jié)束,父進程被喚醒,即可繼續(xù)再做其他工作。

4.進程終止當(dāng)需要一個進程結(jié)束或進程希望終止自己時,可通過系統(tǒng)調(diào)用exit()來實現(xiàn)。Exit()首先釋放進程占用的大部分資源,進入“task_zomb”狀態(tài),并返回一個狀態(tài)參數(shù),父進程執(zhí)行wait()時,可取得該參數(shù),使等待子進程結(jié)束的父進程恢復(fù)執(zhí)行。第2章:進程管理2.8.2Linux進程控制

第2章:進程管理返回到本節(jié)圖2-20shell執(zhí)行流程2.8.3Linux進程通信

1.信號機制信號是Linux最基本的進程通信機制。信號機制的一個主要特點是它的異步特性,這表現(xiàn)在進程在執(zhí)行期間可隨時接收到信號,甚至可能當(dāng)進程正在執(zhí)行系統(tǒng)調(diào)用時接收信號。(1)信號類型(2)信號處理方式(3)信號的發(fā)送(4)信號的檢測和處理第2章:進程管理2.8.3Linux進程通信

2.管道機制

管道是實現(xiàn)進程間大容量信息傳送的機構(gòu)。(1)匿名管道匿名管道由pipe()系統(tǒng)調(diào)用創(chuàng)建,其原型為:intpipe(intfd[2])(2)命名管道(FIFO文件)

Linux還支持另外一種管道形式,命名管道。命名管道操作方式是按先進先出方式傳送信息也稱為FIFO文件。FIFO文件和匿名管道的數(shù)據(jù)結(jié)構(gòu)及操作極其相似,二者主要區(qū)別在于FIFO文件是按名存取文件,在使用之前就已經(jīng)存在,用戶可打開或關(guān)閉FIFO文件。而匿名管道只在操作時存在,是臨時對象。另外,命名管道容許具有適當(dāng)權(quán)限的進程利用標(biāo)準(zhǔn)的open()系統(tǒng)調(diào)用加以訪問,即使是無關(guān)系的進程。而父進程不同的進程難以共享匿名管道。

第2章:進程管理2.8.3Linux進程通信

第2章:進程管理匿名管道由pipe()系統(tǒng)調(diào)用創(chuàng)建,其原型為:intpipe(intfd[2])2.8.3Linux進程通信

3.SystemV的進程通信機制

為了與其他系統(tǒng)兼容,Linux支持三種SystemV進程通信機制:消息機制、信號量機制和共享內(nèi)存機制。一般把信號量、消息和共享內(nèi)存機制統(tǒng)稱為SystemVIPC機制,而把信號量、消息和共享內(nèi)存統(tǒng)稱為SystemVIPC對象。Linux對三種機制的實施大同小異。上述對象都具有相同類型的接口(即系統(tǒng)調(diào)用),因此,只討論其中最快的一種形式:共享內(nèi)存機制。

第2章:進程管理2.8.3Linux進程通信

第2章:進程管理返回到本節(jié)圖2-22共享內(nèi)存段的數(shù)據(jù)結(jié)構(gòu)關(guān)系2.9Windows2000/XP的進程管理2.9.1Windows2000/XP進程管理2.9.2Windows2000/XP線程管理2.9.3Windows2000/XP的進程互斥與同步2.9.4Windows2000/XP進程間的通信2.9.5Windows2000/XP的線程調(diào)度第2章:進程管理返回到本章2.9.1Windows2000/XP進程管理

1.Windows2000/XP進程的組成

Windows2000/XP進程包括以下內(nèi)容:(1)一個可執(zhí)行程序。(2)一個由該進程專用的地址空間,它是該進程可以使用的虛擬內(nèi)存地址的集合。(3)系統(tǒng)資源,例如信號量、通信端口、文件等。它們是由程序執(zhí)行的,由操作系統(tǒng)分配給該進程。(4)一個或多個線程。在Windows2000/XP中每個進程是由一個進程環(huán)境塊(processenvironmentblock,PEB)結(jié)構(gòu)描述,系統(tǒng)內(nèi)核外是看不到PEB的。第2章:進程管理2.9.1Window

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論