[工學(xué)]操作系統(tǒng)課件-第2章-進(jìn)程_第1頁(yè)
[工學(xué)]操作系統(tǒng)課件-第2章-進(jìn)程_第2頁(yè)
[工學(xué)]操作系統(tǒng)課件-第2章-進(jìn)程_第3頁(yè)
[工學(xué)]操作系統(tǒng)課件-第2章-進(jìn)程_第4頁(yè)
[工學(xué)]操作系統(tǒng)課件-第2章-進(jìn)程_第5頁(yè)
已閱讀5頁(yè),還剩68頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第二章 進(jìn)程管理 第一節(jié):進(jìn)程的概念前趨圖:是一個(gè)有向無(wú)循環(huán)圖。 前趨圖用于描述進(jìn)程之間執(zhí)行的前后關(guān)系。 圖中的每個(gè)結(jié)點(diǎn)可用于描述一個(gè)程序段或進(jìn)程,乃至一條語(yǔ)句; 結(jié)點(diǎn)間的有向邊則用于表示兩個(gè)結(jié)點(diǎn)之間存在的偏序或前趨關(guān)系“”。節(jié)點(diǎn)圖21(a) 中存在著這樣的前趨關(guān)系:P1P2, P1P3, P1P4, P2P5, P3P5, P4P6, P4P7, P5P8, P6P8, P7P9, P8P9圖 2-1 前趨圖 或表示為: P=P1, P2, P3, P4, P5, P6, P7, P8, P9= (P1, P2), (P1, P3), (P1, P4), (P2, P5), (P3, P5)

2、, (P4, P6), (P4, P7), (P5, P8), (P6, P8), (P7, P9), (P8, P9)應(yīng)當(dāng)注意,前趨圖中必須不存在循環(huán),但在圖2-1(b)中卻有著下述的前趨關(guān)系:S2S3, S3S2 圖 2-1 前趨圖 1 、程序的順序執(zhí)行圖 2-2 程序的順序執(zhí)行 S1: a=x+y;S2: b=a-5;S3: c=b+1;試想S1、S2、S3三條語(yǔ)句以何順序執(zhí)行?1 、程序的順序執(zhí)行程序順序執(zhí)行時(shí)的特征 順序性:(2) 封閉性(運(yùn)行時(shí)候獨(dú)占處理機(jī)資源,運(yùn)行結(jié)果不受外界影響)程序可再現(xiàn)性: (3) 可再現(xiàn)性(初始條件相同,結(jié)果相同)2、程序的并發(fā)執(zhí)行及其特征 2、程序的并發(fā)

3、執(zhí)行及其特征 2.1程序的并發(fā)執(zhí)行 圖 2-3 并發(fā)執(zhí)行時(shí)的前趨圖 在該例中存在下述前趨關(guān)系: IiCi,IiIi+1, CiPi, CiCi+1,PiPi+1而Ii+1和Ci及Pi-1是重迭的,亦即在Pi-1和Ci以及Ii+1之間,可以并發(fā)執(zhí)行。如何實(shí)現(xiàn)并發(fā)執(zhí)行?對(duì)于具有下述四條語(yǔ)句的程序段: S1: a=x+2 S2: b=y+4 S3: c=a+b S4: d=c+b 請(qǐng)畫(huà)出前趨關(guān)系圖。2.2 程序并發(fā)執(zhí)行時(shí)的特征 間斷性(相互制約性)后面的模塊等待前面的模塊 傳來(lái)的結(jié)果,然后才執(zhí)行(如打印模塊等待 計(jì)算模塊完成)。走走停停。 失去封閉性 :多個(gè)程序共享系統(tǒng)中的各種資源, 因而這些資源的

4、狀態(tài)將由多個(gè)程序來(lái)改變, 致使程序的運(yùn)行已失去了封閉性。 結(jié)果是一個(gè)程序運(yùn)行時(shí)會(huì)受到另一個(gè)程序的 影響。 不可再現(xiàn)性 :程序在并發(fā)執(zhí)行時(shí),由于失去了封 閉性,也將導(dǎo)致失去其可再現(xiàn)性下面看個(gè)小例子: 例如,有兩個(gè)循環(huán)程序A和B,它們共享一個(gè)變量N。程序A每執(zhí)行一次時(shí),都要做N=N+1操作;程序B每執(zhí)行一次時(shí), 都要執(zhí)行Print(N)操作,然后再將N置成“0”。程序A和B以不同的速度運(yùn)行。 (1) N=N+1在Print(N)和N=0之前,此時(shí)得到的N值分別為n+1, n+1, 0。 (2) N=N+1在Print(N)和N=0之后,此時(shí)得到的N值分別為n, 0, 1。 (3) N=N+1在Pr

