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

下載本文檔

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

文檔簡介

第2章進(jìn)程管理

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

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

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

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

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

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

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

第2章:進(jìn)程管理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章:進(jìn)程管理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章:進(jìn)程管理3.進(jìn)程的定義及其特征進(jìn)程是程序在數(shù)據(jù)集合上的運行過程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨立單位。進(jìn)程具有如下特征:(1)動態(tài)特征。(2)并發(fā)特征。(3)獨立特征。(4)相互制約特征。第2章:進(jìn)程管理4.進(jìn)程的類型(1)系統(tǒng)進(jìn)程和用戶進(jìn)程(2)父進(jìn)程和子進(jìn)程第2章:進(jìn)程管理圖2-2進(jìn)程族系關(guān)系圖返回到本節(jié)2.1.2進(jìn)程管理進(jìn)程作為操作系統(tǒng)的核心,具有如下管理的功能:

1.進(jìn)程族系。

2.原語操作

3.進(jìn)程創(chuàng)建

4.進(jìn)程終止

5.進(jìn)程阻塞

6.進(jìn)程喚醒

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

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

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

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

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

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

如圖所示:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

①中斷屏蔽方法

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

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

第2章:進(jìn)程管理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,則該進(jìn)程繼續(xù)執(zhí)行;如果S<0,則把該進(jìn)程的狀態(tài)置為封鎖狀態(tài),把相應(yīng)的PCB連入該信號量隊列的末尾,并放棄處理機,進(jìn)行等待(直至其他進(jìn)程在S上執(zhí)行V操作,把它釋放出來為止)。第2章:進(jìn)程管理2.4.3信號量和P,V操作

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

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

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

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

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

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

2.5.1進(jìn)程通信的類型2.5.2進(jìn)程通信的方式

第2章:進(jìn)程管理返回到本章2.5.1進(jìn)程通信的類型

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

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

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

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

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

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

2.信箱通信

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

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

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

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

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

第2章:進(jìn)程管理2.6.1死鎖的概念把產(chǎn)生死鎖的各種因素歸納起來,得到了產(chǎn)生死鎖的以下四個必要條件。(1)互斥條件:進(jìn)程訪問的是臨界資源,即一個資源一次只能被一個進(jìn)程所使用。(2)請求和保持條件:一進(jìn)程在請求新的資源的同時,保持對某些資源的占有。(3)不剝奪條件:一個資源僅能被占有它的進(jìn)程所釋放,而不能被其他進(jìn)程剝奪。(4)環(huán)路等待條件:存在一個進(jìn)程的環(huán)行鏈,鏈中每個進(jìn)程占有著某個或某些資源,又在等待被鏈中的另一個進(jìn)程所占有的資源。第2章:進(jìn)程管理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章:進(jìn)程管理返回到本節(jié)2.6.2死鎖的預(yù)防

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

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

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

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

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

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

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

第2章:進(jìn)程管理返回到本節(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)進(jìn)程數(shù)也保持不變,還要求用戶事先提供資源的最大需求數(shù)。這些往往是不易做到的。第2章:進(jìn)程管理返回到本節(jié)2.6.4死鎖的解除與系統(tǒng)恢復(fù)

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

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

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

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

2.線程的定義

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

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

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

第2章:進(jìn)程管理2.7.2線程的概念

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

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

1.進(jìn)程實體的組成

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

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

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

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

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

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

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

1.進(jìn)程創(chuàng)建

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

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

第2章:進(jìn)程管理2.8.2Linux進(jìn)程控制

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

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

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

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

2.管道機制

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

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

第2章:進(jìn)程管理2.8.3Linux進(jìn)程通信

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

3.SystemV的進(jìn)程通信機制

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

第2章:進(jìn)程管理2.8.3Linux進(jìn)程通信

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

1.Windows2000/XP進(jìn)程的組成

Windows2000/XP進(jìn)程包括以下內(nèi)容:(1)一個可執(zhí)行程序。(2)一個由該進(jìn)程專用的地址空間,它是該進(jìn)程可以使用的虛擬內(nèi)存地址的集合。(3)系統(tǒng)資源,例如信號量、通信端口、文件等。它們是由程序執(zhí)行的,由操作系統(tǒng)分配給該進(jìn)程。(4)一個或多個線程。在Windows2000/XP中每個進(jìn)程是由一個進(jìn)程環(huán)境塊(processenvironmentblock,PEB)結(jié)構(gòu)描述,系統(tǒng)內(nèi)核外是看不到PEB的。第2章:進(jìn)程管理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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論