中南大學(xué)操作系統(tǒng) 第二講 進(jìn)程管理_第1頁(yè)
中南大學(xué)操作系統(tǒng) 第二講 進(jìn)程管理_第2頁(yè)
中南大學(xué)操作系統(tǒng) 第二講 進(jìn)程管理_第3頁(yè)
中南大學(xué)操作系統(tǒng) 第二講 進(jìn)程管理_第4頁(yè)
中南大學(xué)操作系統(tǒng) 第二講 進(jìn)程管理_第5頁(yè)
已閱讀5頁(yè),還剩218頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第第2章章 進(jìn)程管理進(jìn)程管理 2.12.1 進(jìn)程的基本概念進(jìn)程的基本概念2.22.2 進(jìn)程控制進(jìn)程控制2.32.3 進(jìn)程同步進(jìn)程同步2.42.4 經(jīng)典進(jìn)程同步問(wèn)題經(jīng)典進(jìn)程同步問(wèn)題2.52.5 管程機(jī)制管程機(jī)制 實(shí)現(xiàn)互斥的軟件機(jī)制和硬件機(jī)制實(shí)現(xiàn)互斥的軟件機(jī)制和硬件機(jī)制( (補(bǔ)充補(bǔ)充) )2.62.6 進(jìn)程通信進(jìn)程通信2.72.7 線程線程第一次課內(nèi)上機(jī)實(shí)驗(yàn)第一次課內(nèi)上機(jī)實(shí)驗(yàn)22.12.1 進(jìn)程的基本概念進(jìn)程的基本概念n 程序的順序執(zhí)行及其特征程序的順序執(zhí)行及其特征n 程序的并發(fā)執(zhí)行及其特征程序的并發(fā)執(zhí)行及其特征n 進(jìn)程的特征與狀態(tài)進(jìn)程的特征與狀態(tài)n 進(jìn)程控制塊進(jìn)程控制塊32.1.1 程序的順序

2、執(zhí)行及其特征程序的順序執(zhí)行及其特征n程序的順序執(zhí)行程序的順序執(zhí)行僅當(dāng)前一操作僅當(dāng)前一操作( (程序段程序段) )執(zhí)行完后,才能執(zhí)行后繼操作。執(zhí)行完后,才能執(zhí)行后繼操作。例如,在進(jìn)行計(jì)算時(shí),總須先輸入用戶的程序和數(shù)例如,在進(jìn)行計(jì)算時(shí),總須先輸入用戶的程序和數(shù)據(jù),然后進(jìn)行計(jì)算,最后才能打印計(jì)算結(jié)果。據(jù),然后進(jìn)行計(jì)算,最后才能打印計(jì)算結(jié)果。 S1: a=x+yS1: a=x+y; ; S2: b=a-5;S2: b=a-5; S3: c=b+1;S3: c=b+1;(a) 程序的順序執(zhí)行(b) 三條語(yǔ)句的順序執(zhí)行I1C1P1I2C2P2S1S2S342.1.1 程序的順序執(zhí)行及其特征程序的順序執(zhí)行及

3、其特征順序執(zhí)行包含兩層含義:順序執(zhí)行包含兩層含義:l 對(duì)于多個(gè)用戶程序來(lái)說(shuō),所有程序是依次執(zhí)對(duì)于多個(gè)用戶程序來(lái)說(shuō),所有程序是依次執(zhí)行的。(外部順序性)行的。(外部順序性) l 對(duì)于一個(gè)程序來(lái)說(shuō),它的所有指令是按序執(zhí)對(duì)于一個(gè)程序來(lái)說(shuō),它的所有指令是按序執(zhí)行的。(內(nèi)部順序性)行的。(內(nèi)部順序性)5n程序順序執(zhí)行的特征程序順序執(zhí)行的特征 (1)順序性:)順序性: 處理機(jī)的操作嚴(yán)格按照程序所規(guī)定的順序執(zhí)行,處理機(jī)的操作嚴(yán)格按照程序所規(guī)定的順序執(zhí)行,即每一操作必須在下一操作開(kāi)始之前結(jié)束(或者即每一操作必須在下一操作開(kāi)始之前結(jié)束(或者說(shuō)下一操作必須在當(dāng)前操作結(jié)束后才能開(kāi)始)。說(shuō)下一操作必須在當(dāng)前操作結(jié)束后

4、才能開(kāi)始)。 (2)封閉性:)封閉性: 程序是在封閉的環(huán)境下執(zhí)行的。即程序是在封閉的環(huán)境下執(zhí)行的。即程序運(yùn)行時(shí)獨(dú)占全機(jī)資源,資源的狀態(tài)(除初始程序運(yùn)行時(shí)獨(dú)占全機(jī)資源,資源的狀態(tài)(除初始態(tài)外)只有本程序才能改變它。態(tài)外)只有本程序才能改變它。程序一旦開(kāi)始執(zhí)行,其執(zhí)行結(jié)果不受外界影響。程序一旦開(kāi)始執(zhí)行,其執(zhí)行結(jié)果不受外界影響。 (3)可再現(xiàn)性:)可再現(xiàn)性: 只要程序執(zhí)行時(shí)的環(huán)境和初始條件相同,當(dāng)程只要程序執(zhí)行時(shí)的環(huán)境和初始條件相同,當(dāng)程序重復(fù)執(zhí)行時(shí),都將獲得相同的結(jié)果。序重復(fù)執(zhí)行時(shí),都將獲得相同的結(jié)果。 6程序的并發(fā)執(zhí)行程序的并發(fā)執(zhí)行包括兩層含義:包括兩層含義: l 對(duì)于一個(gè)程序來(lái)說(shuō),它的所有指令

5、是對(duì)于一個(gè)程序來(lái)說(shuō),它的所有指令是按序執(zhí)行的。(內(nèi)部順序性)按序執(zhí)行的。(內(nèi)部順序性) l 對(duì)于多個(gè)程序(進(jìn)程)來(lái)說(shuō),所有進(jìn)對(duì)于多個(gè)程序(進(jìn)程)來(lái)說(shuō),所有進(jìn)程是交叉執(zhí)行的。(外部并發(fā)性)程是交叉執(zhí)行的。(外部并發(fā)性) 2.1.3 程序的并發(fā)執(zhí)行及其特征程序的并發(fā)執(zhí)行及其特征 7n前趨圖前趨圖 前趨圖前趨圖(Precedence Graph)是一個(gè)有向無(wú)循環(huán)圖,記為是一個(gè)有向無(wú)循環(huán)圖,記為DAG(Directed Acyclic Graph),用于描述進(jìn)程之間執(zhí)行的前,用于描述進(jìn)程之間執(zhí)行的前后關(guān)系。圖中的每個(gè)結(jié)點(diǎn)可用于描述一個(gè)程序段或進(jìn)程,乃后關(guān)系。圖中的每個(gè)結(jié)點(diǎn)可用于描述一個(gè)程序段或進(jìn)程,乃

6、至一條語(yǔ)句;結(jié)點(diǎn)間的有向邊則用于表示兩個(gè)結(jié)點(diǎn)之間存在至一條語(yǔ)句;結(jié)點(diǎn)間的有向邊則用于表示兩個(gè)結(jié)點(diǎn)之間存在的偏序的偏序(Partial Order)或前趨關(guān)系或前趨關(guān)系(Precedence Relation)“”。 =(Pi, Pj)|Pi must complete before Pj may start, 如果如果(Pi, Pj),可寫成可寫成PiPj,稱,稱Pi是是Pj的直接前趨,而稱的直接前趨,而稱Pj是是Pi的直的直接后繼。在前趨圖中,把沒(méi)有前趨的結(jié)點(diǎn)稱為初始結(jié)點(diǎn)接后繼。在前趨圖中,把沒(méi)有前趨的結(jié)點(diǎn)稱為初始結(jié)點(diǎn)(Initial Node),把沒(méi),把沒(méi)有后繼的結(jié)點(diǎn)稱為終止結(jié)點(diǎn)有后繼的結(jié)

7、點(diǎn)稱為終止結(jié)點(diǎn)(Final Node)。8n前趨圖前趨圖 每個(gè)結(jié)點(diǎn)還具有一個(gè)重量每個(gè)結(jié)點(diǎn)還具有一個(gè)重量(Weight),用于表示該結(jié)點(diǎn)用于表示該結(jié)點(diǎn)所含有的程序量或結(jié)點(diǎn)的執(zhí)行時(shí)間。所含有的程序量或結(jié)點(diǎn)的執(zhí)行時(shí)間。 IiCiPi和和S1S2S3 P1P3P8P9P4P2P5P6P7S1S2S3(a) 具有九個(gè)結(jié)點(diǎn)的前趨圖(b) 具有循環(huán)的前趨圖9n前趨圖前趨圖對(duì)于圖對(duì)于圖 2-2(a)所示的前趨圖,所示的前趨圖, 存在下述前趨關(guān)系:存在下述前趨關(guān)系: P1P2, P1P3, P1P4, P2P5, P3P5, P4P6, P4P7, P5P8, P6P8, P7P9, P8P9或表示為:或表示為