5、int(N)和N=0之間,此時(shí)得到的N值分別為n, n+1, 0。 結(jié)論:程序在并發(fā)執(zhí)行時(shí),由于失去了封閉性,其計(jì)算結(jié)果已經(jīng)和并發(fā)執(zhí)行速度有關(guān), 從而使程序失去了可再現(xiàn)性,亦即,程序經(jīng)過(guò)多次執(zhí)行后,雖然他們執(zhí)行時(shí)的環(huán)境和初始條件相同,但得到的結(jié)果卻不相同。 順序執(zhí)行: 并發(fā)執(zhí)行:程序具有封閉性 程序失去封閉性獨(dú)享資源 共享資源(互為存在條件)可再現(xiàn)性 程序與“計(jì)算”不再一一對(duì)應(yīng)有相互制約3 、進(jìn)程(Process)3.1較典型的進(jìn)程定義有:進(jìn)程是程序的一次執(zhí)行。進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時(shí)所發(fā)生 的活動(dòng)。進(jìn)程是程序在一個(gè)數(shù)據(jù)集合上運(yùn)行的過(guò)程,它是系統(tǒng)進(jìn) 行資源分配和調(diào)度的一個(gè)獨(dú)立

6、單位。進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時(shí)所發(fā)生的活動(dòng)。進(jìn)程是程序在一個(gè)數(shù)據(jù)集合上運(yùn)行的過(guò)程,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位; 3.2 進(jìn)程的組成:進(jìn)程的實(shí)體由: 程序段、 數(shù)據(jù)段、 進(jìn)程控制塊PCB組成。有人把這三部分稱(chēng)為”進(jìn)程映像”. 通常的程序是不能并發(fā)執(zhí)行的,為使程序能并發(fā)執(zhí)行,應(yīng)為之配置一進(jìn)程控制塊,即PCB; 所謂創(chuàng)建進(jìn)程是指創(chuàng)建進(jìn)程實(shí)體中的PCB,撤銷(xiāo)亦如此。1)結(jié)構(gòu)化特征:含代碼段、數(shù)據(jù)段和核心段(在地址空間中) 2)動(dòng)態(tài)性:進(jìn)程的實(shí)質(zhì)是進(jìn)程實(shí)體的一次執(zhí)行過(guò)程,動(dòng)態(tài)性是進(jìn)程的最基本特征。3)并發(fā)性: 指多個(gè)進(jìn)程實(shí)體同存于內(nèi)存中,且能在一段時(shí)間內(nèi)同時(shí)運(yùn)行,它是進(jìn)程

7、的重要特征,也是操作系統(tǒng)的重要特征。4)獨(dú)立性: 各進(jìn)程的地址空間相互獨(dú)立,除非采用進(jìn)程間通信手段;5)異步性:這是指進(jìn)程按各自獨(dú)立的,不可預(yù)知的速度向前推進(jìn)。導(dǎo)致程序執(zhí)行的不可再現(xiàn)性3.3進(jìn)程的特征:1)程序是靜態(tài)的,進(jìn)程是動(dòng)態(tài)的;(是根本區(qū)別) 程序是有序代碼的集合;進(jìn)程是程序的執(zhí)行。2)進(jìn)程和程序不是一一對(duì)應(yīng)的 ; 一個(gè)程序可對(duì)應(yīng)多個(gè)進(jìn)程,即多個(gè)進(jìn)程可執(zhí)行同一程序 ; 一個(gè)進(jìn)程可以執(zhí)行一個(gè)或幾個(gè)程序 3)進(jìn)程是暫時(shí)的,程序的永久的:進(jìn)程是一個(gè)狀態(tài)變化的過(guò)程,程序可長(zhǎng)久保存。4)進(jìn)程與程序的組成不同:進(jìn)程的組成包括程序、數(shù)據(jù)和進(jìn)程控制塊(即進(jìn)程狀態(tài)信息)。5)進(jìn)程具有創(chuàng)建其他進(jìn)程的功能,而

