




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章進(jìn)程的描述與控制.1主要目錄進(jìn)程的引入2.1前趨圖和程序執(zhí)行2.2進(jìn)程的描述2.3進(jìn)程控制2.4線(xiàn)程的基本概念2.5總結(jié)本章基礎(chǔ)要點(diǎn)2.6作業(yè).2進(jìn)程的引入
進(jìn)程的概念是操作系統(tǒng)中最基本、最重要的概念。它是在多道程序系統(tǒng)出現(xiàn)后,為了刻劃系統(tǒng)內(nèi)部出現(xiàn)的情況,描述系統(tǒng)內(nèi)部各作業(yè)的活動(dòng)規(guī)律而引進(jìn)的一個(gè)新的概念。.3引子
在多道批處理系統(tǒng)和分時(shí)系統(tǒng)中,程序并不能獨(dú)立運(yùn)行,作為資源分配和獨(dú)立運(yùn)行的基本單位是進(jìn)程。操作系統(tǒng)所具有的四大特征也都是基于進(jìn)程而形成的,并可從進(jìn)程的觀(guān)點(diǎn)來(lái)研究操作系統(tǒng),形成了所謂的進(jìn)程觀(guān)點(diǎn)。.42.1前趨圖和程序(順序或并發(fā))執(zhí)行2.1.1程序順序執(zhí)行:說(shuō)明有些進(jìn)程是先后運(yùn)行的。一、程序順序執(zhí)行二、程序順序執(zhí)行時(shí)的特征2.1.2前趨圖的定義2.1.3程序并發(fā)執(zhí)行一、程序并發(fā)執(zhí)行二、程序并發(fā)執(zhí)行時(shí)的特征2.1.4程序并發(fā)執(zhí)行的條件
.5一、程序順序執(zhí)行一般一個(gè)程序的執(zhí)行從整體上,必須按照某個(gè)次序順序執(zhí)行。I1C1P1I2C2P22.1.1程序順序執(zhí)行.6
對(duì)某一個(gè)程序段中的多條語(yǔ)句,也有一個(gè)執(zhí)行順序,如下三條語(yǔ)句的程序段:S1:a:=x+yS2:b:=a-5S3:c:=b+1S2必須在a被賦值后,才能執(zhí)行,S3只能在b被賦值后才能執(zhí)行。二、程序順序執(zhí)行時(shí)的特征1、順序性處理機(jī)的操作,嚴(yán)格按照程序所規(guī)定的順序執(zhí)行,即每一個(gè)操作必須在下一個(gè)操作開(kāi)始之前結(jié)束。2.1.1程序順序執(zhí)行.72、封閉性 程序是在封閉的環(huán)境下運(yùn)行的,即程序在運(yùn)行時(shí),它獨(dú)占全機(jī)資源,因而本機(jī)各資源的狀態(tài)(除初始狀態(tài)外),只有本程序才能改變它。一旦開(kāi)始運(yùn)行,其執(zhí)行結(jié)果不受外界因素的影響。2.1.1程序順序執(zhí)行.83、可再現(xiàn)性 只要程序執(zhí)行時(shí)的環(huán)境和初始條件相同,當(dāng)程序多次重復(fù)執(zhí)行時(shí),不論它是從頭到尾不停頓地執(zhí)行,還是停停走走地執(zhí)行,都將獲得相同的結(jié)果。即程序的執(zhí)行結(jié)果與時(shí)間無(wú)關(guān)。2.1.1程序順序執(zhí)行.9
前趨圖(ProcedenceGraph)是一個(gè)有向無(wú)循環(huán)圖DAG(DirectedAcyclicGraph)。用于描述進(jìn)程之間執(zhí)行的前后關(guān)系。
圖中的每個(gè)結(jié)點(diǎn)用于表示一條語(yǔ)句、一個(gè)程序段或進(jìn)程,結(jié)點(diǎn)間的有向邊表示在兩結(jié)點(diǎn)之間存在的偏序(PartialOrder)或前趨關(guān)系(ProcedenceRelation)“”,={(Pi,Pj)|Pi
mustcompletebeforePjmaystart}。
若(Pi,Pj)屬于,可寫(xiě)成PiPj,稱(chēng)Pi是Pj的前趨,而Pj是Pi的直接后繼。沒(méi)有前趨的結(jié)點(diǎn)稱(chēng)為初始結(jié)點(diǎn),沒(méi)有后繼的結(jié)點(diǎn)稱(chēng)為終止結(jié)點(diǎn)。每個(gè)結(jié)點(diǎn)具有一個(gè)重量,用該結(jié)點(diǎn)所含的程序量或結(jié)點(diǎn)的執(zhí)行時(shí)間來(lái)計(jì)量。2.1.2前趨圖的定義.10如上圖示:有下面的前趨關(guān)系:P={P1,P2,P3,P4,P5,P6,P7}={(P1,P2),(P1,P3),(P1,P4),(P2,P5),(P3,P5),(P4,P6),(P5,P7),(P6,P7)}注:前趨圖中必須不存在循環(huán)。2376514.11一、程序并發(fā)執(zhí)行 在前述問(wèn)題中,輸入程序、計(jì)算程序和打印程序存在著IiCiPi的前趨關(guān)系,對(duì)每一個(gè)作業(yè)的輸入、計(jì)算和打印三個(gè)操作,都必須順序執(zhí)行,但不存在PiIi+1的關(guān)系。2.1.3程序并發(fā)執(zhí)行.12 所以,對(duì)一批這樣的程序進(jìn)行處理時(shí),可使它們并發(fā)執(zhí)行。 如:輸入程序在輸入第一個(gè)程序后,在計(jì)算程序?qū)υ摮绦蜻M(jìn)行計(jì)算的同時(shí),可由輸入程序再輸入第二個(gè)程序,從而使第一個(gè)程序的計(jì)算操作與第二個(gè)程序的輸入操作并發(fā)執(zhí)行。 如圖示:2.1.3程序并發(fā)執(zhí)行.13I1I2I3I4C4C3C2C1P3P2P1P4同時(shí)進(jìn)行.14該圖中存在著如下前趨關(guān)系:
IiCiIiIi+1CiPiCiCi+1
PiPi+1
其中Ii+1和Ci及Pi-1是重疊的。即Pi-1和Ci及Ii+1可并發(fā)執(zhí)行。
即兩個(gè)不同的程序間,在不同的程序段間存在著前趨關(guān)系。2.1.3程序并發(fā)執(zhí)行.15同一程序內(nèi)也可并發(fā)進(jìn)行如下四條語(yǔ)句的程序段:S1:a:=x+2S2:b:=y+4S3:c:=a+bS4:d:=c+6其前趨關(guān)系如圖:從中看出:S3須在a和b被賦值后才能執(zhí)行,S4須在S3后才能執(zhí)行,但S1和S2可以并發(fā)執(zhí)行,互不依賴(lài)。S1S2S3S42.1.3程序并發(fā)執(zhí)行.16二、程序并發(fā)執(zhí)行時(shí)的特征1、間斷性
程序并發(fā)執(zhí)行時(shí),由于它們共享資源或?yàn)橥瓿赏豁?xiàng)任務(wù)而相互合作,致使在并發(fā)程序之間形成了相互制約的關(guān)系。2.1.3程序并發(fā)執(zhí)行.17
一旦使某程序暫停的因素消失后,如Ii處理完成,C便可恢復(fù)對(duì)Ci的處理。從中看出,相互制約將導(dǎo)致并發(fā)程序具有“執(zhí)行-暫停執(zhí)行-執(zhí)行”這種間斷性的活動(dòng)規(guī)律。2.1.3程序并發(fā)執(zhí)行.182、失去封閉性
程序并發(fā)執(zhí)行時(shí),多個(gè)并發(fā)程序共享系統(tǒng)中的各種資源,所以這些資源的狀態(tài)被多個(gè)程序來(lái)改變,致使程序的運(yùn)行失去了封閉性。這樣一個(gè)程序在執(zhí)行時(shí),會(huì)受到其它程序的影響。如:當(dāng)處理機(jī)資源被某程序占用時(shí),其他程序必須等待。2.1.3程序并發(fā)執(zhí)行.193、不可再現(xiàn)性
程序并發(fā)執(zhí)行時(shí),失去了封閉性,必然導(dǎo)致失去其運(yùn)行結(jié)果的可再現(xiàn)性。如:有兩個(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)行。2.1.3程序并發(fā)執(zhí)行.20
假定某時(shí)刻N(yùn)的值為n,有三種情況出現(xiàn):(1)N:=N+1在print(N)和N:=0之前,此時(shí)得到的N值為n+1,n+1,0。(2)N:=N+1在print(N)和N:=0之后,N的值分別為n,0,1(3)N:=N+1,在print(N)和N:=0之間,N的值分別為n,n+1,02.1.3程序并發(fā)執(zhí)行.21
從上可知,程序并發(fā)執(zhí)行時(shí),會(huì)失去封閉性,其計(jì)算結(jié)果與并發(fā)程序的執(zhí)行速度有關(guān),而使程序失去了可再現(xiàn)性,即程序經(jīng)過(guò)多次執(zhí)行后,雖其執(zhí)行時(shí)的環(huán)境和初始條件相同,但結(jié)果卻不相同。2.1.3程序并發(fā)執(zhí)行.22
由上可知,程序并發(fā)執(zhí)行,雖可有效地提高資源利用率和系統(tǒng)的吞吐量,但必須使并發(fā)程序能保持可再現(xiàn)性。也是使程序并發(fā)執(zhí)行的條件。定義一些符號(hào):R(pi)={a1,a2,…,am},用來(lái)表示程序pi在執(zhí)行期間所需參考的所有變量的集合,稱(chēng)“讀集”。
W(pi)={b1,b2,…,bm},是程序pi在執(zhí)行期間要改變的所有變量的集合,稱(chēng)“寫(xiě)集”。2.1.4程序并發(fā)執(zhí)行的條件.23
若有兩條語(yǔ)句ci=a-b和wi=c+1,則它們的讀集和寫(xiě)集分別為:
R(c:=a-b)={a,b},R(w:=c+1)={c}W(c:=a-b)={c}W(w:=c+1)={w}
可得:
R(c:=a-b)交W(c:=a-b)={}R(w:=c+1)交W(w:=c+1)={}2.1.4程序并發(fā)執(zhí)行的條件.242.1.4程序并發(fā)執(zhí)行的條件
讀集和寫(xiě)集的交,也可能不是空集。如:R(x:=x+1)=W(x:=x+1)={x}
若兩個(gè)程序p1和p2要并發(fā)執(zhí)行,并具有可再現(xiàn)性,要滿(mǎn)足下述條件,該條件在1966年首選由Bernstein提出,又稱(chēng)Bernstein條件。
R(p1)交W(p2)={}
W(p1)交R(p2)={}W(p1)交W(p2)={}.25
其中,前兩個(gè)條件保證一個(gè)程序在兩次操作之間存儲(chǔ)器中的數(shù)據(jù)不會(huì)發(fā)生變化;最后一個(gè)條件保證程序?qū)懖僮鞯慕Y(jié)果不會(huì)丟失。只要同時(shí)滿(mǎn)足三個(gè)條件,并發(fā)執(zhí)行的程序就可以保持封閉性和可再現(xiàn)性。但這并沒(méi)能解決所有問(wèn)題,在實(shí)際程序執(zhí)行過(guò)程中很難對(duì)這三個(gè)條件進(jìn)行檢查。
如:四條語(yǔ)句:s1:a:=x+ys2:b:=z+1s3:c:=a-bs4:w:=c+12.1.4程序并發(fā)執(zhí)行的條件.26
R(s1)={x,y},R(s2)={z},R(s3)={a,b},R(s4)={c}, W(s1)={a},W(s2)=,W(s3)={c},W(s4)={w}
由此可見(jiàn),s1和s2可并發(fā)執(zhí)行,s1和s3不能并發(fā)執(zhí)行,s2和s3也不能并發(fā)執(zhí)行,s3和s4也不可并發(fā)執(zhí)行。原因?2.1.4程序并發(fā)執(zhí)行的條件.272.2進(jìn)程的描述2.2.1進(jìn)程的定義與特征一、進(jìn)程的定義二、進(jìn)程的特征2.2.2進(jìn)程的基本狀態(tài)一、進(jìn)程的三種基本狀態(tài)二、新?tīng)顟B(tài)和終止?fàn)顟B(tài)三、進(jìn)程狀態(tài)的轉(zhuǎn)換2.2.3進(jìn)程的掛起狀態(tài)一、掛起狀態(tài)的引入二、進(jìn)程狀態(tài)的轉(zhuǎn)換2.2.4進(jìn)程控制塊PCB一、進(jìn)程控制塊PCB二、進(jìn)程控制塊中的信息三、PCB的組織方式.28
為了使程序能在多程序環(huán)境下并發(fā)執(zhí)行,并能對(duì)并發(fā)執(zhí)行的程序加以控制和描述,專(zhuān)門(mén)配置了一個(gè)稱(chēng)為“進(jìn)程控制塊”的數(shù)據(jù)結(jié)構(gòu)。其中放了進(jìn)程標(biāo)識(shí)符、進(jìn)程運(yùn)行的當(dāng)前狀態(tài)、程序和數(shù)據(jù)的地址,以及能保存該程序運(yùn)行時(shí)CPU的環(huán)境信息。這樣,由程序段、數(shù)據(jù)段及進(jìn)程控制塊構(gòu)成了一個(gè)進(jìn)程的實(shí)體。2.2進(jìn)程的描述.29 一、進(jìn)程的定義進(jìn)程的概念,在上世紀(jì)60年代初期,就由麻省理工學(xué)院的Multics系統(tǒng)和IBM的CTSS/360系統(tǒng)引入了,其后又有不同的定義。能反映進(jìn)程實(shí)質(zhì)的定義有:2.2.1進(jìn)程的定義與特征.30(1)進(jìn)程是程序在處理機(jī)上的一次執(zhí)行過(guò)程。(2)進(jìn)程是可以和別的計(jì)算并發(fā)進(jìn)行的計(jì)算。(3)進(jìn)程可定義為一個(gè)數(shù)據(jù)結(jié)構(gòu)及能在其上進(jìn)行操作的一個(gè)程序(4)進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時(shí)所發(fā)生的活動(dòng)(5)進(jìn)程是程序在一個(gè)數(shù)據(jù)集合上的運(yùn)行過(guò)程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。本教程中,將進(jìn)程定義為:
進(jìn)程是進(jìn)程實(shí)體的運(yùn)行過(guò)程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。2.2.1進(jìn)程的定義與特征.31二、進(jìn)程的特征(與程序比)進(jìn)程具有五個(gè)基本特征,和程序不一樣。1、動(dòng)態(tài)性進(jìn)程是進(jìn)程實(shí)體的執(zhí)行過(guò)程,所以,動(dòng)態(tài)性是進(jìn)程最基本的特性。其動(dòng)態(tài)性表現(xiàn)在:它由創(chuàng)建而產(chǎn)生,由調(diào)度而執(zhí)行,因得不到資源而暫停執(zhí)行,以及由撤消而消亡。即進(jìn)程有一定的生命期。程序只是一組有序指令的集合,并存放在某種介質(zhì)上,本身無(wú)運(yùn)動(dòng)的含義,所以程序是靜態(tài)實(shí)體。2.2.1進(jìn)程的定義與特征.322、并發(fā)性當(dāng)多個(gè)進(jìn)程實(shí)體,同時(shí)存于內(nèi)存中時(shí),能在一段時(shí)間內(nèi)同時(shí)運(yùn)行。即為并發(fā)性。并發(fā)性是進(jìn)程的重要特征,也是OS的重要特征。引入進(jìn)程的目的也是為使進(jìn)程實(shí)體能和其它進(jìn)程實(shí)體并發(fā)執(zhí)行。
程序是不能并發(fā)執(zhí)行的。3、獨(dú)立性 進(jìn)程實(shí)體是一個(gè)能獨(dú)立運(yùn)行的基本單位,也是系統(tǒng)中獨(dú)立獲得資源和獨(dú)立調(diào)度的基本單位,即為獨(dú)立性。凡未建立PCB的程序,都不能作為一個(gè)獨(dú)立的單位參與運(yùn)行。2.2.1進(jìn)程的定義與特征.334、異步性 進(jìn)程按各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn);或者說(shuō),進(jìn)程按異步方式運(yùn)行。當(dāng)然,這樣會(huì)導(dǎo)致程序的不可再現(xiàn)性。OS要采取某種措施保證各程序之間能協(xié)調(diào)運(yùn)行。5、結(jié)構(gòu)特征進(jìn)程是由程序段、數(shù)據(jù)段和進(jìn)程控制塊組成,這三部分統(tǒng)稱(chēng)為:進(jìn)程映象。2.2.1進(jìn)程的定義與特征.34三、進(jìn)程和程序的關(guān)系進(jìn)程和程序是兩個(gè)密切相關(guān)但又有所不同的概念,它們?cè)谝韵聨讉€(gè)方面存在區(qū)別和聯(lián)系。(1)進(jìn)程是動(dòng)態(tài)的,程序是靜態(tài)的。進(jìn)程是程序的執(zhí)行;程序是有序代碼的集合。(2)進(jìn)程是暫時(shí)的,程序是永久的。進(jìn)程是一個(gè)狀態(tài)變化的過(guò)程,程序可以長(zhǎng)久保存。(3)進(jìn)程與程序的組成不同,進(jìn)程的組成包括程序、數(shù)據(jù)和進(jìn)程控制塊。2.2.1進(jìn)程的定義與特征.35(4)進(jìn)程與程序是密切相關(guān)的。通過(guò)多次執(zhí)行,一個(gè)程序可以對(duì)應(yīng)多個(gè)進(jìn)程,通過(guò)調(diào)用關(guān)系,一個(gè)進(jìn)程可以包括多個(gè)程序。進(jìn)程可創(chuàng)建其他進(jìn)程,而程序并不能形成新的程序。2.2.1進(jìn)程的定義與特征.36
一個(gè)進(jìn)程的生命期可以劃分為一組狀態(tài),這些狀態(tài)刻畫(huà)了整個(gè)進(jìn)程。在進(jìn)程的運(yùn)行過(guò)程中,由于系統(tǒng)中多個(gè)進(jìn)程的并發(fā)運(yùn)行及相互制約的結(jié)果,使得進(jìn)程的狀態(tài)不斷變化。通常,一個(gè)進(jìn)程至少可劃分為三種基本狀態(tài)。2.2.1進(jìn)程的定義與特征.37一、進(jìn)程的三種基本狀態(tài) 1、就緒狀態(tài)(ready)
當(dāng)進(jìn)程已分配到除CPU以外的所有必要的資源后,只要能再獲得處理機(jī),就可執(zhí)行,這種進(jìn)程狀態(tài)稱(chēng)為就緒狀態(tài)。同一個(gè)系統(tǒng)中,可有多個(gè)進(jìn)程同時(shí)處于就緒狀態(tài),一般要把這些進(jìn)程排成一個(gè)或多個(gè)隊(duì)列,稱(chēng)為就緒隊(duì)列。2.2.2進(jìn)程的基本狀態(tài).38 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)。又稱(chēng)運(yùn)行狀態(tài)。2.2.2進(jìn)程的基本狀態(tài).393、阻塞狀態(tài)(block)
進(jìn)程因發(fā)生某事件(請(qǐng)求I/O或申請(qǐng)緩沖空間等)而暫停執(zhí)行時(shí)的狀態(tài),即進(jìn)程的執(zhí)行受到阻塞,稱(chēng)為暫停狀態(tài)或阻塞狀態(tài),又稱(chēng)等待或睡眠狀態(tài)。多個(gè)處于阻塞狀態(tài)的進(jìn)程排成一個(gè)隊(duì)列,稱(chēng)為阻塞隊(duì)列。有的系統(tǒng)中,會(huì)按阻塞原因的不同而將處于阻塞狀態(tài)的進(jìn)程排成多個(gè)隊(duì)列。2.2.2進(jìn)程的基本狀態(tài).40注意:(1)前兩種狀態(tài)在邏輯是類(lèi)似的,處于這兩種狀態(tài)的進(jìn)程都是可以運(yùn)行的,只是對(duì)于第一種狀態(tài)暫時(shí)沒(méi)有CPU分配給它。(2)第三種狀態(tài)不能運(yùn)行,即使CPU空閑也不行。2.2.2進(jìn)程的基本狀態(tài).412.2.2進(jìn)程的基本狀態(tài)中斷發(fā)生后操作系統(tǒng)最底層的工作步驟:(1)硬件壓入堆棧程序計(jì)數(shù)器、PSW等(2)硬件從中斷向量(在內(nèi)存低地址)裝入新的程序計(jì)數(shù)器(3)匯編語(yǔ)言過(guò)程保存寄存器值(4)匯編語(yǔ)言過(guò)程設(shè)置新的堆棧(5)C中斷服務(wù)例程運(yùn)行(典型地讀和緩沖輸入)(6)調(diào)度程序決定下一個(gè)將運(yùn)行的進(jìn)程(7)C過(guò)程返回至匯編代碼(8)匯編語(yǔ)言過(guò)程開(kāi)始運(yùn)行新的當(dāng)前進(jìn)程.42
進(jìn)程并非固定處于某一個(gè)狀態(tài),其狀態(tài)會(huì)隨著自身的推進(jìn)和外界條件的變化而發(fā)生變化。通常,可用一個(gè)進(jìn)程狀態(tài)變化圖來(lái)說(shuō)明系統(tǒng)中每個(gè)進(jìn)程可能具備的狀態(tài),及這些狀態(tài)發(fā)生變化的可能原因。2.2.2進(jìn)程的基本狀態(tài).43執(zhí)行阻塞就緒等待事件事件發(fā)生時(shí)間片用完進(jìn)程調(diào)度進(jìn)程狀態(tài)圖2.2.2進(jìn)程的基本狀態(tài).44
從圖中可以看出,處于就緒狀態(tài)的進(jìn)程,當(dāng)進(jìn)程調(diào)度程序?yàn)橹峙淞颂幚頇C(jī)后,該進(jìn)程便由就緒狀態(tài)變?yōu)閳?zhí)行狀態(tài);正在執(zhí)行的進(jìn)程因發(fā)生某事件而無(wú)法執(zhí)行時(shí),如進(jìn)程提出輸入輸出請(qǐng)求并等待輸入輸出操作完成,則進(jìn)程由執(zhí)行狀態(tài)變?yōu)樽枞麪顟B(tài);2.2.2進(jìn)程的基本狀態(tài).45
處于阻塞狀態(tài)的進(jìn)程,當(dāng)其等待的事件已經(jīng)發(fā)生時(shí),如輸入輸出操作完成,則進(jìn)程由阻塞狀態(tài)變?yōu)榫途w狀態(tài);正在執(zhí)行的進(jìn)程,如因時(shí)間片用完而被暫停執(zhí)行,該進(jìn)程便由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)。2.2.2進(jìn)程的基本狀態(tài).46二、新?tīng)顟B(tài)和終止?fàn)顟B(tài)有些系統(tǒng)中增加了兩種狀態(tài):1、新?tīng)顟B(tài)(new)(創(chuàng)建狀態(tài))進(jìn)程正在創(chuàng)建之中,還不能運(yùn)行,此時(shí)進(jìn)程所處的狀態(tài)為創(chuàng)建狀態(tài)。2、終止?fàn)顟B(tài)(terminated)(退出狀態(tài))進(jìn)程正常結(jié)束或異常結(jié)束,釋放了除進(jìn)程控制塊之外的其他資源,OS將它從就緒隊(duì)列中移出,但尚未撤消時(shí)的狀態(tài),此時(shí)進(jìn)程所處的狀態(tài)為退出狀態(tài)。2.2.2進(jìn)程的基本狀態(tài).47
引入新?tīng)顟B(tài)的原因,是OS在建立一個(gè)進(jìn)程時(shí),分兩步:
第一步,是為新登錄的用戶(hù)程序(分時(shí)系統(tǒng))創(chuàng)建進(jìn)程,并為它分配資源,此時(shí)進(jìn)程處于新?tīng)顟B(tài);
第二步,把新創(chuàng)建的進(jìn)程送入就緒隊(duì)列,由新?tīng)顟B(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)。 結(jié)束了的進(jìn)程,退出系統(tǒng)也分兩步:
第一步,是將該進(jìn)程從就緒隊(duì)列移出,成為一個(gè)不可能再運(yùn)行的進(jìn)程,相應(yīng)的進(jìn)程處于終止?fàn)顟B(tài),系統(tǒng)并不立即撤消它,將它暫時(shí)留在系統(tǒng)中,以便其它進(jìn)程去收集該進(jìn)程的有關(guān)信息。2.2.2進(jìn)程的基本狀態(tài).48
第二步,一旦其它進(jìn)程完成了對(duì)終止?fàn)顟B(tài)進(jìn)程的信息提取后,操作系統(tǒng)將刪除該進(jìn)程。 例如:記帳進(jìn)程了解該進(jìn)程用了多少CPU時(shí)間,使用了哪些類(lèi)型的資源,以便記帳。又如:統(tǒng)計(jì)進(jìn)程,可對(duì)該進(jìn)程的類(lèi)型、運(yùn)行情況和時(shí)間等信息進(jìn)行收集。2.2.2進(jìn)程的基本狀態(tài).49新進(jìn)程就緒執(zhí)行阻塞終止接納進(jìn)程調(diào)度中斷完成I/O完成或事件發(fā)生I/O請(qǐng)求或等待某事件進(jìn)程狀態(tài)變遷圖2.2.2進(jìn)程的基本狀態(tài).50三、進(jìn)程狀態(tài)的轉(zhuǎn)換進(jìn)程運(yùn)行期間,會(huì)不斷地從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài),它可多次處于就緒狀態(tài)和執(zhí)行狀態(tài),也可多次處于阻塞狀態(tài),但可能排在不同的阻塞隊(duì)列。進(jìn)程處于新?tīng)顟B(tài)和終止?fàn)顟B(tài)時(shí),都只有一次。2.2.2進(jìn)程的基本狀態(tài).512.2.2進(jìn)程的基本狀態(tài)1、新就緒狀態(tài)當(dāng)就緒隊(duì)列能再接納新的進(jìn)程時(shí),OS把處于新?tīng)顟B(tài)的進(jìn)程移入就緒隊(duì)列,由新?tīng)顟B(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)。2、就緒執(zhí)行狀態(tài)處于就緒狀態(tài)的進(jìn)程,調(diào)度程序?yàn)橹峙淞颂幚頇C(jī)后,該進(jìn)程由就緒狀態(tài)轉(zhuǎn)變?yōu)閳?zhí)行狀態(tài),正在執(zhí)行的進(jìn)程稱(chēng)為當(dāng)前進(jìn)程。.523、執(zhí)行阻塞狀態(tài)正在執(zhí)行的進(jìn)程因發(fā)生某事件而無(wú)法執(zhí)行。例:進(jìn)程請(qǐng)求訪(fǎng)問(wèn)臨界資源,而該資源正被其它進(jìn)程訪(fǎng)問(wèn),則請(qǐng)求該資源的進(jìn)程由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)樽枞麪顟B(tài)。4、執(zhí)行就緒狀態(tài)正在執(zhí)行的進(jìn)程,若因時(shí)間片用完而被暫停執(zhí)行,該進(jìn)程便由執(zhí)行轉(zhuǎn)變?yōu)榫途w狀態(tài)。如:在搶占調(diào)度方式中,一個(gè)優(yōu)先權(quán)高的進(jìn)程到來(lái)后,搶占一個(gè)正在執(zhí)行的優(yōu)先權(quán)低的進(jìn)程的處理機(jī),此時(shí),該低優(yōu)先權(quán)進(jìn)程由執(zhí)行轉(zhuǎn)換為就緒狀態(tài)。2.2.2進(jìn)程的基本狀態(tài).535、執(zhí)行終止?fàn)顟B(tài)當(dāng)進(jìn)程已經(jīng)完成或發(fā)生某事件,而被異常結(jié)束時(shí),將由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)榻K止?fàn)顟B(tài)。如:程序中出現(xiàn)地址越界,非法指令等錯(cuò)誤。2.2.2進(jìn)程的基本狀態(tài).542.2.3進(jìn)程的掛起狀態(tài)一、掛起狀態(tài)的引入在某些系統(tǒng)中,為了更好地管理和調(diào)度進(jìn)程及適應(yīng)系統(tǒng)的功能目標(biāo),引入了掛起狀態(tài)。引入掛起狀態(tài)的原因:.551、終端用戶(hù)的需要終端用戶(hù)在程序運(yùn)行期間,發(fā)現(xiàn)可疑時(shí),希望暫時(shí)使進(jìn)程靜止下來(lái),即進(jìn)程處于執(zhí)行狀態(tài),則暫停執(zhí)行。若進(jìn)程處于就緒狀態(tài),則暫不接受調(diào)度,以研究其執(zhí)行情況或?qū)Τ绦蜻M(jìn)行修改。這種靜止?fàn)顟B(tài)稱(chēng)為:掛起狀態(tài)。2.2.3進(jìn)程的掛起狀態(tài).562、父進(jìn)程的需求父進(jìn)程希望考察和修改子進(jìn)程,或當(dāng)要協(xié)調(diào)各子進(jìn)程間的活動(dòng)時(shí),要掛起自己的子進(jìn)程。3、操作系統(tǒng)的需要系統(tǒng)有時(shí)可能出故障或某些功能受到破壞。這時(shí)就需要暫時(shí)將系統(tǒng)中的進(jìn)程掛起,等系統(tǒng)把故障消除后,再把這些進(jìn)程恢復(fù)到原來(lái)狀態(tài)。2.2.3進(jìn)程的掛起狀態(tài).574、對(duì)換的需要在操作系統(tǒng)中引入了虛擬存儲(chǔ)管理技術(shù)后,需要區(qū)分進(jìn)程是駐留在內(nèi)存還是外存,此時(shí)可以用掛起表示駐留在外存。處于掛起狀態(tài)的進(jìn)程,即使該進(jìn)程所期待的事件發(fā)生,也不具備執(zhí)行條件,所以也不能進(jìn)入就緒隊(duì)列。5、負(fù)荷調(diào)節(jié)的需要系統(tǒng)中有時(shí)負(fù)荷過(guò)重(進(jìn)程數(shù)過(guò)多),資源數(shù)相對(duì)不足,從而造成系統(tǒng)效率下降。此時(shí)需要掛起一部分進(jìn)程以調(diào)整系統(tǒng)負(fù)荷,等系統(tǒng)中負(fù)荷減輕后再將被掛起進(jìn)程恢復(fù)運(yùn)行。2.2.3進(jìn)程的掛起狀態(tài).58二、進(jìn)程狀態(tài)的轉(zhuǎn)換引入掛起狀態(tài),又將增加從掛起狀態(tài)(靜止?fàn)顟B(tài))到非掛起狀態(tài)(活動(dòng)狀態(tài))的轉(zhuǎn)換。1、活動(dòng)就緒靜止就緒進(jìn)程處于未被掛起的就緒狀態(tài)時(shí),稱(chēng)為活動(dòng)就緒狀態(tài)。記為readya。
當(dāng)用掛起原語(yǔ)suspend掛起后,該進(jìn)程轉(zhuǎn)變?yōu)殪o止就緒狀態(tài)。記為readys,此時(shí)的進(jìn)程不再被調(diào)度執(zhí)行。2.2.3進(jìn)程的掛起狀態(tài).592、活動(dòng)阻塞靜止阻塞進(jìn)程處于未被掛起的阻塞狀態(tài)時(shí),稱(chēng)為活動(dòng)阻塞狀態(tài)。表示為blockeda。
當(dāng)用原語(yǔ)suspend原語(yǔ)掛起后,該進(jìn)程轉(zhuǎn)變?yōu)殪o止阻塞狀態(tài)。表示為blockeds。該進(jìn)程所期待的事件出現(xiàn)后,再?gòu)撵o止阻塞轉(zhuǎn)變?yōu)殪o止就緒。3、靜止就緒活動(dòng)就緒處于readys的進(jìn)程,用激活原語(yǔ)active激活后,轉(zhuǎn)變?yōu)閞eadya狀態(tài)。2.2.2進(jìn)程的基本狀態(tài).60 4、靜止阻塞活動(dòng)阻塞 處于bockeds的進(jìn)程,用激活原語(yǔ)active激活后,將轉(zhuǎn)變?yōu)閎lockeda狀態(tài)。2.2.2進(jìn)程的基本狀態(tài).61執(zhí)行活動(dòng)阻塞活動(dòng)就緒靜止就緒靜止阻塞請(qǐng)求I/OI/O完成掛起激活掛起激活掛起I/O完成調(diào)度時(shí)間片用完具有掛起狀態(tài)的進(jìn)程狀態(tài)圖2.2.3進(jìn)程的掛起狀態(tài).62UNIX系統(tǒng)中進(jìn)程的狀態(tài)執(zhí)行狀態(tài):內(nèi)核態(tài)和用戶(hù)態(tài)就緒狀態(tài):內(nèi)存中就緒和就緒且換出睡眠狀態(tài):64種原因,內(nèi)存睡眠和睡眠且換出創(chuàng)建僵死被搶占.63windows2000進(jìn)程沒(méi)有這些狀態(tài)線(xiàn)程具有這些狀態(tài),線(xiàn)程是運(yùn)行的單位:就緒、運(yùn)行和阻塞.64
所有進(jìn)程的PCB構(gòu)成一個(gè)結(jié)構(gòu)數(shù)組,稱(chēng)為進(jìn)程表(processtable)一、進(jìn)程控制塊的作用進(jìn)程控制塊是進(jìn)程實(shí)體的一部分,是OS中最重要的記錄型數(shù)據(jù)結(jié)構(gòu)。進(jìn)程控制塊記錄了OS所需的、用于描述進(jìn)程情況及控制進(jìn)程運(yùn)行所需的全部信息。2.2.4進(jìn)程控制塊PCB.65
它的作用,是使一個(gè)在多道程序環(huán)境下不能獨(dú)立運(yùn)行的程序(含數(shù)據(jù)),成為一個(gè)能獨(dú)立運(yùn)行的基本單位,一個(gè)能與其它進(jìn)程并發(fā)執(zhí)行的進(jìn)程?;蛘哒f(shuō),OS是根據(jù)PCB來(lái)對(duì)并發(fā)執(zhí)行的進(jìn)程,進(jìn)行控制和管理的。2.2.4進(jìn)程控制塊PCB.66
在進(jìn)程的整個(gè)生命期中,系統(tǒng)是通過(guò)其PCB對(duì)進(jìn)程進(jìn)行控制的,即系統(tǒng)是僅根據(jù)進(jìn)程的PCB而感知到該進(jìn)程的存在的。2.2.4進(jìn)程控制塊PCB.67二、進(jìn)程控制塊的信息1、進(jìn)程標(biāo)識(shí)符信息
唯一地標(biāo)識(shí)一個(gè)進(jìn)程有兩種:(1)外部標(biāo)識(shí)符(即進(jìn)程名)。(2)內(nèi)部標(biāo)識(shí)符。為方便系統(tǒng)使用而設(shè)置的。所有OS中,都為每一個(gè)進(jìn)程賦予一個(gè)唯一的整數(shù),作為內(nèi)部標(biāo)識(shí)符。一般是一個(gè)進(jìn)程的序號(hào)。
為描述進(jìn)程的家族關(guān)系,要設(shè)置父進(jìn)程標(biāo)識(shí)符及子進(jìn)程標(biāo)識(shí)符。還可設(shè)置用戶(hù)標(biāo)識(shí)符,指示他是擁有該進(jìn)程的用戶(hù)。2.2.4進(jìn)程控制塊PCB.682、處理機(jī)狀態(tài)信息處理機(jī)運(yùn)行時(shí),大多信息都放在寄存器中,處理機(jī)被中斷時(shí),這些信息都保存在被中斷進(jìn)程的PCB中,以便該進(jìn)程重新執(zhí)行時(shí),能從斷點(diǎn)繼續(xù)執(zhí)行。(1)通用寄存器。又稱(chēng)用戶(hù)可視寄存器,由用戶(hù)程序訪(fǎng)問(wèn),暫存信息用。一般有8~32個(gè)通用寄存器。(2)指令計(jì)數(shù)器。存放要訪(fǎng)問(wèn)的下一條指令的地址。2.2.4進(jìn)程控制塊PCB.69(3)程序狀態(tài)字PSW:含有狀態(tài)信息,如:條件碼,執(zhí)行方式,中斷屏蔽標(biāo)志等。(4)用戶(hù)棧指針。存放進(jìn)程和系統(tǒng)調(diào)用參數(shù)及調(diào)用地址,一個(gè)進(jìn)程有若干個(gè)與之相關(guān)的系統(tǒng)棧,棧指針指向棧頂。2.2.4進(jìn)程控制塊PCB.703、進(jìn)程調(diào)度和對(duì)換信息(1)進(jìn)程狀態(tài)。指明進(jìn)程的當(dāng)前狀態(tài),作為進(jìn)程調(diào)度和對(duì)換時(shí)的依據(jù)。(2)進(jìn)程優(yōu)先級(jí)。用于描述進(jìn)程使用處理機(jī)的優(yōu)先級(jí)別的一個(gè)整數(shù)。優(yōu)先級(jí)高的先獲得處理機(jī)。(3)進(jìn)程調(diào)度所需的其它信息。與采用的進(jìn)程調(diào)度算法有關(guān)。如:進(jìn)程已等待CPU的時(shí)間總和,進(jìn)程已執(zhí)行的時(shí)間總和。(4)事件。指進(jìn)程由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)樽枞麪顟B(tài)所等待發(fā)生的事件,即阻塞原因。2.2.4進(jìn)程控制塊PCB.714、進(jìn)程控制信息(1)程序和數(shù)據(jù)的地址。是指該進(jìn)程的程序和數(shù)據(jù)所在的內(nèi)存或外存地址,以便再調(diào)度到該進(jìn)程執(zhí)行時(shí),能從中找到其程序和數(shù)據(jù)。(2)進(jìn)程同步和通信機(jī)制。是指實(shí)現(xiàn)進(jìn)程同步和進(jìn)程通信時(shí)所需的機(jī)制,如:消息隊(duì)列指針,信號(hào)量等。它們?nèi)炕虿糠址旁赑CB中。(3)資源清單。一張列出了除CPU外的,進(jìn)程所需的全部資源及已經(jīng)分配到該進(jìn)程的資源清單。(4)鏈接指針。給出了本進(jìn)程所在隊(duì)列中的下一個(gè)進(jìn)程的PCB首地址。2.2.4進(jìn)程控制塊PCB.72進(jìn)程管理存儲(chǔ)管理文件管理寄存器程序計(jì)數(shù)器程序狀態(tài)字堆棧指針進(jìn)程狀態(tài)優(yōu)先級(jí)調(diào)度參數(shù)進(jìn)程ID父進(jìn)程進(jìn)程組信號(hào)進(jìn)程開(kāi)始時(shí)間使用的CPU時(shí)間子進(jìn)程的CPU時(shí)間下次報(bào)警時(shí)間正文段指針數(shù)據(jù)段指針堆棧段指針根目錄工作目錄文件描述符用戶(hù)ID組ID典型的PCB中的一些字段.73
在一個(gè)系統(tǒng)中,通常存在著許多進(jìn)程,它們有的處于就緒狀態(tài),有的處于阻塞狀態(tài),而且阻塞的原因各不相同,為了方便進(jìn)程的調(diào)度和管理,需要將各進(jìn)程的進(jìn)程控制塊用適當(dāng)?shù)姆椒ńM織起來(lái)。目前常用的組織方式有鏈接方式和索引方式兩種。2.2.4進(jìn)程控制塊PCB.74三、系統(tǒng)中多個(gè)PCB的組織方式1、鏈接方式鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)把具有相同狀態(tài)的PCB,用其中的鏈接字,鏈接成一個(gè)隊(duì)列。不同狀態(tài)對(duì)應(yīng)多個(gè)不同的隊(duì)列。形成了就緒隊(duì)列,若干個(gè)阻塞隊(duì)列和空白隊(duì)列等。就緒隊(duì)列按進(jìn)程優(yōu)先權(quán)的大小排列,優(yōu)先權(quán)高的排在前面。阻塞隊(duì)列按阻塞原因的不同,排成等待I/O操作完成隊(duì)列和等待分配內(nèi)存隊(duì)列。2.2.4進(jìn)程控制塊PCB.75執(zhí)行指針就緒隊(duì)列指針阻塞隊(duì)列指針空閑隊(duì)列指針1PCB90PCB89PCB77PCB6PCB58PCB40PCB33PCB24PCB1.762、索引方式系統(tǒng)根據(jù)所有進(jìn)程的狀態(tài),將同一狀態(tài)的進(jìn)程組織在一個(gè)索引表中,索引表的表項(xiàng)指向相應(yīng)的進(jìn)程控制塊在PCB表中的地址,不同狀態(tài)對(duì)應(yīng)不同的索引表。各索引表在內(nèi)存的首地址記錄在內(nèi)存中的專(zhuān)用單元中。2.2.4進(jìn)程控制塊PCB.77執(zhí)行指針就緒表指針阻塞表指針。。。PCB3地址PCB7地址PCB7PCB6PCB5PCB4PCB3PCB2PCB1就緒索引表阻塞索引表內(nèi)存中的專(zhuān)用單元.78進(jìn)程上下文1、用戶(hù)級(jí)上下文:由進(jìn)程的正文區(qū)、數(shù)據(jù)區(qū)、用戶(hù)棧區(qū)和共享存儲(chǔ)區(qū)組成,在編譯目標(biāo)文件時(shí)生成,占據(jù)進(jìn)程的虛擬地址空間。進(jìn)程的正文區(qū)是只讀的程序指令,數(shù)據(jù)區(qū)存放的是程序運(yùn)行時(shí)所需的數(shù)據(jù),用戶(hù)棧區(qū)用來(lái)完成處理器運(yùn)行時(shí)的過(guò)程調(diào)用和返回、參數(shù)傳遞等,共享內(nèi)存區(qū)是與其它進(jìn)程共享的部分。2、系統(tǒng)級(jí)上下文是由進(jìn)程控制塊、內(nèi)存管理信息、進(jìn)程環(huán)境塊和系統(tǒng)堆棧等組成的進(jìn)程地址空間。3、寄存器上下文由程序狀態(tài)寄存器、各類(lèi)控制寄存器、地址寄存器、通用寄存器和用戶(hù)棧指針等組成。進(jìn)程調(diào)度時(shí)切換的是進(jìn)程上下文,進(jìn)程運(yùn)行時(shí)是在進(jìn)程的上下文中執(zhí)行的。.792.3進(jìn)程控制2.3.1操作系統(tǒng)內(nèi)核一、支撐功能二、資源管理功能2.3.2進(jìn)程的創(chuàng)建一、進(jìn)程圖二、引起創(chuàng)建進(jìn)程的條件三、進(jìn)程的創(chuàng)建2.3.3進(jìn)程的終止一、引起進(jìn)程終止的事件二、進(jìn)程的終止過(guò)程2.3.4進(jìn)程的阻塞與喚醒一、引起進(jìn)程阻塞和喚醒的事件二、進(jìn)程阻塞過(guò)程三、進(jìn)程喚醒過(guò)程2.3.5進(jìn)程的掛起與激活一、進(jìn)程的掛起過(guò)程二、進(jìn)程的激活過(guò)程.80
進(jìn)程控制的職責(zé)是對(duì)系統(tǒng)中的所有進(jìn)程實(shí)施有效的管理,其功能包括進(jìn)程的創(chuàng)建、進(jìn)程的撤消、進(jìn)程的阻塞與喚醒等。這些功能一般是由操作系統(tǒng)的內(nèi)核來(lái)實(shí)現(xiàn)的。2.3進(jìn)程控制.81
進(jìn)程控制功能是通過(guò)執(zhí)行各種原語(yǔ)來(lái)實(shí)現(xiàn)的。原語(yǔ)是由若干個(gè)機(jī)器指令構(gòu)成的一段程序,用以完成特定功能,這段程序在執(zhí)行期間不可分割。這就是說(shuō),原語(yǔ)的執(zhí)行不能被中斷,所以原語(yǔ)操作具有原子性。2.3進(jìn)程控制.82
每個(gè)處理機(jī)都有自己的指令系統(tǒng),多用戶(hù)或多任務(wù)的多道程序設(shè)計(jì)環(huán)境中,它的指令系統(tǒng)中的指令必須區(qū)分成兩部分:2.3進(jìn)程控制.83
特權(quán)指令和非特權(quán)指令所謂特權(quán)指令是指在指令系統(tǒng)中那些只能由操作系統(tǒng)使用的指令。特權(quán)指令是不允許一般用戶(hù)使用的,因?yàn)檫@些指令(如啟動(dòng)某設(shè)備指令,設(shè)置時(shí)鐘指令,控制中斷屏蔽的某些指令,清主存指令,和建立存儲(chǔ)保護(hù)指令等)如果允許用戶(hù)隨便使用,就有可能使系統(tǒng)陷入混亂。2.3進(jìn)程控制.84
所以一個(gè)使用多道程序設(shè)計(jì)技術(shù)的微型計(jì)算機(jī)的指令系統(tǒng)必須要區(qū)分為特權(quán)指令和非特權(quán)指令。 用戶(hù)只能使用非特權(quán)指令,只有操作系統(tǒng)才能使用所有的指令。其指令系統(tǒng)沒(méi)有特權(quán)和非特權(quán)之分的微型計(jì)算機(jī)是難以在多道環(huán)境下運(yùn)行的。2.3進(jìn)程控制.85為了防止數(shù)據(jù)遭破壞,將處理機(jī)的執(zhí)行狀態(tài)分為系統(tǒng)態(tài)和用戶(hù)態(tài):(1)系統(tǒng)態(tài)。核心態(tài)或管態(tài)。是OS管理程序執(zhí)行時(shí)機(jī)器所處的狀態(tài)。它能執(zhí)行一切指令,訪(fǎng)問(wèn)所有寄存器和存儲(chǔ)區(qū)。(2)用戶(hù)態(tài)。目態(tài)。是用戶(hù)程序執(zhí)行時(shí)機(jī)器所處的狀態(tài)。只能執(zhí)行規(guī)定的指令,訪(fǎng)問(wèn)指定的寄存器和存儲(chǔ)區(qū)。2.3進(jìn)程控制.86
操作系統(tǒng)的內(nèi)核是基于硬件的第一次軟件擴(kuò)充。在現(xiàn)代操作系統(tǒng)設(shè)計(jì)中,往往把一些與硬件緊密相關(guān)的模塊或運(yùn)行頻率較高的模塊以及許多模塊所公用的一些基本操作安排在靠近硬件的軟件層次中,并使它們常駐內(nèi)存,以提高操作系統(tǒng)的運(yùn)行效率,通常把這部分稱(chēng)為操作系統(tǒng)的內(nèi)核。2.3.1操作系統(tǒng)內(nèi)核.87一、支撐功能它是提供給OS其它模塊所需的一些基本功能,以支撐這些模塊工作。有三種基本的支撐功能:1、中斷處理它是內(nèi)核最基本的功能。是整個(gè)OS賴(lài)以活動(dòng)的基礎(chǔ),OS的重要活動(dòng)者都最終依賴(lài)于中斷。如:系統(tǒng)調(diào)用,鍵盤(pán)命令的鍵入,進(jìn)程調(diào)度,設(shè)備驅(qū)動(dòng)及文件OS。2.3.1操作系統(tǒng)內(nèi)核.882、時(shí)鐘管理時(shí)鐘管理是內(nèi)核的另一基本功能。OS的許多活動(dòng)要需要它。如:在時(shí)間片輪轉(zhuǎn)調(diào)度中,每當(dāng)時(shí)間片用完時(shí),由時(shí)鐘管理產(chǎn)生一中斷信號(hào),促使調(diào)度程序重新調(diào)度。又如:實(shí)時(shí)系統(tǒng)中的截止時(shí)間控制、批處理系統(tǒng)中的最長(zhǎng)運(yùn)行時(shí)間的控制等。2.3.1操作系統(tǒng)內(nèi)核.893、原語(yǔ)操作內(nèi)核在執(zhí)行某些操作時(shí),是利用原語(yǔ)操作實(shí)現(xiàn)的。原語(yǔ)本身也是由若干個(gè)指令構(gòu)成的、用于完成一定功能的一個(gè)過(guò)程。與一般的過(guò)程的區(qū)別是:原語(yǔ)是原子操作。即:一個(gè)操作中的所有動(dòng)作,要么全做,要么全不做。即是一個(gè)不可分割的操作。2.3.1操作系統(tǒng)內(nèi)核.90
如:用于對(duì)鏈表進(jìn)行操作的原語(yǔ),用于實(shí)現(xiàn)進(jìn)程同步的原語(yǔ)。二、資源管理功能1、進(jìn)程管理進(jìn)程管理的功能都放在內(nèi)核中。因?yàn)檫@些功能模塊的運(yùn)行頻率較高?;蛘咭?yàn)樗鼈兪菫槎喾N功能模塊所需要。2.3.1操作系統(tǒng)內(nèi)核.91
如:進(jìn)程的調(diào)度與分派,進(jìn)程的創(chuàng)建和撤消。又如:用于實(shí)現(xiàn)進(jìn)程同步的原語(yǔ),常用的進(jìn)程通信原語(yǔ)。還要管理進(jìn)程控制塊PCB。2.3.1操作系統(tǒng)內(nèi)核.922、存儲(chǔ)器管理存儲(chǔ)器管理軟件通常放在內(nèi)核中。使存儲(chǔ)器管理有較高的運(yùn)行速度。如:用于內(nèi)存分配與回收的功能模塊,用于實(shí)現(xiàn)內(nèi)存保護(hù)和對(duì)換功能的模塊。2.3.1操作系統(tǒng)內(nèi)核.933、設(shè)備管理它與設(shè)備密切相關(guān),大部分都放在內(nèi)核中。如:各類(lèi)設(shè)備的驅(qū)動(dòng)程序,用于緩和CPU與I/O速度不匹配矛盾的緩沖管理,用于實(shí)現(xiàn)設(shè)備分配和設(shè)備獨(dú)立性的功能模塊。2.3.1操作系統(tǒng)內(nèi)核.94一、進(jìn)程圖進(jìn)程的創(chuàng)建是用進(jìn)程創(chuàng)建原語(yǔ)實(shí)現(xiàn)的,一個(gè)程序可創(chuàng)建多個(gè)進(jìn)程,一個(gè)進(jìn)程也可創(chuàng)建它自己的子進(jìn)程,由此,形成了具有相互聯(lián)系的進(jìn)程家族??捎眠M(jìn)程圖描述進(jìn)程家族關(guān)系。如圖示:2.3.2進(jìn)程的創(chuàng)建.95ABEDIJKCFHGLM祖先.96
圖中結(jié)點(diǎn)代表進(jìn)程,樹(shù)的根結(jié)點(diǎn)是進(jìn)程家族的祖先,進(jìn)程Pi人創(chuàng)建了進(jìn)程Pj后,稱(chēng)Pi是Pj的父進(jìn)程,Pj是Pi的子進(jìn)程。用一條由Pi指向進(jìn)程Pj的有向邊描述父子關(guān)系。創(chuàng)建父進(jìn)程的進(jìn)程稱(chēng)為祖父進(jìn)程。子進(jìn)程可以繼承父進(jìn)程所擁有的資源。如:繼承父進(jìn)程打開(kāi)的文件,繼承父進(jìn)程所分配的緩沖區(qū)。2.3.2進(jìn)程的創(chuàng)建.97子進(jìn)程被撤消時(shí),從父進(jìn)程獲得的資源要?dú)w還父進(jìn)程。撤消父進(jìn)程時(shí),要同時(shí)撤消其所有的子進(jìn)程。
PCB中要設(shè)置家族關(guān)系表項(xiàng),標(biāo)明自己的父進(jìn)程及所有的子進(jìn)程。2.3.2進(jìn)程的創(chuàng)建.98二、引起創(chuàng)建進(jìn)程的事件多道程序環(huán)境中,只有作為進(jìn)程時(shí)才能在系統(tǒng)中運(yùn)行,所以,要運(yùn)行一個(gè)程序必須為之創(chuàng)建進(jìn)程。導(dǎo)致一個(gè)進(jìn)程去創(chuàng)建另一個(gè)進(jìn)程的典型事件:1、用戶(hù)登錄(系統(tǒng)初始化)分時(shí)系統(tǒng)中,用戶(hù)在終端鍵入登錄命令,若合法,系統(tǒng)為之建立一進(jìn)程,插入就緒隊(duì)列。2.3.2進(jìn)程的創(chuàng)建.99系統(tǒng)啟動(dòng)時(shí),會(huì)創(chuàng)建若干進(jìn)程:前臺(tái)進(jìn)程和后臺(tái)進(jìn)程(守護(hù)進(jìn)程daemon)Unix中用ps列出正在運(yùn)行的進(jìn)程Windows95/98/me中Ctrl+Alt+DelWindows2000用任務(wù)管理器。2.3.2進(jìn)程的創(chuàng)建.1002、作業(yè)調(diào)度(一個(gè)批處理作業(yè)的初始化)批處理系統(tǒng)中,作業(yè)調(diào)度程序按一定的算法調(diào)度到某個(gè)作業(yè)時(shí),將該作業(yè)裝入內(nèi)存,為之分配資源,并創(chuàng)建進(jìn)程,插入就緒隊(duì)列。2.3.2進(jìn)程的創(chuàng)建.1013、提供服務(wù)運(yùn)行中的程序提出某種請(qǐng)求后,系統(tǒng)創(chuàng)建一個(gè)進(jìn)程提供所需的服務(wù)。如:程序進(jìn)行文件打印時(shí),OS為之創(chuàng)建一個(gè)打印進(jìn)程。打印進(jìn)程與該用戶(hù)進(jìn)程并發(fā)執(zhí)行,且還便于計(jì)算出為完成打印任務(wù)所需的時(shí)間。2.3.2進(jìn)程的創(chuàng)建.1024、應(yīng)用請(qǐng)求
前述三種情況,是由系統(tǒng)內(nèi)核來(lái)創(chuàng)建進(jìn)程的。第四類(lèi)事件是基于應(yīng)用進(jìn)程的需要,由自己創(chuàng)建一個(gè)新進(jìn)程,以使新進(jìn)程以并發(fā)運(yùn)行方式來(lái)完成特定任務(wù)。如:應(yīng)用程序需要不斷從終端讀入數(shù)據(jù),又要對(duì)輸入數(shù)據(jù)進(jìn)行相應(yīng)的處理,然后,將處理結(jié)果以表格形式顯示。該應(yīng)用進(jìn)程為使這幾個(gè)操作能并發(fā)執(zhí)行,以加速任務(wù)的完成,分別建立鍵盤(pán)輸入進(jìn)程和表格輸出進(jìn)程。2.3.2進(jìn)程的創(chuàng)建.103三、進(jìn)程的創(chuàng)建
OS發(fā)現(xiàn)創(chuàng)建新進(jìn)程的事件后,調(diào)用進(jìn)程創(chuàng)建原語(yǔ)Creat(),創(chuàng)建新進(jìn)程,創(chuàng)建原語(yǔ)的功能是為被創(chuàng)建進(jìn)程形成一個(gè)PCB,并填入相應(yīng)的初始值,其過(guò)程:1、申請(qǐng)空白PCB
為新進(jìn)程分配唯一的數(shù)字標(biāo)識(shí)符,并從PCB集合中索取一空白PCB。2.3.2進(jìn)程的創(chuàng)建.1042、為新進(jìn)程分配資源為新進(jìn)程的程序和數(shù)據(jù),及用戶(hù)棧分配必要的內(nèi)存空間。大小是預(yù)知的:批處理作業(yè),大小在用戶(hù)提出申請(qǐng)時(shí)提供。交互作業(yè),由系統(tǒng)分配一定的空間,用戶(hù)不用給所需大小。新進(jìn)程要共享已占空間時(shí),要建立相應(yīng)的鏈接。2.3.2進(jìn)程的創(chuàng)建.1053、初始化PCB包括:(1)初始化標(biāo)識(shí)符信息。將系統(tǒng)分配的標(biāo)識(shí)符、父進(jìn)程標(biāo)識(shí)符填入新PCB中。(2)初始化處理機(jī)狀態(tài)信息。使程序計(jì)數(shù)器指向程序的入口地址,使棧指針指向棧頂。(3)初始化處理機(jī)控制信息。將進(jìn)程的狀態(tài)設(shè)置為就緒狀態(tài)或靜止就緒狀態(tài)。設(shè)置它為最低優(yōu)先級(jí)。2.3.2進(jìn)程的創(chuàng)建.1064、將新進(jìn)程插入就緒隊(duì)列若進(jìn)程就緒隊(duì)列能接納新進(jìn)程,將新進(jìn)程插入就緒隊(duì)列。2.3.2進(jìn)程的創(chuàng)建.107Unix中,創(chuàng)建進(jìn)程的進(jìn)程:fork,創(chuàng)建一個(gè)和調(diào)用進(jìn)程相同的副本,擁有相同的存儲(chǔ)映象,子進(jìn)程再執(zhí)行execute系統(tǒng)調(diào)用,修改存儲(chǔ)映象運(yùn)行一個(gè)新的程序Windows中,一個(gè)Win32函數(shù)調(diào)用CreateProcess創(chuàng)建一個(gè)新的進(jìn)程并運(yùn)行一個(gè)程序。2.3.2進(jìn)程的創(chuàng)建.108一、引起進(jìn)程終止的事件1、正常結(jié)束(自愿的)用一個(gè)指示,代表進(jìn)程已經(jīng)運(yùn)行完成,這屬正常結(jié)束,每個(gè)計(jì)算機(jī)系統(tǒng)都有這樣的指令。如:批處理系統(tǒng)中,在程序的最后安排一條Holt指令或終止系統(tǒng)調(diào)用。運(yùn)行到Holt時(shí),產(chǎn)生一個(gè)中斷,通知OS一個(gè)進(jìn)程已經(jīng)完成。分時(shí)系統(tǒng)中,用LogsOff表示進(jìn)程運(yùn)行完畢,此時(shí)也產(chǎn)生一個(gè)中斷,通知OS進(jìn)程已運(yùn)行完畢。2.3.3進(jìn)程的終止.1092、異常結(jié)束
出現(xiàn)了異常事件(非自愿的)進(jìn)程運(yùn)行期間,由于出現(xiàn)某些錯(cuò)誤或故障而使進(jìn)程終止。(1)越界錯(cuò)誤。指程序所訪(fǎng)問(wèn)的存儲(chǔ)區(qū)已越出該進(jìn)程的區(qū)域。(2)保護(hù)錯(cuò)。進(jìn)程試圖訪(fǎng)問(wèn)一個(gè)未被允許訪(fǎng)問(wèn)的資源或文件,或以不適當(dāng)?shù)姆绞竭M(jìn)行訪(fǎng)問(wèn)。如:去寫(xiě)一個(gè)只讀文件。(3)特權(quán)指令錯(cuò)。用戶(hù)進(jìn)程執(zhí)行一條只允許OS執(zhí)行的命令時(shí)。(4)非法指令錯(cuò)。進(jìn)程執(zhí)行一條不存在的指令時(shí)。原因是程序錯(cuò)誤地轉(zhuǎn)移到數(shù)據(jù)區(qū),把數(shù)據(jù)當(dāng)成了指令。2.3.3進(jìn)程的終止.110(5)運(yùn)行超時(shí)。進(jìn)程的執(zhí)行時(shí)間超過(guò)了指定的最大值。(6)等待超時(shí)。進(jìn)程等待某事件的時(shí)間,超過(guò)了規(guī)定的最大值。(7)算術(shù)運(yùn)算錯(cuò)。進(jìn)程執(zhí)行了一個(gè)被禁止的計(jì)算。如:0除。(8)I/O故障。I/O過(guò)程中發(fā)生了錯(cuò)誤。2.3.3進(jìn)程的終止.1112.3.3進(jìn)程的終止3、外界干預(yù)(非自愿的)進(jìn)程運(yùn)行期間,應(yīng)外界的請(qǐng)求而終止運(yùn)行。干預(yù):(1)操作員或操作系統(tǒng)干預(yù)。如:發(fā)生了死鎖,由操作員或OS終止該進(jìn)程。(2)父進(jìn)程請(qǐng)求。父進(jìn)程具有終止自己的任何子孫進(jìn)程的權(quán)利。父進(jìn)程提出請(qǐng)求時(shí),系統(tǒng)終止該進(jìn)程。(3)父進(jìn)程終止。父進(jìn)程終止時(shí),OS將其所有子孫進(jìn)程終止。4、出錯(cuò)退出(自愿的).112Unix中終止進(jìn)程的系統(tǒng)調(diào)用:exit,殺死進(jìn)程的系統(tǒng)調(diào)用:killWindows中終止進(jìn)程的系統(tǒng)調(diào)用:ExitProcess,殺死進(jìn)程的系統(tǒng)調(diào)用:TerminateProcss.2.3.3進(jìn)程的終止.113二、進(jìn)程的終止過(guò)程當(dāng)發(fā)生了要求終止進(jìn)程的請(qǐng)求后,OS調(diào)用進(jìn)程終止原語(yǔ),按如下步驟終止指定進(jìn)程。2.3.3進(jìn)程的終止.114(1)根據(jù)被終止進(jìn)程的標(biāo)識(shí)符,從PCB隊(duì)列中檢索出該進(jìn)程的PCB,讀出該進(jìn)程的狀態(tài)。(2)若被終止進(jìn)程正處于執(zhí)行狀態(tài),立即中止該進(jìn)程,并設(shè)置調(diào)度標(biāo)志為真,指示該進(jìn)程被終止后應(yīng)重新進(jìn)行調(diào)度,選擇一新進(jìn)程,把處理機(jī)分配給它。2.3.3進(jìn)程的終止.115(3)進(jìn)程有子孫進(jìn)程時(shí),將其所有子孫進(jìn)程予以終止,以防成為不可控的。(4)該進(jìn)程所擁有的資源,或歸還父進(jìn)程,或歸還系統(tǒng)。(5)被終止進(jìn)程從所在隊(duì)列中移出,等待其它程序來(lái)搜集信息。2.3.3進(jìn)程的終止.116Unix和Windows中殺死父進(jìn)程時(shí)不一定同時(shí)殺死其所有創(chuàng)建的子進(jìn)程。Unix中所有的子進(jìn)程會(huì)形成一棵層次的樹(shù)形結(jié)構(gòu)。Windows中不存在任何進(jìn)程層次結(jié)構(gòu)的概念,所有的進(jìn)程都是地位相同的。2.3.3進(jìn)程的終止注意:.117一、引起進(jìn)程阻塞和喚醒的事件
1、請(qǐng)求系統(tǒng)服務(wù)正在執(zhí)行的進(jìn)程請(qǐng)求OS的服務(wù)以繼續(xù)執(zhí)行時(shí),若OS不能立即滿(mǎn)足要求,該進(jìn)程轉(zhuǎn)變?yōu)樽枞麪顟B(tài)來(lái)等待。如:進(jìn)程請(qǐng)求打印機(jī),而系統(tǒng)將打印機(jī)分配給了其它進(jìn)程而不能滿(mǎn)足請(qǐng)求進(jìn)程,請(qǐng)求者被阻塞,僅在其它進(jìn)程釋放打印機(jī)后,再由釋放者將請(qǐng)求者喚醒。2.3.4進(jìn)程的阻塞與喚醒.1182、啟動(dòng)某種操作進(jìn)程啟動(dòng)某種操作后,而該進(jìn)程必須在該操作完成后才能繼續(xù)執(zhí)行,則先使該進(jìn)程阻塞。如:進(jìn)程啟動(dòng)了某個(gè)I/O設(shè)備,若只有在完成了指定的I/O任務(wù)后,進(jìn)程才能繼續(xù)執(zhí)行,則進(jìn)程在啟動(dòng)了該I/O操作后,該進(jìn)程自動(dòng)進(jìn)入了阻塞狀態(tài)去等待。
I/O操作完成后,由中斷處理程序或中斷進(jìn)程將該進(jìn)程喚醒。2.3.4進(jìn)程的阻塞與喚醒.119
3、新數(shù)據(jù)尚未到達(dá)對(duì)相互合作的進(jìn)程,若一個(gè)進(jìn)程需要先獲得另一個(gè)進(jìn)程提供的數(shù)據(jù)后,才能繼續(xù)運(yùn)行,則在所需數(shù)據(jù)到達(dá)前,該進(jìn)程只有阻塞。2.3.4進(jìn)程的阻塞與喚醒.1204、無(wú)新工作可做系統(tǒng)中有一些系統(tǒng)進(jìn)程,當(dāng)它完成任務(wù)后,便把自己阻塞起來(lái)等待新任務(wù)的到來(lái)。如:系統(tǒng)中的發(fā)送進(jìn)程,其工作是發(fā)送數(shù)據(jù),若數(shù)據(jù)已發(fā)送完成而又無(wú)新的發(fā)送請(qǐng)求時(shí),進(jìn)程自己進(jìn)入阻塞狀態(tài),僅當(dāng)有進(jìn)程提出新的發(fā)送請(qǐng)求時(shí),發(fā)送進(jìn)程被喚醒。2.3.4進(jìn)程的阻塞與喚醒.121二、進(jìn)程阻塞過(guò)程進(jìn)程的阻塞是進(jìn)程自身的一種主動(dòng)行為。正在執(zhí)行的進(jìn)程,出現(xiàn)某個(gè)事件,無(wú)法繼續(xù)執(zhí)行時(shí),進(jìn)程調(diào)用阻塞原語(yǔ)block把自己阻塞。此時(shí),先立即停止執(zhí)行,把進(jìn)程控制塊中的現(xiàn)行狀態(tài)由執(zhí)行改為阻塞,并插入到阻塞隊(duì)列。最后,轉(zhuǎn)調(diào)度程序進(jìn)行重新調(diào)度,將處理機(jī)分配給另一就緒進(jìn)程,并進(jìn)行切換。
即先保留被阻塞進(jìn)程的處理機(jī)狀態(tài)到PCB,再按新進(jìn)程的PCB中的處理機(jī)狀態(tài)設(shè)置CPU環(huán)境。2.3.4進(jìn)程的阻塞與喚醒.122三、進(jìn)程喚醒過(guò)程當(dāng)被阻塞進(jìn)程所期待的事件出現(xiàn)時(shí),另一個(gè)發(fā)現(xiàn)者進(jìn)程(與被喚醒進(jìn)程是合作的并發(fā)進(jìn)程)調(diào)用喚醒原語(yǔ)wakeup(),將等待該事件的進(jìn)程喚醒。喚醒原語(yǔ)執(zhí)行的過(guò)程:首先把被阻塞的進(jìn)程從等待該事件的隊(duì)列中移出,將其PCB中的現(xiàn)行狀態(tài),由阻塞改為就緒,再將其插入到就緒隊(duì)列中。2.3.4進(jìn)程的阻塞與喚醒.123
注:block和wakeup是相反的原語(yǔ)。若在一個(gè)進(jìn)程調(diào)用了阻塞原語(yǔ),則在與之相關(guān)的進(jìn)程中,必須調(diào)用喚醒原語(yǔ)。2.3.4進(jìn)程的阻塞與喚醒.1242.3.5進(jìn)程的掛起與激活一、進(jìn)程的掛起過(guò)程當(dāng)出現(xiàn)了引起進(jìn)程掛起的事件時(shí),系統(tǒng)利用掛起原語(yǔ)suspend(),將指定進(jìn)程或處于阻塞狀態(tài)的進(jìn)程掛起。.125
執(zhí)行過(guò)程:檢查被掛起的進(jìn)程的狀態(tài),若正處于活動(dòng)就緒狀態(tài),將其改為靜止就緒,若處于活動(dòng)阻塞狀態(tài),將其改為靜止阻塞。把該進(jìn)程的PCB復(fù)制到指定的內(nèi)存區(qū)域,最后,若被掛起的進(jìn)程正在執(zhí)行,則轉(zhuǎn)調(diào)度程序重新調(diào)度,以將處理機(jī)分配出去。二、進(jìn)程的激活過(guò)程當(dāng)發(fā)生激活進(jìn)程的事件時(shí),系統(tǒng)用激活原語(yǔ)active(),將指定進(jìn)程激活。2.3.5進(jìn)程的掛起與激活.126
激活過(guò)程:先將進(jìn)程從外存調(diào)入內(nèi)存,檢查該進(jìn)程的現(xiàn)行狀態(tài),若是靜止就緒,將其改為活動(dòng)就緒,若為靜止阻塞,則改為活動(dòng)阻塞。若采用的是搶占調(diào)度策略,每當(dāng)有新進(jìn)程進(jìn)入就緒隊(duì)列時(shí),要檢查是否要進(jìn)行重新調(diào)度(即重新分配處理機(jī)),即由調(diào)度程序?qū)⒈患せ钸M(jìn)程與當(dāng)前進(jìn)程進(jìn)行優(yōu)先級(jí)的比較,若被激活進(jìn)程優(yōu)先級(jí)低,不重新調(diào)度,否則,立即剝奪當(dāng)前進(jìn)程的執(zhí)行,把處理機(jī)分配給剛被激活的進(jìn)程。2.3.5進(jìn)程的掛起與激活.1272.4線(xiàn)程2.4.1線(xiàn)程的基本概念2.4.2線(xiàn)程間的同步和通信2.4.3線(xiàn)程的實(shí)現(xiàn)方式2.4.4線(xiàn)程的實(shí)現(xiàn).128
上個(gè)世紀(jì)60年代以后,OS都是以進(jìn)程作為能獨(dú)立運(yùn)行的基本單位。到了80年代中期,為提高系統(tǒng)內(nèi)程序并發(fā)執(zhí)行的程度,進(jìn)一步提高系統(tǒng)的吞吐量。人們又提出了比進(jìn)程更小的能獨(dú)立運(yùn)行的單位--線(xiàn)程。現(xiàn)已廣泛應(yīng)用。2.4線(xiàn)程.129
OS中引入進(jìn)程的目的,是為了使多個(gè)程序并發(fā)執(zhí)行,發(fā)揮資源的利用率和提高系統(tǒng)的吞吐量。而引入線(xiàn)程的目的,是為了減少程序并發(fā)執(zhí)行時(shí)所付出的時(shí)空開(kāi)銷(xiāo),使OS具有更好的并發(fā)性。進(jìn)程具有的兩個(gè)基本屬性:(1)進(jìn)程是一個(gè)可擁有資源的獨(dú)立單位(2)進(jìn)程同時(shí)又是一個(gè)可以獨(dú)立調(diào)度和分派的基本單位這是進(jìn)程并發(fā)執(zhí)行的基礎(chǔ)。2.4.1線(xiàn)程的基本概念.130
為使程序并發(fā)執(zhí)行,系統(tǒng)還須進(jìn)行如下的操作:(1)創(chuàng)建進(jìn)程。創(chuàng)建進(jìn)程時(shí),須為之分配其所需的,除處理機(jī)外的所有資源:內(nèi)存空間、I/O設(shè)備及建立相應(yīng)的PCB。(2)撤消進(jìn)程。撤消進(jìn)程時(shí),先對(duì)資源進(jìn)行回收,然后再撤消PCB。(3)進(jìn)程切換。對(duì)進(jìn)程進(jìn)行切換時(shí),要保留當(dāng)前進(jìn)程的CPU環(huán)境和設(shè)置新選中的進(jìn)程的CPU環(huán)境,要花費(fèi)處理機(jī)的時(shí)間。2.4.1線(xiàn)程的基本概念.131
總之,進(jìn)程是一個(gè)資源擁有者,所以在進(jìn)程的創(chuàng)建、撤消和切換中,系統(tǒng)要為之付出較大的時(shí)空開(kāi)銷(xiāo),所以,系統(tǒng)中設(shè)置的進(jìn)程數(shù)目不宜過(guò)多,進(jìn)程切換的頻率不宜過(guò)高,限制了并發(fā)程度的提高。2.4.1線(xiàn)程的基本概念.132
如何使多個(gè)程序更好地并發(fā)執(zhí)行,減少系統(tǒng)的開(kāi)銷(xiāo)。人們想到可否將進(jìn)程的兩個(gè)屬性分開(kāi),即對(duì)作為調(diào)度和分派的單位,不同時(shí)作為獨(dú)立分配資源的單位,使之輕裝運(yùn)行,而對(duì)擁有資源的基本單位,又不頻繁進(jìn)行切換。于是,產(chǎn)生了線(xiàn)程。讓線(xiàn)程去完成第二個(gè)基本屬性的任務(wù),而進(jìn)程只完成第一個(gè)基本屬性的任務(wù)。
線(xiàn)程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位。2.4.1線(xiàn)程的基本概念.133
線(xiàn)程不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中不可少的資源(程序計(jì)數(shù)器、一組寄存器和棧),但可與同屬一個(gè)進(jìn)程的其它線(xiàn)程共享進(jìn)程所擁有的全部資源。一個(gè)線(xiàn)程可創(chuàng)建和撤消另一個(gè)線(xiàn)程,同一個(gè)進(jìn)程中的線(xiàn)程可并發(fā)執(zhí)行。線(xiàn)程間的相互制約,使線(xiàn)程運(yùn)行中出現(xiàn)間斷性。線(xiàn)程也有就緒、阻塞和執(zhí)行三種基本狀態(tài)。2.4.1線(xiàn)程的引入.134
多線(xiàn)程是指一個(gè)進(jìn)程中有多個(gè)線(xiàn)程,這些線(xiàn)程共享該進(jìn)程資源。這些線(xiàn)程駐留在相同的地址空間中,共享數(shù)據(jù)和文件。如果一個(gè)線(xiàn)程修改了一個(gè)數(shù)據(jù)項(xiàng),其他線(xiàn)程可以了解和使用此結(jié)果數(shù)據(jù)。一個(gè)線(xiàn)程打開(kāi)并讀一個(gè)文件時(shí),同一進(jìn)程中的其他線(xiàn)程也可以同時(shí)讀此文件。2.4.1線(xiàn)程的基本概念.135
線(xiàn)程可定義為:進(jìn)程內(nèi)的一個(gè)執(zhí)行單元或進(jìn)程內(nèi)的一個(gè)可調(diào)度實(shí)體。2.4.1線(xiàn)程的基本概念.136
線(xiàn)程具有進(jìn)程所具有的特征,又稱(chēng)為輕型進(jìn)程或進(jìn)程元。傳統(tǒng)的進(jìn)程稱(chēng)為重型進(jìn)程,相當(dāng)于只有一個(gè)線(xiàn)程的任務(wù)。一般一個(gè)進(jìn)程有若干個(gè)線(xiàn)程,兩者間的區(qū)別:1、調(diào)度傳統(tǒng)的OS中,擁有資源的基本單位和獨(dú)立調(diào)度、分派的基本單位都是進(jìn)程。線(xiàn)程和進(jìn)程的比較.137
引入線(xiàn)程的OS中,線(xiàn)程作為調(diào)度和分派的基本單位,而進(jìn)程作為資源擁有的基本單位。把傳統(tǒng)進(jìn)程的兩個(gè)屬性分開(kāi)了,線(xiàn)程輕裝運(yùn)行,同一進(jìn)程中,線(xiàn)程的切換不會(huì)引起進(jìn)程切換,由一個(gè)進(jìn)程中的線(xiàn)程切換到另一個(gè)進(jìn)程中的線(xiàn)程時(shí),會(huì)引起進(jìn)程切換。線(xiàn)程和進(jìn)程的比較.1382、并發(fā)性引入線(xiàn)程的OS中,進(jìn)程之間可并發(fā)執(zhí)行,一個(gè)進(jìn)程的多個(gè)線(xiàn)程之間,也可并發(fā)執(zhí)行,具有更好的并發(fā)性,能更有效地使用系統(tǒng)資源和提高系統(tǒng)吞吐量。線(xiàn)程和進(jìn)程的比較.1393、擁有資源在傳統(tǒng)的OS中或設(shè)有線(xiàn)程的OS中,進(jìn)程都是擁有資源的一個(gè)獨(dú)立單位,它可擁有自己的資源,線(xiàn)程不能擁有資源,但它可訪(fǎng)問(wèn)其隸屬進(jìn)程的資源,即,一個(gè)進(jìn)程的代碼段、數(shù)據(jù)段及系統(tǒng)資源(打開(kāi)的文件、I/O設(shè)備等),可供同一進(jìn)程的其它線(xiàn)程共享。線(xiàn)程和進(jìn)程的比較.1404、系統(tǒng)開(kāi)銷(xiāo)
OS在創(chuàng)建或撤消進(jìn)程時(shí),系統(tǒng)都要為之分配或回收資源,所付出的開(kāi)銷(xiāo)遠(yuǎn)大于創(chuàng)建或撤消線(xiàn)程的開(kāi)銷(xiāo)。進(jìn)行進(jìn)程切換時(shí),涉及到整個(gè)當(dāng)前進(jìn)程CPU環(huán)境的保存和新被調(diào)度運(yùn)行的進(jìn)程的CPU環(huán)境的設(shè)置。線(xiàn)程和進(jìn)程的比較.141
線(xiàn)程切換只須保存和設(shè)置少量寄存器的內(nèi)容,不涉及存儲(chǔ)器管理方面的操作,其開(kāi)銷(xiāo)遠(yuǎn)少于進(jìn)程切換的開(kāi)銷(xiāo)。
同一進(jìn)程中的多個(gè)線(xiàn)程具有相同的地址空間,它們之間的同步和通信的實(shí)現(xiàn),也比較容易。線(xiàn)程和進(jìn)程的比較.142
在多線(xiàn)程O(píng)S中,通常一個(gè)進(jìn)程中包括多個(gè)線(xiàn)程,每個(gè)線(xiàn)程都是作為使用CPU的基本單位,是花費(fèi)最小開(kāi)銷(xiāo)的實(shí)體。線(xiàn)程具有下述屬性。
(1)輕型實(shí)體。線(xiàn)程中的實(shí)體基本上不擁有系統(tǒng)資源,只是有一點(diǎn)必不可少的、能保證其獨(dú)立運(yùn)行的資源,比如,在每個(gè)線(xiàn)程中都應(yīng)具有一個(gè)用于控制線(xiàn)程運(yùn)行的線(xiàn)程控制塊TCB,用于指示被執(zhí)行指令序列的程序計(jì)數(shù)器,保留局部變量、少數(shù)狀態(tài)參數(shù)和返回地址等的一組寄存器和堆棧。3.線(xiàn)程的屬性.143
(2)獨(dú)立調(diào)度和分派的基本單位。在多線(xiàn)程O(píng)S中,線(xiàn)程是能獨(dú)立運(yùn)行的基本單位,因而也是獨(dú)立調(diào)度和分派的基本單位。由于線(xiàn)程很“輕”,故線(xiàn)程的切換非常迅速且開(kāi)銷(xiāo)小。
(3)可并發(fā)執(zhí)行。在一個(gè)進(jìn)程中的多個(gè)線(xiàn)程之間可以并發(fā)執(zhí)行,甚至允許在一個(gè)進(jìn)程中的所有線(xiàn)程都能并發(fā)執(zhí)行;同樣,不同進(jìn)程中的線(xiàn)程也能并發(fā)執(zhí)行。3.線(xiàn)程的屬性.144
(4)共享進(jìn)程資源。在同一進(jìn)程中的各個(gè)線(xiàn)程都可以共享該進(jìn)程所擁有的資源,表現(xiàn)在所有線(xiàn)程都具有相同的地址空間(進(jìn)程的地址空間)。這意味著線(xiàn)程可以訪(fǎng)問(wèn)該地址空間中的每一個(gè)虛地址;此外,還可以訪(fǎng)問(wèn)進(jìn)程所擁有的已打開(kāi)文件、定時(shí)器、信號(hào)量機(jī)構(gòu)等。
3.線(xiàn)程的屬性.145
(1)狀態(tài)參數(shù):OS中的每一個(gè)線(xiàn)程都可以利用線(xiàn)程標(biāo)識(shí)符和一組狀態(tài)參數(shù)進(jìn)行描述。狀態(tài)參數(shù)有:①寄存器狀態(tài),它包括程序計(jì)數(shù)器PC和堆棧指針中的內(nèi)容;②堆棧,在堆棧中通常保存有局部變量和返回地址;③線(xiàn)程運(yùn)行狀態(tài),用于描述線(xiàn)程正處于何種運(yùn)行狀態(tài);④優(yōu)先級(jí),描述線(xiàn)程執(zhí)行的優(yōu)先程度;⑤線(xiàn)程專(zhuān)有存儲(chǔ)器,用于保存線(xiàn)程自己的局部變量拷貝;⑥信號(hào)屏蔽,即對(duì)某些信號(hào)加以屏蔽。
4.線(xiàn)程的狀態(tài).146
(2)線(xiàn)程運(yùn)行狀態(tài)。如同傳統(tǒng)的進(jìn)程一樣,在各線(xiàn)程之間也存在著共享資源和相互合作的制約關(guān)系,致使線(xiàn)程在運(yùn)行時(shí)也具有間斷性。線(xiàn)程在運(yùn)行時(shí)的三種基本狀態(tài):①執(zhí)行狀態(tài),表示線(xiàn)程正獲得處理機(jī)而運(yùn)行;②就緒狀態(tài),指線(xiàn)程已具備了各種執(zhí)行條件,一旦獲得CPU便可執(zhí)行的狀態(tài);③阻塞狀態(tài),指線(xiàn)程在執(zhí)行中因某事件而受阻,處于暫停執(zhí)行時(shí)的狀態(tài)。4.線(xiàn)程的狀態(tài).147
在多線(xiàn)程O(píng)S環(huán)境下,應(yīng)用程序在啟動(dòng)時(shí),通常僅有一個(gè)線(xiàn)程在執(zhí)行,該線(xiàn)程被人們稱(chēng)為“初始化線(xiàn)程”。它可根據(jù)需要再去創(chuàng)建若干個(gè)線(xiàn)程。在創(chuàng)建新線(xiàn)程時(shí),需要利用一個(gè)線(xiàn)程創(chuàng)建函數(shù)(或系統(tǒng)調(diào)用),并提供相應(yīng)的參數(shù),如指向線(xiàn)程主程序的入口指針、堆棧的大小,以及用于調(diào)度的優(yōu)先級(jí)等。在線(xiàn)程創(chuàng)建函數(shù)執(zhí)行完后,將返回一個(gè)線(xiàn)程標(biāo)識(shí)符供以后使用。5.線(xiàn)程的創(chuàng)建和終止.148
線(xiàn)程也具有生命期。終止線(xiàn)程的方式有兩種:
(1)線(xiàn)程完成了自己的工作后自愿退出;(2)線(xiàn)程在運(yùn)行中出現(xiàn)錯(cuò)誤或由于某種原因而被其它線(xiàn)程強(qiáng)行終止。有些線(xiàn)程(主要是系統(tǒng)線(xiàn)程),在它們一旦被建立起來(lái)之后,便一直運(yùn)行下去而不再被終止。5.線(xiàn)程的創(chuàng)建和終止.149
大多數(shù)的OS中,線(xiàn)程被中止后并不立即釋放它所占有的資源,只有當(dāng)進(jìn)程中的其它線(xiàn)程執(zhí)行了分離函數(shù)后,被終止的線(xiàn)程才與資源分離,此時(shí)的資源才能被其它線(xiàn)程利用。雖已被終止但尚未釋放資源的線(xiàn)程,仍可以被需要它的線(xiàn)程所調(diào)用,以使被終止線(xiàn)程重新恢復(fù)運(yùn)行。5.線(xiàn)程的創(chuàng)建和終止.150多線(xiàn)程O(píng)S中,進(jìn)程作為擁有系統(tǒng)資源的基本單位,通常都包含多個(gè)線(xiàn)程并為它們提供資源,但進(jìn)程不再作為一個(gè)執(zhí)行的實(shí)體。
(1)作為系統(tǒng)資源分配的單位:進(jìn)程仍作為系統(tǒng)資源分配的基本單位。任一進(jìn)程中所擁有的資源包括:受到分別保護(hù)的用戶(hù)地址空間、用于實(shí)現(xiàn)進(jìn)程間和線(xiàn)程間同步和通信的機(jī)制、已打開(kāi)的文件和已申請(qǐng)到的I/O設(shè)備,以及一張由核心進(jìn)程維護(hù)的地址映射表,該表用于實(shí)現(xiàn)用戶(hù)程序的邏輯地址到其內(nèi)存物理地址的映射。6.多線(xiàn)程O(píng)S中的進(jìn)程.151
(2)可包括多個(gè)線(xiàn)程:一個(gè)進(jìn)程都含有多個(gè)相對(duì)獨(dú)立的線(xiàn)程,其數(shù)目可多可少,但至少也要有一個(gè)線(xiàn)程,由進(jìn)程為這些(個(gè))線(xiàn)程提供資源及運(yùn)行環(huán)境,使這些線(xiàn)程可并發(fā)執(zhí)行。在OS中的所有線(xiàn)程都只能屬于某一個(gè)特定進(jìn)程。6.多線(xiàn)程O(píng)S中的進(jìn)程.152
(3)進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體。線(xiàn)程作為獨(dú)立運(yùn)行的基本單位,進(jìn)程不再是一個(gè)可執(zhí)行的實(shí)體。但進(jìn)程仍具有與執(zhí)行相關(guān)的狀態(tài)。如:所謂進(jìn)程處于“執(zhí)行”狀態(tài),實(shí)際上是指該進(jìn)程中的某線(xiàn)程正在執(zhí)行;對(duì)進(jìn)程所施加的與進(jìn)程狀態(tài)有關(guān)的操作,也對(duì)其線(xiàn)程起作用。在把某個(gè)進(jìn)程掛起時(shí),該進(jìn)程中的所有線(xiàn)程也都將被掛起;又如,在把某進(jìn)程激活時(shí),屬于該進(jìn)程的所有線(xiàn)程也都將被激活。6.多線(xiàn)程O(píng)S中的進(jìn)程.153
1.互斥鎖(mutex)互斥鎖是一種比較簡(jiǎn)單的、用于實(shí)現(xiàn)線(xiàn)程間對(duì)資源互斥訪(fǎng)問(wèn)的機(jī)制。由于操作互斥鎖的時(shí)間和空間開(kāi)銷(xiāo)都較低,因而較適合于高頻度使用的關(guān)鍵共享數(shù)據(jù)和程序段。互斥鎖有開(kāi)鎖(unlock)和關(guān)鎖(lock)兩種狀態(tài),可用兩條命令(函數(shù))對(duì)互斥鎖進(jìn)行操作。關(guān)鎖lock操作用于將mutex關(guān)上,開(kāi)鎖操作unlock用于打開(kāi)mutex。2.6.2線(xiàn)程間的同步和通信.154
當(dāng)一個(gè)線(xiàn)程需要讀/寫(xiě)一個(gè)共享數(shù)據(jù)段時(shí),線(xiàn)程應(yīng)為該數(shù)據(jù)段所設(shè)置的mutex執(zhí)行關(guān)鎖命令。首先判別mutex的狀態(tài),若處于關(guān)鎖狀態(tài),試圖訪(fǎng)問(wèn)該數(shù)據(jù)段的線(xiàn)程將被阻塞;若處于開(kāi)鎖狀態(tài),則將mutex關(guān)上后便去讀/寫(xiě)該數(shù)據(jù)段。線(xiàn)程完成對(duì)數(shù)據(jù)的讀/寫(xiě)后,必須再發(fā)出開(kāi)鎖命令將mutex打開(kāi),同時(shí)還須將阻塞在該互斥鎖上的一個(gè)線(xiàn)程喚醒,其它的線(xiàn)程仍被阻塞在等待mutex打開(kāi)的隊(duì)列上。2.6.2線(xiàn)程間的同步和通信.155
為了減少線(xiàn)程被阻塞的機(jī)會(huì),在有的系統(tǒng)中還提供了一種用于mutex上的操作命令Trylock。當(dāng)一個(gè)線(xiàn)程在利用Trylock命令去訪(fǎng)問(wèn)mutex時(shí),若mutex處于開(kāi)鎖狀態(tài),Trylock將返回一個(gè)指示成功的狀態(tài)碼;反之,若mutex處于關(guān)鎖狀態(tài),則Trylock并不會(huì)阻塞該線(xiàn)程,而只是返回一個(gè)指示操作失敗的狀態(tài)碼。2.6.2線(xiàn)程間的同步和通信.156
2.條件變量只利用mutex來(lái)實(shí)現(xiàn)互斥訪(fǎng)問(wèn)可能會(huì)引起死鎖,如:有一個(gè)線(xiàn)程在對(duì)mutex1執(zhí)行關(guān)鎖操作成功后,便進(jìn)入一臨界區(qū)C,若在臨界區(qū)內(nèi)該線(xiàn)程又須訪(fǎng)問(wèn)某個(gè)臨界資源R。假如資源R此時(shí)正處于忙碌狀態(tài),線(xiàn)程在對(duì)mutex2執(zhí)行關(guān)鎖操作后將被阻塞,這將使mutex1一直保持關(guān)鎖狀態(tài);如果保持了資源R的線(xiàn)程也要求進(jìn)入臨界區(qū)C,但由于mutex1一直保持關(guān)鎖狀態(tài)而無(wú)法進(jìn)入臨界區(qū),這樣便形成了死鎖。為此便引入了條件變量。2.6.2線(xiàn)程間的同步和通信.157
每一個(gè)條件變量通常都與一個(gè)互斥鎖一起使用,即在創(chuàng)建一個(gè)互斥鎖時(shí)便聯(lián)系著一個(gè)條件變量。單純的互斥鎖用于短期鎖定,主要是用來(lái)保證對(duì)臨界區(qū)的互斥進(jìn)入。而條件變量則用于線(xiàn)程的長(zhǎng)期等待,直至所等待的資源成為可用的資源。2.6.2線(xiàn)程間的同步和通信.158
線(xiàn)程首先對(duì)mutex執(zhí)行關(guān)鎖操作,若成功便進(jìn)入臨界區(qū),然后查找用于描述該資源狀態(tài)的數(shù)據(jù)結(jié)構(gòu),以了解資源的情況。只要發(fā)現(xiàn)所需資源R正處于忙碌狀態(tài),線(xiàn)程便轉(zhuǎn)為等待狀態(tài),并對(duì)mutex執(zhí)行開(kāi)鎖操作后,等待該資源被釋放;若資源處于空閑狀態(tài),表明線(xiàn)程可以使用該資源,于是將該資源設(shè)置為忙碌狀態(tài),再對(duì)mutex執(zhí)行開(kāi)鎖操作。下面給出了對(duì)上述資源的申請(qǐng)(上半部分)和釋放(下半部分)操作的描述。2.6.2線(xiàn)程間的同步和通信.159Lockmutex
checkdatastructures;
while(resourcebusy);
wait(conditionvariable);
markresourceasbusy;unlockmutex;Lockmutexmarkresourceasfree;unlockmutex;wakeup(conditionvariable);2.6.2線(xiàn)程間的同步和通信.160線(xiàn)程使用完資源R后,釋放該資源(按照下半部分),其中wakeup(conditionvariable)表示去喚醒在指定條件變量上等待的一個(gè)或多個(gè)線(xiàn)程。如果所釋放的是臨界資源,所喚醒的只能是在條件變量上等待的某一個(gè)線(xiàn)程,其它線(xiàn)程仍繼續(xù)在該隊(duì)列上等待。若線(xiàn)程所釋放的是一個(gè)數(shù)據(jù)文件,如當(dāng)一個(gè)寫(xiě)線(xiàn)程完成寫(xiě)操作并釋放該文件后,如果此時(shí)在該條件變量上還有多個(gè)讀線(xiàn)程在等待,則該線(xiàn)程可以喚醒所有的等待線(xiàn)程。2.6.2線(xiàn)程間的同步和通信.161
3.信號(hào)量機(jī)制
1)私用信號(hào)量(privatesamephore)當(dāng)某線(xiàn)程需利用信號(hào)量來(lái)實(shí)現(xiàn)同一進(jìn)程中各線(xiàn)程之間的同步時(shí),可調(diào)用創(chuàng)建信號(hào)量的命令來(lái)創(chuàng)建一私用信號(hào)量,其數(shù)據(jù)結(jié)構(gòu)存放在應(yīng)用程序的地址空間中。私用信號(hào)量屬于特定的進(jìn)程所有,OS并不知道私用信號(hào)量的存在,因此,一旦發(fā)生私用信號(hào)量的占用者異常結(jié)束或正常結(jié)束,但并未釋放該信號(hào)量所占有空間的情況時(shí),系統(tǒng)將無(wú)法使它恢復(fù)為0(空),也不能將它傳送給下一個(gè)請(qǐng)求它的線(xiàn)程。2.6.2線(xiàn)程間的同步和通信.162
2)公用信號(hào)量(publicsemaphort)公用信號(hào)量是為實(shí)現(xiàn)不同進(jìn)程間或不同進(jìn)程中各線(xiàn)程之間的同步而設(shè)置的。由于它有著一個(gè)公開(kāi)的名字供所有的進(jìn)程使用,故而把它稱(chēng)為公用信號(hào)量。其數(shù)據(jù)結(jié)構(gòu)是存放在受保護(hù)的系統(tǒng)存儲(chǔ)區(qū)中,由OS為它分配空間并進(jìn)行管理,故也稱(chēng)為系統(tǒng)信號(hào)量。如果信號(hào)量的占有者在結(jié)束時(shí)未釋放該公用信號(hào)量,則OS會(huì)自動(dòng)將該信號(hào)量空間回收,并通知下一進(jìn)程。可見(jiàn),公用信號(hào)量是一種比較安全的同步機(jī)制。
2.6.2線(xiàn)程間的同步和通信.163
1.內(nèi)核支持線(xiàn)程
內(nèi)核支持線(xiàn)程KST(KernelSupportedThreads),在內(nèi)核的支持下運(yùn)行的,即無(wú)論是用戶(hù)進(jìn)程中的線(xiàn)程,還是系統(tǒng)進(jìn)程中的線(xiàn)程,他們的創(chuàng)建、撤消和切換等是依靠?jī)?nèi)核,在內(nèi)核空間實(shí)現(xiàn)的。此外,在內(nèi)核空間還為每一個(gè)內(nèi)核支持線(xiàn)程設(shè)置了一個(gè)線(xiàn)程控制塊,內(nèi)核是根據(jù)該控制塊而感知某線(xiàn)程的存在,并對(duì)其加以控制。2.6.3線(xiàn)程的實(shí)現(xiàn)方式.164優(yōu)點(diǎn):(1)在多處理器系統(tǒng)中,內(nèi)核能夠同時(shí)調(diào)度同一進(jìn)程中多個(gè)線(xiàn)程并行執(zhí)行;(2)如果進(jìn)程中的一個(gè)線(xiàn)程被阻塞了,內(nèi)核可以調(diào)度該進(jìn)程中的其它線(xiàn)程占有處理器運(yùn)行,也可以運(yùn)行其它進(jìn)程中的線(xiàn)程;(3)內(nèi)核支持線(xiàn)程具有很小的數(shù)據(jù)結(jié)構(gòu)和堆棧,線(xiàn)程的切換比較快,切換開(kāi)銷(xiāo)?。?4)內(nèi)核本身也可以采用多線(xiàn)程技術(shù),提高系統(tǒng)的執(zhí)行速度和效率。2.6.3線(xiàn)程的實(shí)現(xiàn)方式.165缺點(diǎn):對(duì)于用戶(hù)的線(xiàn)程切換而言,其模式切換的開(kāi)銷(xiāo)較大,在同一個(gè)進(jìn)程中,從一個(gè)線(xiàn)程切換到另一個(gè)線(xiàn)程時(shí),需要從用戶(hù)態(tài)轉(zhuǎn)到內(nèi)核態(tài)進(jìn)行,這是因?yàn)橛脩?hù)進(jìn)程的線(xiàn)程在用戶(hù)態(tài)運(yùn)行,而線(xiàn)程調(diào)度和管理是在內(nèi)核實(shí)現(xiàn)的,系統(tǒng)開(kāi)銷(xiāo)較大。2.6.3線(xiàn)程的實(shí)現(xiàn)方式.166
2.用戶(hù)級(jí)線(xiàn)程
用戶(hù)級(jí)線(xiàn)程ULT(UserLevelThreads)僅存在于用戶(hù)空間中。線(xiàn)程的創(chuàng)建、撤消、線(xiàn)程之間的同步與通信,用戶(hù)級(jí)線(xiàn)程的切換等功能,都無(wú)須利用系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn)。由于切換規(guī)則遠(yuǎn)比進(jìn)程調(diào)度和切換的規(guī)則簡(jiǎn)單,因而線(xiàn)程的切換速度特別快??蔀橐粋€(gè)應(yīng)用程序建立多個(gè)用戶(hù)級(jí)線(xiàn)程。由于這些線(xiàn)程的任務(wù)控制塊都是設(shè)置在用戶(hù)空間,而線(xiàn)程所執(zhí)行的操作也無(wú)須內(nèi)核的幫助,因而內(nèi)核完全不知道用戶(hù)級(jí)線(xiàn)程的存在。2.6.3線(xiàn)程的實(shí)現(xiàn)方式.167
對(duì)設(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政管理人員的職業(yè)素養(yǎng)考核試題及答案
- 農(nóng)村水資源保護(hù)利用協(xié)議
- 行政管理中的領(lǐng)導(dǎo)溝通試題及答案
- 2024-2025學(xué)年高中歷史第二單元近代中國(guó)的反侵略反封建斗爭(zhēng)第10課新民主主義革命的勝利學(xué)案含解析北師大版必修1
- 行政文書(shū)的效能評(píng)估與優(yōu)化措施試題及答案
- 行政管理中的社會(huì)參與試題及答案
- 2025合作伙伴協(xié)議合同書(shū)
- 公文寫(xiě)作規(guī)范的遵循及試題及答案
- 2025年苗木購(gòu)銷(xiāo)合同紅心獼猴桃空白模板
- 2025【合同協(xié)議范本】采購(gòu)合同范本模板
- GB/T 37439-2019高速鐵路預(yù)制后張法預(yù)應(yīng)力混凝土簡(jiǎn)支梁
- GB/T 14846-2014鋁及鋁合金擠壓型材尺寸偏差
- GB/T 13667.1-2015鋼制書(shū)架第1部分:?jiǎn)巍?fù)柱書(shū)架
- GB 30531-2014商用燃?xì)庠罹吣苄薅ㄖ导澳苄У燃?jí)
- GA/T 594-2006保安服務(wù)操作規(guī)程與質(zhì)量控制
- 藝術(shù)第三章世界各國(guó)動(dòng)畫(huà)概述課件
- 別墅庭院景觀(guān)設(shè)計(jì)課件
- 高中生物365個(gè)判斷題涵蓋高一高二高三所有知識(shí)點(diǎn)
- 提高住院患者抗菌藥物治療前送檢率培訓(xùn)
- 社會(huì)科學(xué)研究方法博士生課程
- 交通疏解方案完整版
評(píng)論
0/150
提交評(píng)論