8、: P=P1, P2, P3, P4, P5, P6, P7, P8, P9= (P1, P2), (P1, P3), (P1, P4), (P2, P5), (P3, P5), (P4, P6), (P4, P7), (P5, P8), (P6, P8), (P7, P9), (P8, P9) 應(yīng)當(dāng)注意,前趨圖中必須不存在循環(huán),但在圖應(yīng)當(dāng)注意,前趨圖中必須不存在循環(huán),但在圖2-2(b)中卻有著中卻有著下述的前趨關(guān)系:下述的前趨關(guān)系:S2S3, S3S2 10n前趨圖前趨圖 前趨圖前趨圖(Precedence Graph)是一個(gè)有向無(wú)循環(huán)圖,記為是一個(gè)有向無(wú)循環(huán)圖,記為DAG(Directed

9、 Acyclic Graph),用于描述進(jìn)程之間執(zhí)行的前,用于描述進(jìn)程之間執(zhí)行的前后關(guān)系。圖中的每個(gè)結(jié)點(diǎn)可用于描述一個(gè)程序段或進(jìn)程,乃后關(guān)系。圖中的每個(gè)結(jié)點(diǎn)可用于描述一個(gè)程序段或進(jìn)程,乃至一條語(yǔ)句;結(jié)點(diǎn)間的有向邊則用于表示兩個(gè)結(jié)點(diǎn)之間存在至一條語(yǔ)句;結(jié)點(diǎn)間的有向邊則用于表示兩個(gè)結(jié)點(diǎn)之間存在的偏序的偏序(Partial Order)或前趨關(guān)系或前趨關(guān)系(Precedence Relation)“”。 =(Pi, Pj)|Pi must complete before Pj may start, 如果如果(Pi, Pj),可寫成可寫成PiPj,稱,稱Pi是是Pj的直接前趨,而稱的直接前趨,而稱Pj

10、是是Pi的直的直接后繼。在前趨圖中,把沒(méi)有前趨的結(jié)點(diǎn)稱為初始結(jié)點(diǎn)接后繼。在前趨圖中,把沒(méi)有前趨的結(jié)點(diǎn)稱為初始結(jié)點(diǎn)(Initial Node),把沒(méi),把沒(méi)有后繼的結(jié)點(diǎn)稱為終止結(jié)點(diǎn)有后繼的結(jié)點(diǎn)稱為終止結(jié)點(diǎn)(Final Node)。112.1.3 程序的并發(fā)執(zhí)行及其特征程序的并發(fā)執(zhí)行及其特征 P1P2P3P4I1I2I3I4C1C2C3C4圖圖 2-3 并發(fā)執(zhí)行時(shí)的前趨圖并發(fā)執(zhí)行時(shí)的前趨圖 122.1.3 程序的并發(fā)執(zhí)行及其特征程序的并發(fā)執(zhí)行及其特征 在該例中存在下述前趨關(guān)系:在該例中存在下述前趨關(guān)系: IiCi,IiIi+1, CiPi, CiCi+1,PiPi+1而而Ii+1和和Ci及及Pi-1

11、是重迭的,亦即在是重迭的,亦即在Pi-1和和Ci以及以及Ii+1之間,可之間,可以并發(fā)執(zhí)行。以并發(fā)執(zhí)行。 對(duì)于具有下述四條語(yǔ)句的程序段:對(duì)于具有下述四條語(yǔ)句的程序段: S1: a =x+2 S2: b =y+4 S3: c =a+b S4: d =c+b 131)間斷性)間斷性: : 程序在并發(fā)執(zhí)行時(shí),由于它們共享系統(tǒng)資程序在并發(fā)執(zhí)行時(shí),由于它們共享系統(tǒng)資源,以及為完成同一任務(wù)而相互合作,致源,以及為完成同一任務(wù)而相互合作,致使這些并發(fā)執(zhí)行的程序之間形成了相互制使這些并發(fā)執(zhí)行的程序之間形成了相互制約的關(guān)系。(互斥關(guān)系、同步關(guān)系)約的關(guān)系。(互斥關(guān)系、同步關(guān)系) 相互制約導(dǎo)致并發(fā)執(zhí)行的程序具有相

12、互制約導(dǎo)致并發(fā)執(zhí)行的程序具有“執(zhí)行執(zhí)行暫停暫停執(zhí)行執(zhí)行”這種間斷性活動(dòng)規(guī)律。這種間斷性活動(dòng)規(guī)律。 2)失去封閉性:)失去封閉性: 程序在并發(fā)執(zhí)行時(shí),由于多個(gè)程序在并發(fā)執(zhí)行時(shí),由于多個(gè)程序共享系統(tǒng)資源,因而這些程序共享系統(tǒng)資源,因而這些資源的狀態(tài)將由多個(gè)程序來(lái)改資源的狀態(tài)將由多個(gè)程序來(lái)改變,致使程序的運(yùn)行已失去了變,致使程序的運(yùn)行已失去了封閉性。封閉性。 某程序的執(zhí)行時(shí),某程序的執(zhí)行時(shí),會(huì)受到其他程序的會(huì)受到其他程序的影響。影響。 143)不可再現(xiàn)性)不可再現(xiàn)性與時(shí)間有關(guān)的錯(cuò)誤與時(shí)間有關(guān)的錯(cuò)誤 程序在并發(fā)執(zhí)行時(shí),由于失去了封閉性,也將導(dǎo)致程序在并發(fā)執(zhí)行時(shí),由于失去了封閉性,也將導(dǎo)致其失去可再現(xiàn)性

13、。其失去可再現(xiàn)性。例如例如:有兩個(gè)循環(huán)程序:有兩個(gè)循環(huán)程序A A和和B B,它們共享一個(gè)變量,它們共享一個(gè)變量N NL1:N = N+1; goto L1; L2:print (N); N = 0; goto L2; 程程序序A程程序序B程序程序A和和B并發(fā)執(zhí)行時(shí),可能出現(xiàn)下述三種情況并發(fā)執(zhí)行時(shí),可能出現(xiàn)下述三種情況(設(shè)設(shè)N的值為的值為10):(1) N=N+1在在print(N)和和N=0之前,此時(shí)得到的之前,此時(shí)得到的N值分別為值分別為11,11,0。(2) N=N+1在在print(N)和和N=0之后,此時(shí)得到的之后,此時(shí)得到的N值分別為值分別為10,0,1。(3) N=N+1在在pri

14、nt(N)和和N=0之間,此時(shí)得到的之間,此時(shí)得到的N值分別為值分別為10,11,0。 上述三種情況中,上述三種情況中,(1)(1)、(2)(2)結(jié)果正確,結(jié)果正確,(3)(3)結(jié)果出錯(cuò)??梢?jiàn)計(jì)算結(jié)果已與并結(jié)果出錯(cuò)。可見(jiàn)計(jì)算結(jié)果已與并發(fā)程序的執(zhí)行速度發(fā)程序的執(zhí)行速度( (推進(jìn)速度推進(jìn)速度) )有關(guān),從而使程序執(zhí)行失去了可再現(xiàn)性。有關(guān),從而使程序執(zhí)行失去了可再現(xiàn)性。 152.1.4 進(jìn)程的特征與狀態(tài)進(jìn)程的特征與狀態(tài)1進(jìn)程的定義和特征進(jìn)程的定義和特征 進(jìn)程是程序在一個(gè)數(shù)據(jù)集上的運(yùn)行過(guò)程,是系進(jìn)程是程序在一個(gè)數(shù)據(jù)集上的運(yùn)行過(guò)程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單

15、位。 (傳傳統(tǒng)統(tǒng)OS的定義的定義)定定義義(1) (1) 進(jìn)程是程序的一次執(zhí)行。進(jìn)程是程序的一次執(zhí)行。(2) (2) 進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理機(jī)上順序進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時(shí)所發(fā)生的活動(dòng)。執(zhí)行時(shí)所發(fā)生的活動(dòng)。(3)(3)進(jìn)程進(jìn)程是進(jìn)程實(shí)體的運(yùn)行過(guò)程,是系統(tǒng)進(jìn)行資是進(jìn)程實(shí)體的運(yùn)行過(guò)程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位源分配和調(diào)度的一個(gè)獨(dú)立單位”。 其其他他16為了描述和控制進(jìn)程的運(yùn)行,系統(tǒng)為每個(gè)進(jìn)程定義了為了描述和控制進(jìn)程的運(yùn)行,系統(tǒng)為每個(gè)進(jìn)程定義了一個(gè)數(shù)據(jù)結(jié)構(gòu)一個(gè)數(shù)據(jù)結(jié)構(gòu)進(jìn)程控制塊。進(jìn)程控制塊。進(jìn)程控制塊是進(jìn)程實(shí)體的一部分,是操作系統(tǒng)中最重進(jìn)程控制塊是進(jìn)程實(shí)體的一部