8、程序沒(méi)有。3.4進(jìn)程與程序的區(qū)別 程序與進(jìn)程的類(lèi)比 程 序 進(jìn) 程 唱歌的曲譜或音樂(lè)樂(lè)器的樂(lè)譜 演出或演奏 劇本 演出 火車(chē) 列車(chē) 1、判斷題:進(jìn)程是一個(gè)程序在某數(shù)據(jù)集上的一次執(zhí)行,所以不同進(jìn)程對(duì)應(yīng)不同的程序。分析:進(jìn)程是程序在某數(shù)據(jù)集上得一次執(zhí)行,但是不同進(jìn)程可以對(duì)應(yīng)同一程序。2、程序順序執(zhí)行與并發(fā)執(zhí)行有什么不同?3、用戶(hù)程序必須在進(jìn)程中運(yùn)行。正確4、判斷題:兩次打開(kāi)Word字處理程序,編輯同一篇文章,因?yàn)槌绦?一樣(Word 2003),數(shù)據(jù)一樣(同一篇文章),所以系統(tǒng)中運(yùn)行的這兩個(gè)Word字處理程序是同一個(gè)進(jìn)程。錯(cuò)誤,運(yùn)行的是2個(gè)不同的進(jìn)程3.5處理機(jī)調(diào)度器(dispatcher)把處理

9、機(jī)從一個(gè)進(jìn)程切換到另一個(gè)進(jìn)程;防止某進(jìn)程獨(dú)占處理機(jī);處理機(jī)調(diào)度器(進(jìn)程調(diào)度):是操作系統(tǒng)中的一段代碼,它完成如下功能:3.6 進(jìn)程的三種基本狀態(tài) 1)就緒(Ready)狀態(tài):已分配到除CPU以外的所有必要的資源,只要能再獲得處理機(jī),便可立即執(zhí)行的狀態(tài)。多個(gè)排成一隊(duì)稱(chēng)為就緒隊(duì)列。 2) 執(zhí)行狀態(tài):指進(jìn)程已獲得處理機(jī),其程序正在執(zhí)行; 在單處理機(jī)系統(tǒng)中,只能有一個(gè)進(jìn)程處于執(zhí)行狀態(tài); 在多處理機(jī)系統(tǒng)中,則可能多個(gè)進(jìn)程處于執(zhí)行狀態(tài)。 3) 阻塞狀態(tài) :進(jìn)程因發(fā)生某事件(如請(qǐng)求IO、申請(qǐng)緩沖空間等)而暫停執(zhí)行時(shí)的狀態(tài),亦即進(jìn)程的執(zhí)行受到阻塞,故稱(chēng)這種暫停狀態(tài)為阻塞狀態(tài),有時(shí)也稱(chēng)為“等待”狀態(tài)或“睡眠”狀

10、態(tài)。 通常將處于阻塞狀態(tài)的進(jìn)程排成一個(gè)隊(duì)列,稱(chēng)為阻塞隊(duì)列。在有的系統(tǒng)中,按阻塞原因的不同而將處于阻塞狀態(tài)的進(jìn)程排成多個(gè)隊(duì)列。圖 2-5 進(jìn)程的三種基本狀態(tài)及其轉(zhuǎn)換(教材講5種) 結(jié)束新進(jìn)程接納完成作業(yè)后備隊(duì)列進(jìn)程就緒隊(duì)列 外存 內(nèi)存 作業(yè)調(diào)度一些處理器(CPU)阻塞隊(duì)列阻塞隊(duì)列3.7五狀態(tài)進(jìn)程模型五狀態(tài)進(jìn)程模型(狀態(tài)變遷)五狀態(tài)進(jìn)程模型(單隊(duì)列結(jié)構(gòu))五狀態(tài)進(jìn)程模型(多隊(duì)列結(jié)構(gòu))3.8 進(jìn)程狀態(tài)的轉(zhuǎn)換 新(New)狀態(tài)就緒狀態(tài)。 (2)就緒(Ready)狀態(tài)執(zhí)行狀態(tài)。 (3)執(zhí)行狀態(tài)阻塞狀態(tài)。 (4)阻塞狀態(tài)就緒狀態(tài)。(5)執(zhí)行狀態(tài)就緒狀態(tài)3.9掛起進(jìn)程模型這個(gè)問(wèn)題的出現(xiàn)是由于進(jìn)程優(yōu)先級(jí)的引入,

11、一些低優(yōu)先級(jí)進(jìn)程可能等待較長(zhǎng)時(shí)間,從而被對(duì)換至外存。這樣做的目的是:提高處理機(jī)效率:就緒進(jìn)程表為空時(shí),要提交新進(jìn)程,以提高處理機(jī)效率;為運(yùn)行進(jìn)程提供足夠內(nèi)存:資源緊張時(shí),暫停某些進(jìn)程,如:CPU繁忙(或?qū)崟r(shí)任務(wù)執(zhí)行),內(nèi)存緊張用于調(diào)試:在調(diào)試時(shí),掛起被調(diào)試進(jìn)程(從而對(duì)其地址空間進(jìn)行讀寫(xiě))單掛起進(jìn)程模型雙掛起進(jìn)程模型內(nèi)存外存3.9.1 狀態(tài)就緒狀態(tài)(Ready):進(jìn)程在內(nèi)存且可立即進(jìn)入運(yùn)行狀態(tài);阻塞狀態(tài)(Blocked):進(jìn)程在內(nèi)存并等待某事件的出現(xiàn);阻塞掛起狀態(tài)(Blocked, suspend):進(jìn)程在外存并等待某事件的出現(xiàn);就緒掛起狀態(tài)(Ready, suspend):進(jìn)程在外存,但只要進(jìn)

12、入內(nèi)存,即可運(yùn)行;注:這里只列出了意義有變化或新的狀態(tài)。3.9.2轉(zhuǎn)換掛起(Suspend):把一個(gè)進(jìn)程從內(nèi)存轉(zhuǎn)到外存;可能有以下幾種情況:阻塞到阻塞掛起:沒(méi)有進(jìn)程處于就緒狀態(tài)或就緒進(jìn)程要求更多內(nèi)存資源時(shí),會(huì)進(jìn)行這種轉(zhuǎn)換,以提交新進(jìn)程或運(yùn)行就緒進(jìn)程;就緒到就緒掛起:當(dāng)有高優(yōu)先級(jí)阻塞(系統(tǒng)認(rèn)為會(huì)很快就緒的)進(jìn)程和低優(yōu)先級(jí)就緒進(jìn)程時(shí),系統(tǒng)會(huì)選擇掛起低優(yōu)先級(jí)就緒進(jìn)程;運(yùn)行到就緒掛起:對(duì)搶占式分時(shí)系統(tǒng),當(dāng)有高優(yōu)先級(jí)阻塞掛起進(jìn)程因事件出現(xiàn)而進(jìn)入就緒掛起時(shí),系統(tǒng)可能會(huì)把正運(yùn)行的進(jìn)程轉(zhuǎn)到就緒掛起狀態(tài);激活(Activate):把一個(gè)進(jìn)程從外存轉(zhuǎn)到內(nèi)存;可能有以下幾種情況:就緒掛起到就緒:沒(méi)有就緒進(jìn)程或掛起就

13、緒進(jìn)程優(yōu)先級(jí)高于就緒進(jìn)程時(shí),會(huì)進(jìn)行這種轉(zhuǎn)換;阻塞掛起到阻塞:當(dāng)一個(gè)進(jìn)程釋放足夠內(nèi)存時(shí),系統(tǒng)會(huì)把一個(gè)高優(yōu)先級(jí)阻塞掛起(系統(tǒng)認(rèn)為會(huì)很快出現(xiàn)所等待的事件)進(jìn)程變成阻塞狀態(tài);事件出現(xiàn)(Event Occurs):進(jìn)程等待的事件出現(xiàn);如:操作完成、申請(qǐng)成功等;可能的情況有:阻塞到就緒:針對(duì)內(nèi)存進(jìn)程的事件出現(xiàn);阻塞掛起到就緒掛起:針對(duì)外存進(jìn)程的事件出現(xiàn);收容(Admit):收容(提交)一個(gè)新進(jìn)程,進(jìn)入就緒狀態(tài)或就緒掛起狀態(tài)。1、進(jìn)程由就緒態(tài)轉(zhuǎn)為運(yùn)行態(tài)是因?yàn)椋ǎ┮鸬模緼、中斷事件 b、進(jìn)程狀態(tài)轉(zhuǎn)換c、進(jìn)程調(diào)度的d、為程序創(chuàng)建進(jìn)程C2、分配到必要的資源并獲得處理機(jī)的進(jìn)程狀態(tài)是( )。 運(yùn)行態(tài)3、當(dāng)( ),進(jìn)

14、程從執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)。 a、進(jìn)程被調(diào)度程序選中 b、時(shí)間片到 c、等待某一事件 d、等待的時(shí)間發(fā)生B4、判斷題:兩次打開(kāi)Word字處理程序,編輯同一篇文章,因?yàn)槌绦?一樣(Word 2003),數(shù)據(jù)一樣(同一篇文章),所以系統(tǒng)中運(yùn)行的這兩個(gè)Word字處理程序是同一個(gè)進(jìn)程。3.10、進(jìn)程控制塊 3.10.1. 進(jìn)程控制塊的作用 或者說(shuō):OS是根據(jù)PCB來(lái)對(duì)并發(fā)執(zhí)行的進(jìn)程進(jìn)行控制和管理的。簡(jiǎn)單題:進(jìn)程控制塊的作用(要擴(kuò)展)?判斷題:進(jìn)程控制塊是進(jìn)程存在的唯一標(biāo)志。進(jìn)程控制塊是由OS維護(hù)的用來(lái)記錄進(jìn)程相關(guān)信息的一塊內(nèi)存。正確3.10.2進(jìn)程控制塊的內(nèi)容(數(shù)據(jù)結(jié)構(gòu)很復(fù)雜)進(jìn)程標(biāo)識(shí)符:內(nèi)部進(jìn)程標(biāo)識(shí)