16、分,是操作系統(tǒng)中最重要的記錄型數(shù)據(jù)結(jié)構(gòu)。要的記錄型數(shù)據(jù)結(jié)構(gòu)。 1. PCB作用:作用: 使一個(gè)在多道程序環(huán)境下不能獨(dú)立運(yùn)行的程序使一個(gè)在多道程序環(huán)境下不能獨(dú)立運(yùn)行的程序( (含數(shù)據(jù)含數(shù)據(jù)) ),成為一個(gè)能獨(dú)立運(yùn)行的基本單位,一個(gè)能與其它進(jìn)程并發(fā)成為一個(gè)能獨(dú)立運(yùn)行的基本單位,一個(gè)能與其它進(jìn)程并發(fā)執(zhí)行的進(jìn)程。或者說(shuō),執(zhí)行的進(jìn)程?;蛘哒f(shuō),OS是根據(jù)是根據(jù)PCB來(lái)對(duì)并發(fā)進(jìn)程進(jìn)行控來(lái)對(duì)并發(fā)進(jìn)程進(jìn)行控制和管理的。制和管理的。 例如:進(jìn)程調(diào)度;現(xiàn)場(chǎng)保護(hù)和恢復(fù);進(jìn)程同步和例如:進(jìn)程調(diào)度;現(xiàn)場(chǎng)保護(hù)和恢復(fù);進(jìn)程同步和通信。通信。PCB是進(jìn)程存在的唯一標(biāo)志是進(jìn)程存在的唯一標(biāo)志2.1.5 進(jìn)程控制塊(進(jìn)程控制塊(PC

17、B) 172進(jìn)程控制塊中的信息進(jìn)程控制塊中的信息 PCB中記錄了操作系統(tǒng)所需的、用于描述進(jìn)程當(dāng)前中記錄了操作系統(tǒng)所需的、用于描述進(jìn)程當(dāng)前情況以及控制進(jìn)程運(yùn)行的全部信息。具體包括下述情況以及控制進(jìn)程運(yùn)行的全部信息。具體包括下述四方面的信息:四方面的信息: 1)進(jìn)程標(biāo)識(shí)符:)進(jìn)程標(biāo)識(shí)符: 內(nèi)部標(biāo)識(shí)符內(nèi)部標(biāo)識(shí)符( (進(jìn)程號(hào)進(jìn)程號(hào)) );外部標(biāo)識(shí)符外部標(biāo)識(shí)符( (名名) );父進(jìn)程標(biāo)識(shí)及子進(jìn)程標(biāo)識(shí);用戶標(biāo)識(shí)父進(jìn)程標(biāo)識(shí)及子進(jìn)程標(biāo)識(shí);用戶標(biāo)識(shí) 2)處理機(jī)狀態(tài):)處理機(jī)狀態(tài): 處理機(jī)狀態(tài)信息主要由處理機(jī)的各種寄存處理機(jī)狀態(tài)信息主要由處理機(jī)的各種寄存器中的內(nèi)容組成的。寄存器包括:通用寄器中的內(nèi)容組成的。寄存器

18、包括:通用寄存器、指令計(jì)數(shù)器、程序狀態(tài)字(存器、指令計(jì)數(shù)器、程序狀態(tài)字(PSWPSW)寄存器、用戶棧指針。寄存器、用戶棧指針。( (保護(hù)、恢復(fù)現(xiàn)場(chǎng)保護(hù)、恢復(fù)現(xiàn)場(chǎng)) )當(dāng)處理機(jī)被中斷時(shí),這些信息都必須保存到當(dāng)處理機(jī)被中斷時(shí),這些信息都必須保存到PCB中,以便中,以便該進(jìn)程重新執(zhí)行時(shí),能從斷點(diǎn)繼續(xù)執(zhí)行。該進(jìn)程重新執(zhí)行時(shí),能從斷點(diǎn)繼續(xù)執(zhí)行。 183)進(jìn)程調(diào)度信息)進(jìn)程調(diào)度信息:在在PCB中還存放一些與中還存放一些與進(jìn)程調(diào)度進(jìn)程調(diào)度和進(jìn)程對(duì)換有關(guān)的信息。包括:和進(jìn)程對(duì)換有關(guān)的信息。包括: 進(jìn)程狀態(tài)進(jìn)程狀態(tài)作為調(diào)度和對(duì)換時(shí)的依據(jù)。作為調(diào)度和對(duì)換時(shí)的依據(jù)。 進(jìn)程優(yōu)先級(jí)進(jìn)程優(yōu)先級(jí)由于描述進(jìn)程使用處理機(jī)的優(yōu)先

19、由于描述進(jìn)程使用處理機(jī)的優(yōu)先級(jí)別的一個(gè)整數(shù),優(yōu)先級(jí)高的進(jìn)程優(yōu)先獲得處理級(jí)別的一個(gè)整數(shù),優(yōu)先級(jí)高的進(jìn)程優(yōu)先獲得處理機(jī)。機(jī)。 進(jìn)程調(diào)度所需的其它信息進(jìn)程調(diào)度所需的其它信息它們與所采用的進(jìn)它們與所采用的進(jìn)程調(diào)度算法有關(guān)。程調(diào)度算法有關(guān)。 事件事件即阻塞原因。即阻塞原因。 194)進(jìn)程控制信息:)進(jìn)程控制信息: l 程序和數(shù)據(jù)的地址程序和數(shù)據(jù)的地址指程序和數(shù)據(jù)所在的內(nèi)存指程序和數(shù)據(jù)所在的內(nèi)存或外存首地址;或外存首地址; l 進(jìn)程同步和通信機(jī)制進(jìn)程同步和通信機(jī)制如信號(hào)量、消息隊(duì)列指如信號(hào)量、消息隊(duì)列指針等,它們可能全部或部分地存放在針等,它們可能全部或部分地存放在PCB中;中; l 資源清單資源清單是一

20、張列出了除是一張列出了除CPU外的、進(jìn)程外的、進(jìn)程所需的全部資源及已經(jīng)分配到該進(jìn)程的資源的清所需的全部資源及已經(jīng)分配到該進(jìn)程的資源的清單;單; l 鏈接指針鏈接指針?biāo)o出本進(jìn)程(它給出本進(jìn)程(PCB)所在隊(duì)列中)所在隊(duì)列中下一個(gè)進(jìn)程的下一個(gè)進(jìn)程的PCB的首址。的首址。 203進(jìn)程控制塊的組織方式進(jìn)程控制塊的組織方式 常用的組織方式有兩種:常用的組織方式有兩種:鏈接方式鏈接方式和和索引方式索引方式。 1)鏈接方式)鏈接方式 把具有同一狀態(tài)的把具有同一狀態(tài)的PCB,用其中的鏈,用其中的鏈接字鏈接成一個(gè)隊(duì)接字鏈接成一個(gè)隊(duì)列。形成:列。形成:就緒隊(duì)就緒隊(duì)列列、阻塞隊(duì)列阻塞隊(duì)列、空空白隊(duì)列白隊(duì)列等等 2

21、12)索引方式)索引方式: : 系統(tǒng)根據(jù)所有進(jìn)程系統(tǒng)根據(jù)所有進(jìn)程的狀態(tài)建立幾張索的狀態(tài)建立幾張索引表。如,引表。如, 就緒索引表就緒索引表 阻塞索引表等阻塞索引表等 索引表的首址記錄在索引表的首址記錄在專用單元中;專用單元中;每個(gè)索引表的表目中,每個(gè)索引表的表目中,記錄具有相應(yīng)狀態(tài)的某記錄具有相應(yīng)狀態(tài)的某個(gè)個(gè)PCBPCB的首址。的首址。 222.1.4 進(jìn)程的特征與狀態(tài)進(jìn)程的特征與狀態(tài)1進(jìn)程的特征進(jìn)程的特征1)結(jié)構(gòu)特征:)結(jié)構(gòu)特征: 程序段、相關(guān)的數(shù)據(jù)段、程序段、相關(guān)的數(shù)據(jù)段、PCB三三部分構(gòu)成了部分構(gòu)成了進(jìn)程實(shí)體進(jìn)程實(shí)體。 2)動(dòng)態(tài)性:)動(dòng)態(tài)性:進(jìn)程的實(shí)質(zhì)是進(jìn)程實(shí)體的一次執(zhí)行過(guò)進(jìn)程的實(shí)質(zhì)是進(jìn)

22、程實(shí)體的一次執(zhí)行過(guò)程,故程,故動(dòng)態(tài)性是進(jìn)程的最基本特征動(dòng)態(tài)性是進(jìn)程的最基本特征。 234)獨(dú)立性)獨(dú)立性 :在傳統(tǒng)的在傳統(tǒng)的OS中,獨(dú)立性是指進(jìn)程實(shí)中,獨(dú)立性是指進(jìn)程實(shí)體是一個(gè)能獨(dú)立運(yùn)行、獨(dú)立分配資體是一個(gè)能獨(dú)立運(yùn)行、獨(dú)立分配資源和獨(dú)立接受調(diào)度的基本單位。源和獨(dú)立接受調(diào)度的基本單位。 5)異步性)異步性 : 是指進(jìn)程按各自獨(dú)立的、不可預(yù)知的是指進(jìn)程按各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn),或說(shuō)進(jìn)程實(shí)體按異步速度向前推進(jìn),或說(shuō)進(jìn)程實(shí)體按異步方式運(yùn)行。方式運(yùn)行。 3)并發(fā)性:)并發(fā)性: 這是指多個(gè)進(jìn)程實(shí)體同存于內(nèi)存這是指多個(gè)進(jìn)程實(shí)體同存于內(nèi)存中,且能在一段時(shí)間內(nèi)同時(shí)運(yùn)行。中,且能在一段時(shí)間內(nèi)同時(shí)運(yùn)行。

23、 24進(jìn)程的三種基本狀態(tài):進(jìn)程的三種基本狀態(tài): 1)就緒()就緒(Ready)狀態(tài):)狀態(tài): 當(dāng)進(jìn)程已分配到除當(dāng)進(jìn)程已分配到除CPU以外的所有資源后,只要再獲以外的所有資源后,只要再獲得得CPU,便可立即執(zhí)行,進(jìn)程這時(shí)的狀態(tài)稱為就緒狀,便可立即執(zhí)行,進(jìn)程這時(shí)的狀態(tài)稱為就緒狀態(tài)。態(tài)。 2)執(zhí)行()執(zhí)行(Running)狀態(tài))狀態(tài): : 進(jìn)程已獲得進(jìn)程已獲得CPU,其程序正在執(zhí)行,其程序正在執(zhí)行。 3)阻塞()阻塞(Blocked)狀態(tài))狀態(tài): : 正在執(zhí)行的進(jìn)程由于發(fā)生某事件而暫時(shí)無(wú)法繼續(xù)執(zhí)行正在執(zhí)行的進(jìn)程由于發(fā)生某事件而暫時(shí)無(wú)法繼續(xù)執(zhí)行時(shí),便放棄處理機(jī)而處于暫停狀態(tài),亦即進(jìn)程的執(zhí)行時(shí),便放棄處