15、符(process ID),唯一,通常是一個(gè)整數(shù);進(jìn)程名(外部標(biāo)識(shí)符),通常基于可執(zhí)行文件名(不唯一);用戶(hù)標(biāo)識(shí)符(user ID);進(jìn)程組關(guān)系(process group)進(jìn)程控制信息:當(dāng)前狀態(tài);優(yōu)先級(jí)(priority);代碼執(zhí)行入口地址;程序的外存地址;運(yùn)行統(tǒng)計(jì)信息(執(zhí)行時(shí)間、頁(yè)面調(diào)度);進(jìn)程間同步和通信;阻塞原因進(jìn)程調(diào)度信息:進(jìn)程狀態(tài)、進(jìn)程優(yōu)先級(jí)、資源信息等處理機(jī)狀態(tài):寄存器值(通用、程序計(jì)數(shù)器PC、狀態(tài)PSW,地址包括棧指針)3.10.3 PCB的組織方式鏈表:同一狀態(tài)的進(jìn)程其PCB成一鏈表,多個(gè)狀態(tài)對(duì)應(yīng)多個(gè)不同的鏈表各狀態(tài)的進(jìn)程形成不同的鏈表:就緒鏈表、阻塞鏈表索引表:同一狀態(tài)的進(jìn)

16、程歸入一個(gè)index表(由index指向PCB),多個(gè)狀態(tài)對(duì)應(yīng)多個(gè)不同的index表各狀態(tài)的進(jìn)行形成不同的索引表:就緒索引表、阻塞索引表把具有相同狀態(tài)的PCB,用其中的鏈接字,鏈接成一個(gè)隊(duì)列。4、進(jìn)程控制返回4.1 進(jìn)程控制的功能:完成進(jìn)程狀態(tài)的轉(zhuǎn)換。原語(yǔ)(primitive):由若干條指令構(gòu)成的“原子操作(atomic operation)”過(guò)程,作為一個(gè)整體而不可分割要么全都完成,要么全都不做。許多系統(tǒng)調(diào)用就是原語(yǔ)。注意:系統(tǒng)調(diào)用并不都是原語(yǔ)。進(jìn)程A調(diào)用read(),因無(wú)數(shù)據(jù)而阻塞,在read()里未返回。然后進(jìn)程B調(diào)用read(),此時(shí)read()被重入。系統(tǒng)調(diào)用不一定一次執(zhí)行完并返回該

17、進(jìn)程,有可能在特定的點(diǎn)暫停,而轉(zhuǎn)入到其他進(jìn)程。4.2.1 進(jìn)程圖(Process Graph) 圖 2-9 進(jìn)程樹(shù) 用于描述進(jìn)程家族關(guān)系的有向樹(shù)。圖中的結(jié)點(diǎn)代表進(jìn)程 。父進(jìn)程 :在進(jìn)程Pi創(chuàng)建了進(jìn)程Pj后,稱(chēng)Pi是Pj的父進(jìn)程。子進(jìn)程:在進(jìn)程Pi創(chuàng)建了進(jìn)程Pj后,稱(chēng)Pj是Pi的子進(jìn)程。4.2 進(jìn)程的創(chuàng)建4.2.2 引起創(chuàng)建進(jìn)程的事件 用戶(hù)登錄。 (2) 作業(yè)調(diào)度。 (3) 提供服務(wù)。 (4) 應(yīng)用請(qǐng)求。 4.2.3 進(jìn)程的創(chuàng)建(Creation of Progress)過(guò)程 (1)申請(qǐng)空白PCB。 (2) 為新進(jìn)程分配資源。 (分配內(nèi)存空間) (3) 初始化進(jìn)程控制塊。 (4) 將新進(jìn)程插入就

18、緒隊(duì)列,如果進(jìn)程就緒隊(duì)列能夠接納新進(jìn)程, 便將新進(jìn)程插入就緒隊(duì)列。 4.3 進(jìn)程退出也稱(chēng)為“終止”或主程序返回:調(diào)用exit()可終止進(jìn)程。釋放資源:釋放內(nèi)外存空間關(guān)閉所有打開(kāi)文件釋放共享內(nèi)存段和各種鎖定lock4.4 進(jìn)程的阻塞與喚醒4.4.1 引起進(jìn)程阻塞和喚醒的事件請(qǐng)求系統(tǒng)服務(wù) 2) 啟動(dòng)某種操作 3) 新數(shù)據(jù)尚未到達(dá) 4) 無(wú)新工作可做 4.4.2. 進(jìn)程阻塞過(guò)程 正在執(zhí)行的進(jìn)程,當(dāng)發(fā)現(xiàn)上述某事件時(shí),無(wú)法繼續(xù)執(zhí)行,于是進(jìn)程調(diào)用阻塞原語(yǔ)block把自己阻塞??梢?jiàn),進(jìn)程的阻塞是進(jìn)程自身的一種主動(dòng)行為。進(jìn)入block過(guò)程后,由于此時(shí)該進(jìn)程還處于執(zhí)行狀態(tài),所以應(yīng)先立即停止執(zhí)行,把進(jìn)程控制塊中的

19、現(xiàn)行狀態(tài)由“執(zhí)行”改為阻塞,并將PCB插入阻塞隊(duì)列。如果系統(tǒng)中設(shè)置了因不同事件而阻塞的多個(gè)阻塞隊(duì)列,則應(yīng)將本進(jìn)程插入到具有相同事件的阻塞(等待)隊(duì)列。 最后,轉(zhuǎn)調(diào)度程序進(jìn)行重新調(diào)度,將處理機(jī)分配給另一就緒進(jìn)程,并進(jìn)行切換。 4.4.3 進(jìn)程喚醒過(guò)程 當(dāng)被阻塞進(jìn)程所期待的事件出現(xiàn)時(shí),如I/O完成或其所期待的數(shù)據(jù)已經(jīng)到達(dá),則由有關(guān)進(jìn)程(比如,用完并釋放了該I/O設(shè)備的進(jìn)程)調(diào)用喚醒原語(yǔ)wakeup( ),將等待該事件的進(jìn)程喚醒。喚醒原語(yǔ)執(zhí)行的過(guò)程是:首先把被阻塞的進(jìn)程從等待該事件的阻塞隊(duì)列中移出,將其PCB中的現(xiàn)行狀態(tài)由阻塞改為就緒,然后再將該P(yáng)CB插入到就緒隊(duì)列中。 4.5 進(jìn)程的掛起與激活 引

20、起進(jìn)程掛起的事件:4.5.1. 進(jìn)程的掛起掛起原語(yǔ)的執(zhí)行過(guò)程是:首先檢查被掛起進(jìn)程的狀態(tài),若處于活動(dòng)就緒狀態(tài),便將其改為靜止就緒;對(duì)于活動(dòng)阻塞狀態(tài)的進(jìn)程,則將之改為靜止阻塞。 最后,若被掛起的進(jìn)程正在執(zhí)行,則轉(zhuǎn)向調(diào)度程序重新調(diào)度。-或父進(jìn)程請(qǐng)求將自己的某個(gè)子進(jìn)程掛起,-系統(tǒng)將利用掛起原語(yǔ)suspend( )將指定進(jìn)程或處于阻塞狀態(tài)的進(jìn)程掛起。-用戶(hù)進(jìn)程請(qǐng)求將自己掛起;4.5.2. 進(jìn)程的激活過(guò)程系統(tǒng)將利用激活原語(yǔ)active( )將指定進(jìn)程激活。 激活原語(yǔ)先將進(jìn)程從外存調(diào)入內(nèi)存,檢查該進(jìn)程的現(xiàn)行狀態(tài),若是靜止就緒,便將之改為活動(dòng)就緒;若為靜止阻塞便將之改為活動(dòng)阻塞。例: NT線程的掛起和激活N

21、T中處理機(jī)的分配對(duì)象為線程,一個(gè)線程可被多次掛起和多次激活。在線程內(nèi)有一個(gè)掛起計(jì)數(shù)(suspend count),掛起操作使該計(jì)數(shù)加1,激活操作將該計(jì)數(shù)減1;當(dāng)掛起計(jì)數(shù)為0時(shí),線程恢復(fù)執(zhí)行。(1) 掛起:Windows NT中的SuspendThread可掛起指定的線程; DWORD SuspendThread( HANDLE hThread / handle to the thread ); (2) 激活:Windows NT中的ResumeThread可恢復(fù)指定線程的執(zhí)行; DWORD ResumeThread( HANDLE hThread / identifies thread to

22、restart ); 例子NT_thread.cpp#include #include #include #include void SubThread(void)int i;for (i=0;i5;i+)cout SubThread i endl;Sleep(2000);void main(void) cout CreateThread endl;/ Create a thread;DWORD IDThread; HANDLE hThread;hThread = CreateThread(NULL, / no security attributes 0, / use default stac