24、理機(jī)而處于暫停狀態(tài),亦即進(jìn)程的執(zhí)行受到阻塞,把這種暫停狀態(tài)稱為阻塞狀態(tài)(或等待狀受到阻塞,把這種暫停狀態(tài)稱為阻塞狀態(tài)(或等待狀態(tài))態(tài))。 25進(jìn)程的三種基本狀態(tài)的轉(zhuǎn)換:進(jìn)程的三種基本狀態(tài)的轉(zhuǎn)換:進(jìn)程調(diào)度進(jìn)程調(diào)度:就緒態(tài):就緒態(tài)執(zhí)行態(tài)執(zhí)行態(tài)時(shí)間片完時(shí)間片完:執(zhí)行態(tài):執(zhí)行態(tài)就緒態(tài)就緒態(tài) 請(qǐng)求請(qǐng)求I/O:執(zhí)行態(tài):執(zhí)行態(tài)阻塞態(tài)阻塞態(tài) I/O完成完成:阻塞態(tài):阻塞態(tài)就緒態(tài)就緒態(tài) 引起進(jìn)程狀態(tài)轉(zhuǎn)換的典型事件:引起進(jìn)程狀態(tài)轉(zhuǎn)換的典型事件:26掛起狀態(tài)掛起狀態(tài):有些系統(tǒng)除了進(jìn)程的三種基有些系統(tǒng)除了進(jìn)程的三種基本狀態(tài)外,還有掛起狀態(tài)本狀態(tài)外,還有掛起狀態(tài)。1)引入掛起狀態(tài)的原因引入掛起狀態(tài)的原因: (1)終端用

25、戶的請(qǐng)求:)終端用戶的請(qǐng)求: (2)父進(jìn)程請(qǐng)求:)父進(jìn)程請(qǐng)求:(3)負(fù)荷調(diào)節(jié)的需要)負(fù)荷調(diào)節(jié)的需要 : (4)操作系統(tǒng)的需要)操作系統(tǒng)的需要 : 當(dāng)當(dāng)終端用戶在自己的程序運(yùn)行期間發(fā)終端用戶在自己的程序運(yùn)行期間發(fā)現(xiàn)有可疑問(wèn)題時(shí),希望暫停執(zhí)行?,F(xiàn)有可疑問(wèn)題時(shí),希望暫停執(zhí)行。希望考察和修改子進(jìn)程,或協(xié)調(diào)各希望考察和修改子進(jìn)程,或協(xié)調(diào)各子進(jìn)程間的活動(dòng)時(shí)子進(jìn)程間的活動(dòng)時(shí)實(shí)時(shí)系統(tǒng)中工作負(fù)荷較重時(shí),系統(tǒng)實(shí)時(shí)系統(tǒng)中工作負(fù)荷較重時(shí),系統(tǒng)可把一些不重要的進(jìn)程掛起??砂岩恍┎恢匾倪M(jìn)程掛起。操作系統(tǒng)有時(shí)希望掛起某些進(jìn)程,操作系統(tǒng)有時(shí)希望掛起某些進(jìn)程,以便檢查運(yùn)行中的資源使用情況或以便檢查運(yùn)行中的資源使用情況或進(jìn)行記

26、賬。進(jìn)行記賬。272 2)具有)具有掛起狀態(tài)系統(tǒng)的掛起狀態(tài)系統(tǒng)的進(jìn)程狀態(tài)的轉(zhuǎn)換進(jìn)程狀態(tài)的轉(zhuǎn)換 活動(dòng)就緒活動(dòng)就緒靜止就緒靜止就緒 活動(dòng)阻塞活動(dòng)阻塞靜止阻塞靜止阻塞 靜止就緒靜止就緒活動(dòng)就緒活動(dòng)就緒 靜止阻塞靜止阻塞活動(dòng)阻塞活動(dòng)阻塞掛起原語(yǔ)掛起原語(yǔ)Suspend激活原語(yǔ)激活原語(yǔ)Active28創(chuàng)建狀態(tài)創(chuàng)建狀態(tài)創(chuàng)建一個(gè)進(jìn)程一般包括兩個(gè)步驟:創(chuàng)建一個(gè)進(jìn)程一般包括兩個(gè)步驟: 1)1)為一個(gè)新進(jìn)程創(chuàng)建為一個(gè)新進(jìn)程創(chuàng)建PCB,PCB,并填寫必要的管理信息。并填寫必要的管理信息。2 2)把該進(jìn)程轉(zhuǎn)入就緒狀態(tài)并插入到就緒隊(duì)列中。)把該進(jìn)程轉(zhuǎn)入就緒狀態(tài)并插入到就緒隊(duì)列中。 當(dāng)一個(gè)新進(jìn)程被創(chuàng)建時(shí),系統(tǒng)已經(jīng)為其分配了

27、當(dāng)一個(gè)新進(jìn)程被創(chuàng)建時(shí),系統(tǒng)已經(jīng)為其分配了PCB,PCB,填寫了進(jìn)程標(biāo)識(shí)等信息,但是由于該進(jìn)程所必須的資填寫了進(jìn)程標(biāo)識(shí)等信息,但是由于該進(jìn)程所必須的資源或其他信息如主存資源等尚未分配,此時(shí)的源或其他信息如主存資源等尚未分配,此時(shí)的進(jìn)程已進(jìn)程已經(jīng)擁有了自己的經(jīng)擁有了自己的PCB,PCB,但進(jìn)程自身還未進(jìn)入主存,即進(jìn)但進(jìn)程自身還未進(jìn)入主存,即進(jìn)程創(chuàng)建工作尚未完成,進(jìn)程不能被調(diào)度執(zhí)行,其所處程創(chuàng)建工作尚未完成,進(jìn)程不能被調(diào)度執(zhí)行,其所處的狀態(tài)就是創(chuàng)建狀態(tài)的狀態(tài)就是創(chuàng)建狀態(tài)。29終止?fàn)顟B(tài)終止?fàn)顟B(tài)終止一個(gè)進(jìn)程一般包括兩個(gè)步驟:終止一個(gè)進(jìn)程一般包括兩個(gè)步驟: 當(dāng)一個(gè)進(jìn)程到達(dá)了自然結(jié)束點(diǎn),或是出現(xiàn)了無(wú)法克當(dāng)一

28、個(gè)進(jìn)程到達(dá)了自然結(jié)束點(diǎn),或是出現(xiàn)了無(wú)法克服的錯(cuò)誤,或是被操作系統(tǒng)所終結(jié),或是被其他有終止服的錯(cuò)誤,或是被操作系統(tǒng)所終結(jié),或是被其他有終止權(quán)的進(jìn)程所終結(jié),它將進(jìn)入終止?fàn)顟B(tài)。權(quán)的進(jìn)程所終結(jié),它將進(jìn)入終止?fàn)顟B(tài)。 進(jìn)入終止?fàn)顟B(tài)的進(jìn)程以后不能執(zhí)行,但在操作系統(tǒng)中進(jìn)入終止?fàn)顟B(tài)的進(jìn)程以后不能執(zhí)行,但在操作系統(tǒng)中依然保留一個(gè)記錄,其中保存狀態(tài)碼和一些計(jì)時(shí)統(tǒng)計(jì)數(shù)依然保留一個(gè)記錄,其中保存狀態(tài)碼和一些計(jì)時(shí)統(tǒng)計(jì)數(shù)據(jù),供其他進(jìn)程收集。一旦其他進(jìn)程完成了對(duì)終止?fàn)顟B(tài)據(jù),供其他進(jìn)程收集。一旦其他進(jìn)程完成了對(duì)終止?fàn)顟B(tài)進(jìn)程的信息提取之后,操作系統(tǒng)將刪除該進(jìn)程。進(jìn)程的信息提取之后,操作系統(tǒng)將刪除該進(jìn)程。1) 1) 回收資源回收資

29、源2 2)刪除)刪除PCBPCB 30終止?fàn)顟B(tài)終止?fàn)顟B(tài)圖2-2 具有創(chuàng)建、終止和掛起狀態(tài)的進(jìn)程狀態(tài)圖 312.22.2 進(jìn)程控制進(jìn)程控制v進(jìn)程控制是進(jìn)程管理中最基本的功能。進(jìn)程控制是進(jìn)程管理中最基本的功能。 v進(jìn)程控制包括:進(jìn)程控制包括: 創(chuàng)建進(jìn)程創(chuàng)建進(jìn)程 終止進(jìn)程終止進(jìn)程 進(jìn)程狀態(tài)轉(zhuǎn)換進(jìn)程狀態(tài)轉(zhuǎn)換 v進(jìn)程控制是由進(jìn)程控制是由OS的內(nèi)核完成的。的內(nèi)核完成的。 322.2.1 進(jìn)程的創(chuàng)建進(jìn)程的創(chuàng)建1引起創(chuàng)建進(jìn)程的事件引起創(chuàng)建進(jìn)程的事件 用戶登錄用戶登錄 作業(yè)調(diào)度作業(yè)調(diào)度 提供服務(wù)提供服務(wù)當(dāng)用戶進(jìn)程提出某種請(qǐng)求當(dāng)用戶進(jìn)程提出某種請(qǐng)求后,系統(tǒng)將專門創(chuàng)建一個(gè)后,系統(tǒng)將專門創(chuàng)建一個(gè)進(jìn)程來(lái)提供用戶所需的服

30、進(jìn)程來(lái)提供用戶所需的服務(wù)。如,文件打印。務(wù)。如,文件打印。 上述三種情況,都是由系統(tǒng)內(nèi)核上述三種情況,都是由系統(tǒng)內(nèi)核為它創(chuàng)建一個(gè)新進(jìn)程。為它創(chuàng)建一個(gè)新進(jìn)程。 應(yīng)用請(qǐng)求:應(yīng)用請(qǐng)求: 是基于應(yīng)用進(jìn)程的需求,由應(yīng)用進(jìn)是基于應(yīng)用進(jìn)程的需求,由應(yīng)用進(jìn)程自己創(chuàng)建一個(gè)新進(jìn)程,以便新進(jìn)程自己創(chuàng)建一個(gè)新進(jìn)程,以便新進(jìn)程以并發(fā)運(yùn)行方式完成特定任務(wù)。程以并發(fā)運(yùn)行方式完成特定任務(wù)。 332.2.1 進(jìn)程的創(chuàng)建進(jìn)程的創(chuàng)建DEFGHBCIJKLMA圖 2-4 進(jìn)程樹(shù) 342進(jìn)程的創(chuàng)建進(jìn)程的創(chuàng)建 調(diào)用進(jìn)程創(chuàng)建原語(yǔ)調(diào)用進(jìn)程創(chuàng)建原語(yǔ)Create(),按下述步驟創(chuàng)建一個(gè)進(jìn)程:(),按下述步驟創(chuàng)建一個(gè)進(jìn)程: (1)申請(qǐng)空白)申請(qǐng)空

31、白PCB;(2)為新進(jìn)程分配資源。主要是內(nèi)存空間。)為新進(jìn)程分配資源。主要是內(nèi)存空間。 (3)初始化)初始化PCB。包括:。包括: 初始化標(biāo)識(shí)信息初始化標(biāo)識(shí)信息 初始化處理機(jī)狀態(tài)信息:初始化處理機(jī)狀態(tài)信息: 程序計(jì)數(shù)器,堆棧指針等程序計(jì)數(shù)器,堆棧指針等進(jìn)程狀態(tài)進(jìn)程狀態(tài)就緒或靜止就緒或靜止就緒、優(yōu)先級(jí)等。就緒、優(yōu)先級(jí)等。初始化處理機(jī)控制信息:初始化處理機(jī)控制信息:(4)將新進(jìn)程插入就緒隊(duì)列)將新進(jìn)程插入就緒隊(duì)列。 351引起進(jìn)程終止的事件引起進(jìn)程終止的事件 正常結(jié)束正常結(jié)束外界干預(yù)外界干預(yù) l越界錯(cuò)誤越界錯(cuò)誤 l保護(hù)錯(cuò)保護(hù)錯(cuò)試圖訪問(wèn)不允許訪問(wèn)的資試圖訪問(wèn)不允許訪問(wèn)的資源或文件,或者以不適當(dāng)方式訪

32、問(wèn)源或文件,或者以不適當(dāng)方式訪問(wèn) l非法指令非法指令 l特權(quán)指令錯(cuò)特權(quán)指令錯(cuò)用戶程序試圖執(zhí)行只用戶程序試圖執(zhí)行只允許允許OS執(zhí)行的指令執(zhí)行的指令l運(yùn)行超時(shí)運(yùn)行超時(shí) l等待超時(shí)等待超時(shí)l算術(shù)運(yùn)算錯(cuò)算術(shù)運(yùn)算錯(cuò)被被0除除 lI/O故障故障 操作員或操作系統(tǒng)干操作員或操作系統(tǒng)干 預(yù)(如發(fā)生死鎖)預(yù)(如發(fā)生死鎖) 父進(jìn)程請(qǐng)求父進(jìn)程請(qǐng)求 父進(jìn)程終止父進(jìn)程終止 2.2.2 進(jìn)程的終止進(jìn)程的終止異常結(jié)束異常結(jié)束 常見(jiàn)的異常常見(jiàn)的異常 結(jié)束事件結(jié)束事件362進(jìn)程的終止過(guò)程進(jìn)程的終止過(guò)程 OSOS調(diào)用終止原語(yǔ),按下述過(guò)程終止進(jìn)程:調(diào)用終止原語(yǔ),按下述過(guò)程終止進(jìn)程:(1)根據(jù)被終止進(jìn)程的標(biāo)識(shí),從根據(jù)被終止進(jìn)程的標(biāo)識(shí)

33、,從PCB集合中找除該進(jìn)程的集合中找除該進(jìn)程的PCB,讀出該進(jìn)程狀態(tài)。,讀出該進(jìn)程狀態(tài)。(2)若被終止進(jìn)程正處于執(zhí)行狀態(tài),應(yīng)立即終止其執(zhí)行,并若被終止進(jìn)程正處于執(zhí)行狀態(tài),應(yīng)立即終止其執(zhí)行,并置調(diào)度標(biāo)志為真,用于指示該進(jìn)程被終止后應(yīng)重新進(jìn)行置調(diào)度標(biāo)志為真,用于指示該進(jìn)程被終止后應(yīng)重新進(jìn)行調(diào)度。若該進(jìn)程還有子孫進(jìn)程,應(yīng)將其所有子孫進(jìn)程終調(diào)度。若該進(jìn)程還有子孫進(jìn)程,應(yīng)將其所有子孫進(jìn)程終止,以防止它們成為不可控進(jìn)程。止,以防止它們成為不可控進(jìn)程。(3)將被終止進(jìn)程的所有資源,或者歸還給其父進(jìn)程,或者將被終止進(jìn)程的所有資源,或者歸還給其父進(jìn)程,或者歸還給系統(tǒng)。歸還給系統(tǒng)。(4)將被終止進(jìn)程(它的將被終止

34、進(jìn)程(它的PCB)從所在隊(duì)列中移出,等待其)從所在隊(duì)列中移出,等待其他進(jìn)程來(lái)搜索信息。他進(jìn)程來(lái)搜索信息。 372.2.2 進(jìn)程的阻塞和喚醒進(jìn)程的阻塞和喚醒1引起進(jìn)程阻塞和喚醒的事件引起進(jìn)程阻塞和喚醒的事件 請(qǐng)求系統(tǒng)服務(wù)請(qǐng)求系統(tǒng)服務(wù)無(wú)新工作可做無(wú)新工作可做 當(dāng)執(zhí)行進(jìn)程請(qǐng)求當(dāng)執(zhí)行進(jìn)程請(qǐng)求OS服務(wù)時(shí),由于服務(wù)時(shí),由于某種原因,某種原因,OS并不立即滿足該進(jìn)程并不立即滿足該進(jìn)程的請(qǐng)求時(shí),該進(jìn)程只能轉(zhuǎn)變?yōu)樽枞麪畹恼?qǐng)求時(shí),該進(jìn)程只能轉(zhuǎn)變?yōu)樽枞麪顟B(tài)來(lái)等待。態(tài)來(lái)等待。如,進(jìn)程請(qǐng)求打印機(jī),如,進(jìn)程請(qǐng)求打印機(jī), 系統(tǒng)往往設(shè)置一些具有特定功能的系統(tǒng)系統(tǒng)往往設(shè)置一些具有特定功能的系統(tǒng)進(jìn)程,每當(dāng)這種進(jìn)程完成任務(wù)后,便把

35、進(jìn)程,每當(dāng)這種進(jìn)程完成任務(wù)后,便把自己阻塞起來(lái)以等待新任務(wù)到來(lái)。自己阻塞起來(lái)以等待新任務(wù)到來(lái)。如,系統(tǒng)中發(fā)送數(shù)據(jù)的進(jìn)程,如,系統(tǒng)中發(fā)送數(shù)據(jù)的進(jìn)程, 啟動(dòng)某種操作啟動(dòng)某種操作 當(dāng)進(jìn)程啟動(dòng)某種操作后,如果該進(jìn)程當(dāng)進(jìn)程啟動(dòng)某種操作后,如果該進(jìn)程必須在該操作完成后才能繼續(xù)執(zhí)行,必須在該操作完成后才能繼續(xù)執(zhí)行,則必須先使該進(jìn)程阻塞,以等待操作則必須先使該進(jìn)程阻塞,以等待操作完成。完成。如,啟動(dòng)了某如,啟動(dòng)了某I/O設(shè)備,設(shè)備, 新數(shù)據(jù)尚未到達(dá)新數(shù)據(jù)尚未到達(dá) 對(duì)于相互合作的進(jìn)程,如果其中對(duì)于相互合作的進(jìn)程,如果其中一個(gè)進(jìn)程需要獲得另一個(gè)(合作)一個(gè)進(jìn)程需要獲得另一個(gè)(合作)進(jìn)程提供的數(shù)據(jù)才能運(yùn)行以對(duì)數(shù)進(jìn)程