23、k size (LPTHREAD_START_ROUTINE) SubThread, / thread function NULL, / no thread function argument 0, / use default creation flags &IDThread); / returns thread identifier / Check the return value for success. if (hThread = NULL)cout CreateThread error endl;int i;for (i=0;i5;i+)cout MainThread i endl;i

24、f (i=1) if (SuspendThread(hThread)=0 xFFFFFFFF)cout Suspend thread error. endl;elsecout Suspend thread is ok. endl;if (i=3)if (ResumeThread(hThread)=0 xFFFFFFFF)cout Resume thread error. endl;elsecout Resume thread is ok. endl;Sleep(4000);運(yùn)行結(jié)果CreateThreadMainThread0SubThread0SubThread1MainThread1Sus

25、pend thread is ok.MainThread2MainThread3Resume thread is ok.SubThread2SubThread3MainThread4SubThread4例子 NT_thread.cpp#include #include #include #include void SubThread(void)int i;for (i=0;i5;i+)cout SubThread i endl;Sleep(2000);/改一下時(shí)間,輸出順序會(huì)有變化此處是用戶(hù)自己的函數(shù),完成指定功能void main(void) cout CreateThread endl;/

26、 Create a thread;DWORD IDThread; HANDLE hThread;hThread = CreateThread(NULL, / no security attributes 0, / use default stack size (LPTHREAD_START_ROUTINE) SubThread, / thread function NULL, / no thread function argument 0, / use default creation flags &IDThread); / returns thread identifier / Check

27、the return value for success. if (hThread = NULL)cout CreateThread error endl;int i;for (i=0;i5;i+)cout MainThread i endl;if (i=1) if (SuspendThread(hThread)=0 xFFFFFFFF)cout Suspend thread error. endl;elsecout Suspend thread is ok. endl;if (i=3)if (ResumeThread(hThread)=0 xFFFFFFFF)cout Resume thre

28、ad error. endl;elsecout Resume thread is ok. endl;Sleep(4000);/改一下結(jié)果會(huì)有變化。運(yùn)行結(jié)果CreateThreadMainThread0/輸出后。 Sleep(4000)SubThread0/輸出后,Sleep(2000)SubThread1 /輸出后,Sleep(2000)MainThread1/輸出后。 Sleep(4000)Suspend thread is ok.MainThread2MainThread3Resume thread is ok. /輸出后。 Sleep(4000)SubThread2SubThread3M

29、ainThread4SubThread4進(jìn)程創(chuàng)建后只要通過(guò)進(jìn)程調(diào)度獲得cpu,就自動(dòng)執(zhí)行!5 線程(THREAD)返回引入線程的目的是簡(jiǎn)化進(jìn)程間的通信,以小的開(kāi)銷(xiāo)來(lái)提高進(jìn)程內(nèi)的并發(fā)程度。5.1 線程的引入進(jìn)程:資源分配單位(存儲(chǔ)器、文件)和CPU調(diào)度(分派)單位-未引入線程時(shí)。又稱(chēng)為“任務(wù)(task)“ 線程:作為CPU調(diào)度單位,而引入線程后進(jìn)程只作為其他資源分配單位。只擁有必不可少的資源,如:線程狀態(tài)、寄存器上下文和棧同樣具有就緒、阻塞和執(zhí)行三種基本狀態(tài)線程的優(yōu)點(diǎn):減小并發(fā)執(zhí)行的時(shí)間和空間開(kāi)銷(xiāo)(線程的創(chuàng)建、退出和調(diào)度),因此容許在系統(tǒng)中建立更多的線程來(lái)提高并發(fā)程度。線程的創(chuàng)建時(shí)間比進(jìn)程短;線