36、提供的數(shù)據(jù)才能運(yùn)行以對(duì)數(shù)據(jù)進(jìn)行處理,則只要其所需數(shù)據(jù)據(jù)進(jìn)行處理,則只要其所需數(shù)據(jù)尚未到達(dá),該進(jìn)程只有阻塞(等尚未到達(dá),該進(jìn)程只有阻塞(等待)。待)。如,如, 382進(jìn)程阻塞過(guò)程進(jìn)程阻塞過(guò)程 調(diào)用阻塞原語(yǔ)調(diào)用阻塞原語(yǔ)block把自己阻塞。(主動(dòng)行為)把自己阻塞。(主動(dòng)行為) 阻塞(阻塞(blockblock)過(guò)程:)過(guò)程: u 立即停止執(zhí)行;立即停止執(zhí)行;u 把把PCBPCB中進(jìn)程狀態(tài)由中進(jìn)程狀態(tài)由“執(zhí)行執(zhí)行”改為改為“阻塞阻塞”; u 將將PCBPCB插入具有相同事件的阻塞隊(duì)列;插入具有相同事件的阻塞隊(duì)列; u 轉(zhuǎn)進(jìn)程調(diào)度程序,將處理機(jī)分配給某個(gè)就緒轉(zhuǎn)進(jìn)程調(diào)度程序,將處理機(jī)分配給某個(gè)就緒進(jìn)程,

37、并進(jìn)行進(jìn)程切換進(jìn)程,并進(jìn)行進(jìn)程切換保留被阻塞進(jìn)程保留被阻塞進(jìn)程的處理機(jī)狀態(tài)(在的處理機(jī)狀態(tài)(在PCBPCB中),再按新進(jìn)程的中),再按新進(jìn)程的PCBPCB中處理機(jī)狀態(tài)設(shè)置中處理機(jī)狀態(tài)設(shè)置CPUCPU的環(huán)境。的環(huán)境。 393進(jìn)程喚醒過(guò)程進(jìn)程喚醒過(guò)程 調(diào)用喚醒原語(yǔ)調(diào)用喚醒原語(yǔ)wakeup( )( ),將等待事件的進(jìn)程喚醒。,將等待事件的進(jìn)程喚醒。 喚醒原語(yǔ)執(zhí)行過(guò)程喚醒原語(yǔ)執(zhí)行過(guò)程: 將被喚醒進(jìn)程的將被喚醒進(jìn)程的PCBPCB從阻塞隊(duì)列移出;從阻塞隊(duì)列移出; 將其將其PCBPCB中進(jìn)程狀態(tài)由中進(jìn)程狀態(tài)由“阻塞阻塞”改為改為“就緒就緒”; 將改將改PCBPCB插入到就緒隊(duì)列中。插入到就緒隊(duì)列中。bloc

38、k()和()和wakeup()是成對(duì)的。()是成對(duì)的。 401進(jìn)程的掛起進(jìn)程的掛起 當(dāng)出現(xiàn)了引起進(jìn)程掛起的事件時(shí)當(dāng)出現(xiàn)了引起進(jìn)程掛起的事件時(shí)( (用戶進(jìn)程請(qǐng)求將自己掛起,用戶進(jìn)程請(qǐng)求將自己掛起,或父進(jìn)程請(qǐng)求將子進(jìn)程掛起或父進(jìn)程請(qǐng)求將子進(jìn)程掛起) ),系統(tǒng)將用掛起原語(yǔ),系統(tǒng)將用掛起原語(yǔ)suspend( )suspend( )將指定進(jìn)程或處于阻塞狀態(tài)的進(jìn)程掛起。將指定進(jìn)程或處于阻塞狀態(tài)的進(jìn)程掛起。 掛起原語(yǔ)的執(zhí)行過(guò)程:掛起原語(yǔ)的執(zhí)行過(guò)程: 檢查被掛起進(jìn)程的狀態(tài):檢查被掛起進(jìn)程的狀態(tài): 若處于活動(dòng)就緒或執(zhí)行狀態(tài),則將其轉(zhuǎn)若處于活動(dòng)就緒或執(zhí)行狀態(tài),則將其轉(zhuǎn)為靜止就緒;為靜止就緒;若處于活動(dòng)阻塞若處于活

39、動(dòng)阻塞, ,則將其轉(zhuǎn)為靜止阻塞則將其轉(zhuǎn)為靜止阻塞 把該進(jìn)程的把該進(jìn)程的PCB復(fù)制到某指定內(nèi)存區(qū)域復(fù)制到某指定內(nèi)存區(qū)域 為方便用戶或父進(jìn)程考為方便用戶或父進(jìn)程考查該進(jìn)程的運(yùn)行狀態(tài)。查該進(jìn)程的運(yùn)行狀態(tài)。 若該進(jìn)程正在執(zhí)行,則轉(zhuǎn)進(jìn)程調(diào)度程序重新調(diào)度。若該進(jìn)程正在執(zhí)行,則轉(zhuǎn)進(jìn)程調(diào)度程序重新調(diào)度。 2.2.4 進(jìn)程的掛起和激活進(jìn)程的掛起和激活412進(jìn)程的激活進(jìn)程的激活 當(dāng)發(fā)生激活進(jìn)程的事件時(shí)當(dāng)發(fā)生激活進(jìn)程的事件時(shí)( (如父進(jìn)程或用戶請(qǐng)求激活指定進(jìn)程,如父進(jìn)程或用戶請(qǐng)求激活指定進(jìn)程,而內(nèi)存中已有足夠空間時(shí)而內(nèi)存中已有足夠空間時(shí)) ),系統(tǒng)利用激活原語(yǔ),系統(tǒng)利用激活原語(yǔ)active( )active( )將

40、將指定進(jìn)程激活。指定進(jìn)程激活。 激活過(guò)程是:激活過(guò)程是: 將進(jìn)程從外存調(diào)入內(nèi)存;將進(jìn)程從外存調(diào)入內(nèi)存; 若是靜止就緒,則改為活動(dòng)就緒;若是靜止就緒,則改為活動(dòng)就緒; 若是靜止阻塞,則改為活動(dòng)阻塞。若是靜止阻塞,則改為活動(dòng)阻塞。 若采用的是搶占式調(diào)度策略,則應(yīng)檢查被激活就緒進(jìn)程若采用的是搶占式調(diào)度策略,則應(yīng)檢查被激活就緒進(jìn)程的優(yōu)先級(jí),若其優(yōu)先級(jí)比先行執(zhí)行進(jìn)程高,則應(yīng)將處理機(jī)的優(yōu)先級(jí),若其優(yōu)先級(jí)比先行執(zhí)行進(jìn)程高,則應(yīng)將處理機(jī)分配給被激活進(jìn)程。分配給被激活進(jìn)程。 檢查該進(jìn)程現(xiàn)行狀態(tài):檢查該進(jìn)程現(xiàn)行狀態(tài): 422.32.3 進(jìn)程同步進(jìn)程同步n由于進(jìn)程的異步性,尤其是它們競(jìng)爭(zhēng)臨界資源時(shí),由于進(jìn)程的異步性

41、,尤其是它們競(jìng)爭(zhēng)臨界資源時(shí),可能會(huì)給系統(tǒng)造成混亂。可能會(huì)給系統(tǒng)造成混亂。n進(jìn)程同步的主要任務(wù),是使并發(fā)執(zhí)行的進(jìn)程之間能進(jìn)程同步的主要任務(wù),是使并發(fā)執(zhí)行的進(jìn)程之間能有效地共享資源和相互合作,從而使程序的執(zhí)行具有效地共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。有可再現(xiàn)性。 2.3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念2.3.2 信號(hào)量機(jī)制信號(hào)量機(jī)制2.3.3 信號(hào)量的應(yīng)用信號(hào)量的應(yīng)用432.3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念1兩種形式的制約關(guān)系兩種形式的制約關(guān)系 (1)間接制約關(guān)系)間接制約關(guān)系 間接制約關(guān)系源于資源共享。間接制約關(guān)系源于資源共享。如,共享打印機(jī)。如,共享打印機(jī)

42、。 進(jìn)程互斥進(jìn)程互斥(2)直接制約關(guān)系)直接制約關(guān)系 源于進(jìn)程間的合作。源于進(jìn)程間的合作。如,如, 進(jìn)程同步進(jìn)程同步2臨界資源臨界資源 在一段時(shí)間內(nèi)只允許一個(gè)進(jìn)程訪問(wèn)的資在一段時(shí)間內(nèi)只允許一個(gè)進(jìn)程訪問(wèn)的資源,即僅當(dāng)一個(gè)進(jìn)程訪問(wèn)完并釋放該資源,即僅當(dāng)一個(gè)進(jìn)程訪問(wèn)完并釋放該資源后,才允許另一個(gè)進(jìn)程訪問(wèn)的資源,源后,才允許另一個(gè)進(jìn)程訪問(wèn)的資源,稱為臨界資源或獨(dú)占資源。稱為臨界資源或獨(dú)占資源。 如,打印機(jī)、磁帶機(jī)、共享變量、隊(duì)列、如,打印機(jī)、磁帶機(jī)、共享變量、隊(duì)列、 44生產(chǎn)者生產(chǎn)者- -消費(fèi)者問(wèn)題消費(fèi)者問(wèn)題【例【例】生產(chǎn)者生產(chǎn)者- -消費(fèi)者問(wèn)題消費(fèi)者問(wèn)題著名的進(jìn)程同步問(wèn)題著名的進(jìn)程同步問(wèn)題 共享變量