30、程的終止時(shí)間比進(jìn)程短;同進(jìn)程內(nèi)的線程切換時(shí)間比進(jìn)程短;由于同進(jìn)程內(nèi)線程間共享內(nèi)存和文件資源,可直接進(jìn)行不通過(guò)內(nèi)核的通信;進(jìn)程與線程的關(guān)系5.2 線程的屬性 線程具有許多傳統(tǒng)進(jìn)程所具有的特征,故又稱(chēng)為輕型進(jìn)程(1)輕型實(shí)體。(線程是進(jìn)程中的一個(gè)實(shí)體 )(2) 獨(dú)立調(diào)度和分派的基本單位。在多線程O(píng)S中,線程是能獨(dú)立運(yùn)行的基本單位,因而也是獨(dú)立調(diào)度和分派的基本單位。而把進(jìn)程作為資源擁有的單位。由于線程很“輕,故線程的切換非常迅速且開(kāi)銷(xiāo)小。(3) 可并發(fā)執(zhí)行。 (4) 共享進(jìn)程資源。5.3 OS對(duì)線程的實(shí)現(xiàn)方式內(nèi)核維護(hù)進(jìn)程和線程的上下文信息;線程切換由內(nèi)核完成;一個(gè)線程發(fā)起系統(tǒng)調(diào)用而阻塞,不會(huì)影響其他

31、線程的運(yùn)行。時(shí)間片分配給線程,所以多線程的進(jìn)程獲得更多CPU時(shí)間。依賴(lài)于OS核心,由內(nèi)核的內(nèi)部需求進(jìn)行創(chuàng)建和撤銷(xiāo),用來(lái)執(zhí)行一個(gè)指定的函數(shù)。Windows NT和OS/2支持內(nèi)核線程;1)內(nèi)核線程(kernel-level thread)2)用戶(hù)線程(user-level thread)用戶(hù)線程的維護(hù)由應(yīng)用進(jìn)程完成;內(nèi)核不了解用戶(hù)線程的存在;用戶(hù)線程切換不需要內(nèi)核特權(quán);用戶(hù)線程調(diào)度算法可針對(duì)應(yīng)用優(yōu)化;不依賴(lài)于OS核心,應(yīng)用進(jìn)程利用線程庫(kù)提供創(chuàng)建、同步、調(diào)度和管理線程的函數(shù)來(lái)控制用戶(hù)線程。如:數(shù)據(jù)庫(kù)系統(tǒng)informix,圖形處理Aldus PageMaker。調(diào)度由應(yīng)用軟件內(nèi)部進(jìn)行,通常采用非搶先

32、式和更簡(jiǎn)單的規(guī)則,也無(wú)需用戶(hù)態(tài)/核心態(tài)切換,所以速度特別快。一個(gè)線程發(fā)起系統(tǒng)調(diào)用而阻塞,則整個(gè)進(jìn)程在等待。時(shí)間片分配給進(jìn)程,多線程則每個(gè)線程就慢。 例:線程執(zhí)行時(shí)間 對(duì)于只設(shè)置了用戶(hù)級(jí)線程的系統(tǒng),調(diào)度是以進(jìn)程為單位的,在采用輪轉(zhuǎn)調(diào)度算法時(shí),各個(gè)進(jìn)程輪流執(zhí)行一個(gè)時(shí)間片,這對(duì)諸進(jìn)程而言,看似公平的,但假如在A進(jìn)程中包含了一個(gè)用戶(hù)級(jí)線程,而在另一個(gè)進(jìn)程B中含有100個(gè)線程,這樣,進(jìn)程A中線程的運(yùn)行時(shí)間,將是進(jìn)程B中線程運(yùn)行時(shí)間的100倍;相應(yīng)地,速度就快100倍。 假如系統(tǒng)中是設(shè)置的內(nèi)核支持線程,其調(diào)度是以線程為單位進(jìn)行的,這樣,進(jìn)程B可以獲得的CPU時(shí)間是進(jìn)程A的100倍,進(jìn)程B可使100個(gè)系統(tǒng)調(diào)用并發(fā)工作。5.3 Solaris操作系統(tǒng)中的線程同時(shí)實(shí)現(xiàn)了用戶(hù)級(jí)線程與內(nèi)核支持線程。 SUN Solaris OS在用戶(hù)級(jí)線程和內(nèi)核級(jí)線程之間,定義了一種輕型進(jìn)程LWP(內(nèi)核控制線程,也稱(chēng)為輕權(quán)進(jìn)程),一個(gè)進(jìn)程中至少有一個(gè)LWP。Solaris支持內(nèi)核線程(Kernel threads)、輕權(quán)進(jìn)程(Lightweight Processes)和用戶(hù)線程(User Level Threads)。一個(gè)進(jìn)程可有大量用戶(hù)線程;大量用戶(hù)線程復(fù)用少量的輕權(quán)進(jìn)程,不同的輕權(quán)進(jìn)程分別對(duì)應(yīng)不同的內(nèi)核線程。用戶(hù)級(jí)線程在使用系統(tǒng)調(diào)用時(shí)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論