43、:共享變量:臨界資源臨界資源循環(huán)緩沖區(qū)循環(huán)緩沖區(qū)生產(chǎn)者投放一個(gè)產(chǎn)品后,輸入指針生產(chǎn)者投放一個(gè)產(chǎn)品后,輸入指針in加加1:in = ( in + 1 ) % n (n是緩沖區(qū)個(gè)數(shù),整是緩沖區(qū)個(gè)數(shù),整型常量),型常量),in初值為初值為0; 消費(fèi)者每取出一個(gè)產(chǎn)品,輸出指針消費(fèi)者每取出一個(gè)產(chǎn)品,輸出指針out加加1:out = ( out + 1 ) % n,out初值為初值為0; 引入一個(gè)引入一個(gè)共享共享變量變量counter, ,初值為初值為0。生產(chǎn)者投放一個(gè)產(chǎn)品,生產(chǎn)者投放一個(gè)產(chǎn)品,counter加加1,counter = n時(shí)不能再投放產(chǎn)品時(shí)不能再投放產(chǎn)品 消費(fèi)者每取一個(gè)產(chǎn)品,消費(fèi)者每取一個(gè)

44、產(chǎn)品,counter減減1,counter = 0時(shí)不能再取出產(chǎn)品時(shí)不能再取出產(chǎn)品 前面交通觀察前面交通觀察站例子亦然。站例子亦然。以下是軟件臨界資源的例子。以下是軟件臨界資源的例子。45process producer:while (condition) produce an item in nextp;while(counter=n) no-op;/no-op表示空操作表示空操作bufferin = nextp;in = (in + 1)% n ;counter = counter + 1 ;生產(chǎn)者進(jìn)程算法如下:生產(chǎn)者進(jìn)程算法如下:46process consumer:struct ite

45、m nextc ;while (condition) while (counter = 0)no-op ;nextc = bufferout ;out = (out + 1)% n ;counter = counter 1 ;consume the item in nextc ;消費(fèi)者進(jìn)程算法如下:消費(fèi)者進(jìn)程算法如下:47上面的生產(chǎn)者程序和消費(fèi)者程序,在順序執(zhí)行時(shí)其上面的生產(chǎn)者程序和消費(fèi)者程序,在順序執(zhí)行時(shí)其結(jié)果是正確的。但若并發(fā)執(zhí)行時(shí),可能會(huì)出現(xiàn)差錯(cuò),結(jié)果是正確的。但若并發(fā)執(zhí)行時(shí),可能會(huì)出現(xiàn)差錯(cuò),問(wèn)題在于這兩個(gè)進(jìn)程共享變量問(wèn)題在于這兩個(gè)進(jìn)程共享變量counter。生產(chǎn)者做。生產(chǎn)者做count

46、er=counter+1操作,消費(fèi)者做操作,消費(fèi)者做counter= counter-1操作,這兩個(gè)操作在機(jī)器語(yǔ)言實(shí)現(xiàn)時(shí),常操作,這兩個(gè)操作在機(jī)器語(yǔ)言實(shí)現(xiàn)時(shí),??捎孟旅娴男问矫枋觯嚎捎孟旅娴男问矫枋觯?生產(chǎn)者執(zhí)行的操作:生產(chǎn)者執(zhí)行的操作: register1 = counter ; register1 = register1 + 1; counter = register1; 消費(fèi)者執(zhí)行的操作:消費(fèi)者執(zhí)行的操作: register2 = counter ; register2 = register2 - 1 ; counter = register2; 48假設(shè)某一時(shí)刻假設(shè)某一時(shí)刻counte

47、r的值為的值為5,生產(chǎn)者和消費(fèi)者同時(shí)對(duì),生產(chǎn)者和消費(fèi)者同時(shí)對(duì)counter操作,按下述順序執(zhí)行:操作,按下述順序執(zhí)行: register1 = counter; (生產(chǎn)者取得生產(chǎn)者取得counter的當(dāng)前值為的當(dāng)前值為5) register1 = register1 + 1; (生產(chǎn)者將該值增生產(chǎn)者將該值增1變?yōu)樽優(yōu)?)register2 = counter; (消費(fèi)者取得消費(fèi)者取得counter的當(dāng)前值為的當(dāng)前值為5)register2 = register2 1; (消費(fèi)者將該值減消費(fèi)者將該值減1變?yōu)樽優(yōu)?)counter = register2; (消費(fèi)者保存消費(fèi)者保存counter的新

48、值的新值4)counter = register1; (生產(chǎn)者保存生產(chǎn)者保存counter的新值的新值6)最終最終counter的值為的值為6,正確的值應(yīng)是,正確的值應(yīng)是5,出現(xiàn)了差錯(cuò)。,出現(xiàn)了差錯(cuò)。學(xué)生考慮學(xué)生考慮:什么情況會(huì)出現(xiàn)什么情況會(huì)出現(xiàn)counter最終值為最終值為4的情況。的情況。 解決此問(wèn)題的關(guān)鍵,是應(yīng)將變量解決此問(wèn)題的關(guān)鍵,是應(yīng)將變量counter作為臨界資作為臨界資源處理,亦即讓生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程互斥地訪源處理,亦即讓生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程互斥地訪問(wèn)變量問(wèn)變量counter。492.3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念3臨界區(qū)(臨界區(qū)(critical secti

49、on) 每個(gè)進(jìn)程中訪問(wèn)臨界資源的那段代碼稱為臨界區(qū)。每個(gè)進(jìn)程中訪問(wèn)臨界資源的那段代碼稱為臨界區(qū)。 不論是硬件臨界不論是硬件臨界資源,還是軟件資源,還是軟件臨界資源,多個(gè)臨界資源,多個(gè)進(jìn)程必須互斥地進(jìn)程必須互斥地對(duì)它們?cè)L問(wèn)。對(duì)它們?cè)L問(wèn)。 顯然,若能保證諸進(jìn)程顯然,若能保證諸進(jìn)程互斥互斥地進(jìn)入自己的臨界區(qū),便可實(shí)現(xiàn)地進(jìn)入自己的臨界區(qū),便可實(shí)現(xiàn)諸進(jìn)程對(duì)臨界區(qū)的互斥訪問(wèn)。為此,每個(gè)進(jìn)程在進(jìn)入臨界區(qū)諸進(jìn)程對(duì)臨界區(qū)的互斥訪問(wèn)。為此,每個(gè)進(jìn)程在進(jìn)入臨界區(qū)之前,應(yīng)先對(duì)欲訪問(wèn)的臨界資源進(jìn)行檢查,看是否正被訪問(wèn),之前,應(yīng)先對(duì)欲訪問(wèn)的臨界資源進(jìn)行檢查,看是否正被訪問(wèn),如果此刻該資源未被訪問(wèn),便可進(jìn)入臨界區(qū)對(duì)該臨界資

50、源進(jìn)如果此刻該資源未被訪問(wèn),便可進(jìn)入臨界區(qū)對(duì)該臨界資源進(jìn)行訪問(wèn),并設(shè)置它正被訪問(wèn)的標(biāo)志;如果此刻它正被訪問(wèn),行訪問(wèn),并設(shè)置它正被訪問(wèn)的標(biāo)志;如果此刻它正被訪問(wèn),則本進(jìn)程不能進(jìn)入臨界區(qū)。則本進(jìn)程不能進(jìn)入臨界區(qū)。 定義:定義:進(jìn)程互斥的定義:進(jìn)程互斥的定義:進(jìn)程互斥進(jìn)程互斥不允許兩個(gè)或兩個(gè)以上進(jìn)不允許兩個(gè)或兩個(gè)以上進(jìn)程同時(shí)訪問(wèn)同一個(gè)臨界資源。程同時(shí)訪問(wèn)同一個(gè)臨界資源。進(jìn)程互斥進(jìn)程互斥不允許兩個(gè)或兩個(gè)以上進(jìn)不允許兩個(gè)或兩個(gè)以上進(jìn)程同時(shí)進(jìn)入程同時(shí)進(jìn)入相關(guān)臨界區(qū)相關(guān)臨界區(qū)。50u 因此必須在臨界區(qū)前增加一段用于上述檢查的代因此必須在臨界區(qū)前增加一段用于上述檢查的代碼,把這段代碼稱為碼,把這段代碼稱為進(jìn)入

51、區(qū)進(jìn)入?yún)^(qū)(entry section)u 相應(yīng)地,在臨界區(qū)后面也要加上一段稱為相應(yīng)地,在臨界區(qū)后面也要加上一段稱為退出區(qū)退出區(qū)(exit section)的代碼,用于將臨界區(qū)正被訪問(wèn)的的代碼,用于將臨界區(qū)正被訪問(wèn)的標(biāo)志恢復(fù)為未被訪問(wèn)的標(biāo)志。標(biāo)志恢復(fù)為未被訪問(wèn)的標(biāo)志。 repeat非臨界區(qū)非臨界區(qū)進(jìn)入?yún)^(qū)進(jìn)入?yún)^(qū)臨界區(qū)臨界區(qū)退出區(qū)退出區(qū)非臨界區(qū)非臨界區(qū)until false一般結(jié)構(gòu)一般結(jié)構(gòu)“ 進(jìn) 入 區(qū)進(jìn) 入 區(qū) ” 和和“退出區(qū)退出區(qū)”的的不同構(gòu)成方法,不同構(gòu)成方法,形成了各種不形成了各種不同的同的同步機(jī)制同步機(jī)制。514同步機(jī)制應(yīng)遵循的原則同步機(jī)制應(yīng)遵循的原則 為了實(shí)現(xiàn)各進(jìn)程互斥地進(jìn)入自己的臨界

52、區(qū),一為了實(shí)現(xiàn)各進(jìn)程互斥地進(jìn)入自己的臨界區(qū),一般是在系統(tǒng)中設(shè)置專門的同步機(jī)制來(lái)協(xié)調(diào)各進(jìn)程般是在系統(tǒng)中設(shè)置專門的同步機(jī)制來(lái)協(xié)調(diào)各進(jìn)程間的運(yùn)行。間的運(yùn)行。 我們把異步環(huán)境下的一組并發(fā)進(jìn)程因直接制我們把異步環(huán)境下的一組并發(fā)進(jìn)程因直接制約而互相發(fā)送消息、進(jìn)行互相合作、互相等待,約而互相發(fā)送消息、進(jìn)行互相合作、互相等待,使得各進(jìn)程按一定的速度執(zhí)行的過(guò)程稱為進(jìn)程使得各進(jìn)程按一定的速度執(zhí)行的過(guò)程稱為進(jìn)程間的同步。具有同步關(guān)系的一組并發(fā)進(jìn)程稱為間的同步。具有同步關(guān)系的一組并發(fā)進(jìn)程稱為合作進(jìn)程,合作進(jìn)程間互相發(fā)送的信號(hào)稱為消合作進(jìn)程,合作進(jìn)程間互相發(fā)送的信號(hào)稱為消息或事件。息或事件。 524同步機(jī)制應(yīng)遵循的原則

53、同步機(jī)制應(yīng)遵循的原則 所有同步機(jī)制都應(yīng)遵循如下四條準(zhǔn)則:所有同步機(jī)制都應(yīng)遵循如下四條準(zhǔn)則: 空閑讓進(jìn)空閑讓進(jìn) 當(dāng)無(wú)進(jìn)程處于臨界區(qū)時(shí),表明臨界資源處當(dāng)無(wú)進(jìn)程處于臨界區(qū)時(shí),表明臨界資源處于空閑狀態(tài),應(yīng)允許一個(gè)請(qǐng)求進(jìn)入臨界區(qū)于空閑狀態(tài),應(yīng)允許一個(gè)請(qǐng)求進(jìn)入臨界區(qū)的進(jìn)程立即進(jìn)入自己的臨界區(qū),以便有效的進(jìn)程立即進(jìn)入自己的臨界區(qū),以便有效地利用臨界資源。地利用臨界資源??臻e讓進(jìn)、忙則等待、有限等待、讓權(quán)等待??臻e讓進(jìn)、忙則等待、有限等待、讓權(quán)等待。53有限等待有限等待讓權(quán)等待讓權(quán)等待對(duì)要求訪問(wèn)臨界資源的進(jìn)程,應(yīng)保證在有對(duì)要求訪問(wèn)臨界資源的進(jìn)程,應(yīng)保證在有限的時(shí)間內(nèi)能進(jìn)入自己的臨界區(qū),以免陷限的時(shí)間內(nèi)能進(jìn)入自

54、己的臨界區(qū),以免陷入入“死鎖死鎖”狀態(tài)。狀態(tài)。不死等不死等。不互相阻塞不互相阻塞。當(dāng)進(jìn)程不能進(jìn)入自己的臨界區(qū)時(shí),應(yīng)立即當(dāng)進(jìn)程不能進(jìn)入自己的臨界區(qū)時(shí),應(yīng)立即釋放處理機(jī),以免進(jìn)程陷入釋放處理機(jī),以免進(jìn)程陷入“忙等忙等”。不忙碌等待不忙碌等待。忙則等待忙則等待 當(dāng)已有進(jìn)程進(jìn)入臨界區(qū)時(shí),表明臨界資源當(dāng)已有進(jìn)程進(jìn)入臨界區(qū)時(shí),表明臨界資源正在被訪問(wèn),因而其他試圖進(jìn)入臨界區(qū)的正在被訪問(wèn),因而其他試圖進(jìn)入臨界區(qū)的進(jìn)程必須等待,以保證對(duì)臨界資源的進(jìn)程必須等待,以保證對(duì)臨界資源的互斥互斥訪問(wèn)訪問(wèn)。542.3.2 信號(hào)量機(jī)制信號(hào)量機(jī)制信號(hào)量信號(hào)量(Semaphores)機(jī)制是一種卓有成效的進(jìn)程同機(jī)制是一種卓有成效的

55、進(jìn)程同步工具。信號(hào)量機(jī)制已被廣泛應(yīng)用于單處理機(jī)和多步工具。信號(hào)量機(jī)制已被廣泛應(yīng)用于單處理機(jī)和多處理機(jī)系統(tǒng)以及計(jì)算機(jī)網(wǎng)絡(luò)中。處理機(jī)系統(tǒng)以及計(jì)算機(jī)網(wǎng)絡(luò)中。 信號(hào)量機(jī)制的發(fā)展:信號(hào)量機(jī)制的發(fā)展:整型信號(hào)量整型信號(hào)量 記錄型信號(hào)量記錄型信號(hào)量 AND型信號(hào)量型信號(hào)量 信號(hào)量集信號(hào)量集 ( (重點(diǎn)介紹重點(diǎn)介紹) ) 551、整型信號(hào)量、整型信號(hào)量 最初由最初由Dijkstra把整型信號(hào)量定義為一個(gè)整型量,把整型信號(hào)量定義為一個(gè)整型量,除初始化外,僅能通過(guò)兩個(gè)標(biāo)準(zhǔn)的原子操作除初始化外,僅能通過(guò)兩個(gè)標(biāo)準(zhǔn)的原子操作(Atomic Operation) wait(S)和和signal(S)來(lái)訪問(wèn)。來(lái)訪問(wèn)。這兩個(gè)

56、操作一直被分別稱為這兩個(gè)操作一直被分別稱為P、V操作。操作。 wait和和signal操作可描述為:操作可描述為: wait(S): while S0 do no-op S:=S-1;signal(S): S:=S+1;561、整型信號(hào)量、整型信號(hào)量 最初由最初由Dijkstra把整型信號(hào)量定義為一個(gè)整型量,把整型信號(hào)量定義為一個(gè)整型量,除初始化外,僅能通過(guò)兩個(gè)標(biāo)準(zhǔn)的原子操作除初始化外,僅能通過(guò)兩個(gè)標(biāo)準(zhǔn)的原子操作(Atomic Operation) wait(S)和和signal(S)來(lái)訪問(wèn)。來(lái)訪問(wèn)。這兩個(gè)操作一直被分別稱為這兩個(gè)操作一直被分別稱為P、V操作。操作。 wait和和signal操

57、作可描述為:操作可描述為: wait(S): while S0 do no-op S:=S-1;signal(S): S:=S+1;57process producer:while (condition) produce an item in nextp;while(counter=n) no-op;/no-op表示空操作表示空操作bufferin = nextp;in = (in + 1)% n ; wait(s); counter = counter + 1 ; signal(s);生產(chǎn)者進(jìn)程算法如下生產(chǎn)者進(jìn)程算法如下(加入整型信號(hào)量):加入整型信號(hào)量):58process consume

58、r:struct item nextc ;while (condition) while (counter = 0)no-op ;nextc = bufferout ;out = (out + 1)% n ;wait(s); counter = counter 1 ; signal(s);consume the item in nextc ;消費(fèi)者進(jìn)程算法如下(加入整型信號(hào)量):消費(fèi)者進(jìn)程算法如下(加入整型信號(hào)量):591、整型信號(hào)量、整型信號(hào)量 最初由最初由Dijkstra把整型信號(hào)量定義為一個(gè)整型量,把整型信號(hào)量定義為一個(gè)整型量,除初始化外,僅能通過(guò)兩個(gè)標(biāo)準(zhǔn)的原子操作除初始化外,僅能通過(guò)兩

59、個(gè)標(biāo)準(zhǔn)的原子操作(Atomic Operation) wait(S)和和signal(S)來(lái)訪問(wèn)。來(lái)訪問(wèn)。這兩個(gè)操作一直被分別稱為這兩個(gè)操作一直被分別稱為P、V操作。操作。 wait和和signal操作可描述為:操作可描述為: wait(S): while S0 do no-op S:=S-1;signal(S): S:=S+1;“忙等忙等”,未遵循,未遵循“讓權(quán)等待讓權(quán)等待”準(zhǔn)則準(zhǔn)則602、記錄型信號(hào)量、記錄型信號(hào)量 需要一個(gè)用于代表臨界資源數(shù)目的整型變量需要一個(gè)用于代表臨界資源數(shù)目的整型變量value;還要一個(gè)在該資源上阻塞的隊(duì)列(鏈表);還要一個(gè)在該資源上阻塞的隊(duì)列(鏈表)指針指針L。故

60、信號(hào)量應(yīng)采用記錄型(。故信號(hào)量應(yīng)采用記錄型(C語(yǔ)言中為結(jié)語(yǔ)言中為結(jié)構(gòu)型)的結(jié)構(gòu):構(gòu)型)的結(jié)構(gòu): struct semaphore int value ; struct semphore *L ; ; 記錄型信號(hào)量記錄型信號(hào)量的結(jié)構(gòu)定義的結(jié)構(gòu)定義信號(hào)量除初始化外,只能信號(hào)量除初始化外,只能通過(guò)兩個(gè)原子操作通過(guò)兩個(gè)原子操作(稱為稱為原原語(yǔ)語(yǔ))wait(S)和和signal(S)來(lái)訪來(lái)訪問(wèn)。它們以前被稱為問(wèn)。它們以前被稱為P、V操作。下頁(yè)介紹操作。下頁(yè)介紹wait和和signal操作。操作。 61wait和和signal操作可用操作可用C/C+語(yǔ)言描述如下:語(yǔ)言描述如下:void wait( semaphore S) S.val

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論