2012進(jìn)程管理2.ppt_第1頁(yè)
2012進(jìn)程管理2.ppt_第2頁(yè)
2012進(jìn)程管理2.ppt_第3頁(yè)
2012進(jìn)程管理2.ppt_第4頁(yè)
2012進(jìn)程管理2.ppt_第5頁(yè)
已閱讀5頁(yè),還剩123頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1,進(jìn)程管理(二) Process Management,2,提 綱,線程概念,七,經(jīng)典的同步問題,四,管程同步機(jī)制,五,進(jìn)程通信機(jī)制,六,3,經(jīng)典進(jìn)程同步問題,4,1.生產(chǎn)者-消費(fèi)者問題,5,生產(chǎn)者消費(fèi)者問題是一種同步問題的抽象描述。計(jì)算機(jī)系統(tǒng)中的每個(gè)進(jìn)程都可以消費(fèi)(使用)或生產(chǎn)(釋放)某類資源。這些資源可以是硬件資源,也可以是軟件資源。 當(dāng)某一進(jìn)程使用某一資源時(shí),可以看作是消費(fèi),稱該進(jìn)程為消費(fèi)者。而當(dāng)某一進(jìn)程釋放某一資源時(shí),它就相當(dāng)于生產(chǎn)者。,1.1問題描述,6,問題的基本描述 有一群生產(chǎn)者進(jìn)程生產(chǎn)消息,通過一個(gè)有界緩沖區(qū)(n個(gè)緩沖區(qū))將消息提供給消費(fèi)者進(jìn)程去消費(fèi)。,生產(chǎn)者生產(chǎn)一個(gè)消息放入

2、一個(gè)緩沖區(qū),消費(fèi)者從一個(gè)緩沖區(qū)中取得一個(gè)消息消費(fèi)。,1.1問題描述,7,注:要求 1)在Buffer中,一次只能有一個(gè)進(jìn)程在活動(dòng),即對(duì)緩沖池的操作要求互斥。 2)任一時(shí)刻所有生產(chǎn)者存放產(chǎn)品的單元數(shù)不能超過緩沖區(qū)的總?cè)萘浚∟)即不允許生產(chǎn)者向滿緩沖中放消息(判滿,則阻塞); 3)所有消費(fèi)者取出產(chǎn)品的總量不能超過所有生產(chǎn)者當(dāng)前生產(chǎn)產(chǎn)品的總量即不允許消費(fèi)者到空緩沖中取消息(判空,則阻塞); 4)可設(shè)緩沖池為循環(huán)存儲(chǔ)結(jié)構(gòu),1.2問題分析,8,問題解決方法: 1)要求互斥,設(shè)置公用信號(hào)量:mutex保證諸進(jìn)程互斥地訪問緩沖池; 2)3)要求同步,設(shè)置私有信號(hào)量:empty生產(chǎn)者進(jìn)程的私有信號(hào)量,表示目前

3、空緩沖區(qū)的個(gè)數(shù)(初值為n);full消費(fèi)者進(jìn)程的私有信號(hào)量,表示目前緩沖區(qū)消息的個(gè)數(shù)(初值為0);,1.2問題分析,4)環(huán)形緩沖區(qū),9,produce(data) wait(empty); wait(mutex); 送數(shù)據(jù)入緩沖區(qū)單元 signal(mutex); signal(full); ,consume(data) wait(full); wait(mutex); 消費(fèi); signal(mutex); signal(empty); ,各生產(chǎn)者進(jìn)程使用的過程produce(data)和各消費(fèi)者使用的過程consume(data)可描述如下:,由此可見,PV操作不僅可實(shí)現(xiàn)進(jìn)程互斥,也可實(shí)現(xiàn)進(jìn)

4、程同步。,1.3解決過程,10,以下給出生產(chǎn)者消費(fèi)者問題的完整描述: 設(shè)有n個(gè)緩沖區(qū),為實(shí)現(xiàn)對(duì)緩沖池的互斥操作: 設(shè)互斥信號(hào)量mutex;設(shè)資源信號(hào)量empty表示空緩沖的個(gè)數(shù),full表示滿緩沖的個(gè)數(shù); 定義數(shù)組buffer 表示緩沖區(qū)。 輸入指針in指示下一個(gè)可放消息的緩沖區(qū);輸出指針out指示下一個(gè)可取消息的緩沖區(qū)。 semaphore mutex=1,empty=n, full=0; message buffern ; int in =0, out =0;,1.4具體實(shí)現(xiàn),11,main() parbegin(producer() ,cosumer(); void producer()

5、 message nextp; do nextp =producer an message; wait(empty); wait(mutex) ; bufferin=nextp; in=(in+1) mod n; signal(mutex); signal(full) ; while(true);,void consumer() message nextc; do wait(full) ; wait(mutex); nextc=buffer(out); out=(out+1) mod n; signal(mutex); signal(empty); consumer nextc; while(

6、true);,12,注:1)wait(mutex)和signal(mutex)必成對(duì)出現(xiàn)。 2)empty和full的wait和signal操作也必成對(duì)出現(xiàn),但是在不同的進(jìn)程中。 3)一般說來:singal原語(yǔ)是釋放資源的,可以任意順序出現(xiàn),wait原語(yǔ)不然,如果次序混亂將造成死鎖。 4)利用AND信號(hào)量解決 可把緩沖池和其中的某個(gè)緩沖區(qū)看為兩類資源,同時(shí)對(duì)它們提出申請(qǐng)。即上述實(shí)現(xiàn)方式中的wait(empty)和wait(mutex)合并為swait(empty,mutex),signal操作也是同樣的。,1.4具體實(shí)現(xiàn),13,2.哲學(xué)家進(jìn)餐問題,14,1 問題描述:五個(gè)哲學(xué)家,共用一張圓桌,

7、五支筷子。哲學(xué)家只有兩種狀態(tài),思考和進(jìn)餐。進(jìn)餐時(shí)只能取靠近他的左右的筷子,而且拿到兩支時(shí)才可進(jìn)餐。完后,放下筷子繼續(xù)思考。,2.1問題描述,15,每支筷子可看成是一個(gè)臨界資源,因此可定義一個(gè)信號(hào)量數(shù)組來描述五支筷子。 semaphore chopstick5 ; 第i個(gè)哲學(xué)家的活動(dòng)可描述為: wait(chopsticki); wait(chopsticki+1 mod 5); eat; signal(chopsticki); signal(chopsticki+1 mod 5); Think;,2.2問題初步解決,16,注:此算法有可能產(chǎn)生“死鎖”。如五個(gè)哲學(xué)家同時(shí)饑餓,都拿起左邊的筷子時(shí),

8、則五個(gè)信號(hào)量值均為0,再無法進(jìn)行。 解決方法:1)至多允許四個(gè)人同時(shí)進(jìn)餐,保證至少一個(gè)能進(jìn)餐。設(shè)一個(gè)信號(hào)量v,初值為4。 具體代碼參見下頁(yè) 2)僅當(dāng)左右均可用時(shí),才允許拿起筷子 3)規(guī)定奇數(shù)號(hào)人先拿左筷子,然后拿右筷子;偶數(shù)號(hào)人先拿右筷子,然后拿左筷子。五個(gè)哲學(xué)家都先競(jìng)爭(zhēng)奇數(shù)號(hào)筷子,獲得后在去競(jìng)爭(zhēng)偶數(shù)號(hào)筷子。最后總有一個(gè)哲學(xué)家能獲得兩只筷子。,2.3 進(jìn)一步解決,17,semaphore chopstick5=1,1,1,1,1 ; semaphore v=4 void main() parbegin( philosopher(0), philosopher(1), philosopher(2

9、), philosopher(3), philosopher(4); void philosopher(i) /*i=0,1,2,3,4*/ while(true) wait(v) wait(chopsticki); wait(chopsticki+1 mod 5); eating; signal(chopsticki); signal(chopsticki+1 mod 5); signal(v) thinking;,2.3 進(jìn)一步解決,18,= #define N 5 #define LEFT (i-1)%N #define RIGHT (i+1)%N #define THINKING 0

10、#define HUNGRY 1 #define EATING 2 typedef struct /* 定義結(jié)構(gòu)型信號(hào)量 */ int value; struct PCB *list; semaphore; int stateN; semaphore mutex=1; /* 互斥進(jìn)入臨界區(qū) */ semaphore sN; /* 每位哲學(xué)家一個(gè)信號(hào)量 */,2.3 進(jìn)一步解決,19,void philosopher(int i) while(TRUE) think(); /* 哲學(xué)家在思考問題 */ take_chopstick(i); /* 拿到兩根筷子或者等待 */ eat(); /* 進(jìn)

11、餐 */ put_chopstick(i); /* 把筷子放回原處 */ void take_chopstick(int i) P(mutex); statei=HUNGRY; test(i); /* 試圖拿兩根筷子 */ V(mutex); P(si); ,2.3 進(jìn)一步解決,20,void put_chopstick(int i) P(mutex); statei=THINKING; test(LEFT); /* 查看左鄰,現(xiàn)在能否進(jìn)餐 */ test(RIGHT); /* 查看右鄰,現(xiàn)在能否進(jìn)餐 */ V(mutex); void test(int i) if(statei=HUNGRY

12、 ,2.3 進(jìn)一步解決,21,3.讀者-寫者問題,22,1.問題描述: 把只要求讀的進(jìn)程稱為“reader進(jìn)程”;其它的稱為“writer進(jìn)程”。,對(duì)于某個(gè)可共享的數(shù)據(jù)或文件: 允許多個(gè)reader進(jìn)程同時(shí)執(zhí)行; 不允許一個(gè)writer進(jìn)程和其它reader進(jìn)程或writer進(jìn)程同時(shí)訪問共享對(duì)象。,2.1問題描述,23,因?yàn)閣riter進(jìn)程要與其它進(jìn)程互斥,所以可設(shè)置一互斥信號(hào)量Wmutex; 設(shè)整型變量readcount表示正在讀的進(jìn)程的數(shù)目。 當(dāng)readcount=0時(shí),表示沒有reader進(jìn)程,此時(shí)到來的reader進(jìn)程要執(zhí)行wait(Wmutex)以屏蔽writer進(jìn)程; 否則,只需r

13、eadcount+1。 對(duì)變量readcount也應(yīng)是互斥的操作,可設(shè)互斥信號(hào)量Rmutex。,3.2記錄型信號(hào)量問題解決,24,若readcount=0時(shí), 來讀者申請(qǐng)Rmutex 申請(qǐng)Wmutex readcount+1釋放Rmutex 讀操作. 離開一個(gè)讀者,申請(qǐng)Rmutexreadcount-1若count=0說明沒有了讀者,則釋放Wmutex以備寫者使用區(qū)域釋放Rmutex,3.2記錄型信號(hào)量問題解決,25,semapho rermutex=1, semapho wmutex=1; int readcount=0;,void main() parbegin(reader(),writ

14、er(); void reader() while(true) wait(rmutex); if (readcount=0) then wait(wmutex); readcount=readcount+1; signal(rmutex); 讀操作;,wait(rmutex); readcount:=readcount-1 if readcount=0 then signal(wmutex); signal(rmutex); void writer() while(true) wait(wmutex); 寫操作 signal(wmutex); ,3.3問題解決具體實(shí)現(xiàn),26,4.理發(fā)師問題,2

15、7,理發(fā)店里有一位理發(fā)師,一把理發(fā)椅和N把供等候理發(fā)的顧客坐的椅子。 如果沒有顧客,則理發(fā)師便在理發(fā)椅上睡覺。當(dāng)一個(gè)顧客到來時(shí),他必須先喚醒理發(fā)師。 如果顧客到來時(shí)理發(fā)師正在理發(fā),則若有空椅子可坐下來等;否則離開。,4.1問題描述,28,理發(fā)師和每位顧客都分別是一個(gè)進(jìn)程。 理發(fā)師:看是否有顧客,若沒有, 在理發(fā)椅上睡覺;如果有,為等待最久的顧客服務(wù),等待人數(shù)減1。 顧客:首先查看理發(fā)師在干什么,如果在睡覺則喚醒理發(fā)師,然后坐到理發(fā)椅上開始理發(fā);如果理發(fā)師正在理發(fā),先看等候的顧客數(shù),如果少于椅子數(shù),留下來等,否則離開。,4.2問題分析,29,customers:用來記錄等候理發(fā)的顧客數(shù)(不包括正

16、在理發(fā)的顧客),并用作阻塞理發(fā)師進(jìn)程,初值為0; barbers:等候顧客的理發(fā)師數(shù),并用作阻塞顧客進(jìn)程,初值為k; mutex:用于對(duì)waiting 變量的互斥。,設(shè)三個(gè)信號(hào)量:,設(shè)顧客座椅數(shù)(chairs)為5。 控制變量waiting,用于記錄等候的顧客數(shù),初值為0。由于它不是信號(hào)量,因此可對(duì)其進(jìn)行增減等操作。,4.3問題實(shí)現(xiàn),30,# define CHAIRS 5 /*為等待的顧客準(zhǔn)備的椅子數(shù)*/ semaphore customers=0; /*等待服務(wù)的顧客數(shù)*/ semaphore barbers=k; /*等待顧客的理發(fā)師數(shù)*/ semaphore mutex=1; /*用于

17、互斥*/ int waiting=0; /*等待的顧客(還沒理發(fā)的)*/ Void main() parbegin(barber(),customer(); ,4.3問題實(shí)現(xiàn),31,Void customer(void) wait(mutex);/*互斥進(jìn)入臨界區(qū)*/ if (waiting=chairs) singal(mutex); /*人滿,走吧*/ else waiting+; /*等待顧客數(shù)加1*/ singal(customers); /*如有必要,喚醒理發(fā)師*/ singal(mutex); /*退出臨界區(qū)*/ wait(barbers); /*理發(fā)師為0,顧客瞌睡*/ geth

18、aircut(); ,void barber(void) while(true) /*理完一人,還有顧客嗎?*/ wait (customers); /*如無顧客,則睡眠*/ wait(mutex); /*進(jìn)程互斥*/ waiting-; /*等待顧客數(shù)減1*/ singal(mutex); /*開放臨界區(qū)*/ cut_hair(); /*理發(fā)*/ singal(barbers); /*理發(fā)師現(xiàn)在做好了理發(fā)的準(zhǔn)備*/ ,注:理發(fā)師為一名顧客理發(fā)后,要查看還有無等候顧客,若無,理發(fā)師才能瞌睡,因此程序中用while語(yǔ)句,保證循環(huán)為顧客服務(wù)。,32,經(jīng)典IPC問題,生產(chǎn)者消費(fèi)者問題 有界緩沖區(qū)問題

19、的建模 哲學(xué)家進(jìn)餐問題 多進(jìn)程同步問題的建模 讀者寫者問題 數(shù)據(jù)庫(kù)互斥訪問問題的建模 理發(fā)師睡覺問題 CS模式進(jìn)程同步問題的建模,進(jìn)程通信,33,P.V操作討論 信號(hào)量的物理含義: S0 S=0 S0,表示有S個(gè)資源可用,表示無資源可用,則| S |表示S等待隊(duì)列中的進(jìn)程個(gè)數(shù),P(S): 表示申請(qǐng)一個(gè)資源 V(S):表示釋放一個(gè)資源。 信號(hào)量的初值應(yīng)該大于等于0,34,2) P.V操作必須成對(duì)出現(xiàn),有一個(gè)P操作就一定有一個(gè)V操作. 當(dāng)為互斥操作時(shí),它們同處于同一進(jìn)程 當(dāng)為同步操作時(shí),則不在同一進(jìn)程中出現(xiàn) 如果P(S1)和P(S2)兩個(gè)操作在一起,那么P操作的順序至關(guān)重要,一個(gè)同步P操作與一個(gè)互

20、斥P操作在一起時(shí)同步P操作在互斥P操作前; 而兩個(gè)V操作的順序無關(guān)緊要。,35,3)P.V操作的優(yōu)缺點(diǎn) 優(yōu)點(diǎn): 簡(jiǎn)單,而且表達(dá)能力強(qiáng)(用P.V操作可解決任何同步互斥問題)。 缺點(diǎn): 不夠安全;P.V操作使用不當(dāng)會(huì)出現(xiàn)死鎖;遇到復(fù)雜同步互斥問題時(shí)實(shí)現(xiàn)復(fù)雜。,36,小結(jié): 用PV操作完成進(jìn)程間的同步與互斥應(yīng)遵循以下幾個(gè)步驟: 分析同步關(guān)系(有幾個(gè)制約條件) 設(shè)置信號(hào)量(一般情況下,有幾個(gè)制約條件設(shè)置幾個(gè)信號(hào)量) 選擇并確定信號(hào)量的初值 寫出進(jìn)程間的同步關(guān)系,37,【思考題】,用P.V操作解決司機(jī)與售票員問題,38,解:引入兩個(gè)信號(hào)量stop和run,并設(shè)汽車的初始狀態(tài)為停車。,Var stop,r

21、un:semaphore:=0,0; Begin Parbegin driver: begin repeat p(run); 啟動(dòng)車輛; 正常運(yùn)行; 到站停車; v(stop); until false; end,Conductor:begin Repeat 關(guān)門; v(run); 售票; p(stop); 開門; Until(false); End Parend end,39,練 習(xí),1. 某條由西向東的單行車道有一卡脖子的路段AB(如圖示),為保證行車的安全,需設(shè)計(jì)一個(gè)自動(dòng)管理系統(tǒng),管理原則如下: 1)當(dāng)AB間無車行駛時(shí),可讓到達(dá)A點(diǎn)的一輛車進(jìn)人AB段行駛; 2)當(dāng)在AB段有車行駛時(shí),讓到

22、達(dá)A點(diǎn)的車等待; 3)當(dāng)AB段內(nèi)行駛的車通過B點(diǎn)后,可讓等待在A點(diǎn)的一輛車進(jìn)人AB段。,40,請(qǐng)回答下列問題: (1)把每一輛需經(jīng)過AB段的車輛看做是一個(gè)進(jìn)程,則這些進(jìn)程在AB段執(zhí)行時(shí),它們之間的關(guān)系應(yīng)是同步還是互斥? (2)用PV操作管理AB段時(shí),應(yīng)怎樣定義信號(hào)量?給出信號(hào)量的初值以及信號(hào)量可能取值的含義。 (3)若每個(gè)進(jìn)程的程序如下,請(qǐng)?jiān)诳瞻滋幪钌线m當(dāng)?shù)腜V操作,以保證行車的安全。 begin 到達(dá)A點(diǎn); _; 在AB段行駛; 駛出B點(diǎn); _; end;,41,1.答: 1)各進(jìn)程之間的關(guān)系是互斥 2)可定義一個(gè)互斥信號(hào)量 S,S的初值為 1。用 PV操作管理時(shí) S可能的取值為 1、0及0

23、,這些值的含義是:S=1時(shí)表示無車輛在AB段行駛,若有某車輛欲進(jìn)人AB段則立即可以進(jìn)入。S=0時(shí)表示已有一車輛正在 AB段行駛,這時(shí)任何其它車輛欲進(jìn)入AB段都必須等待。S0時(shí)其絕對(duì)值|S|表示在 A點(diǎn)等待進(jìn)入 AB段行駛的車輛數(shù)。 3)用PV操作管理時(shí)進(jìn)程的程序如下: begin 到達(dá)A點(diǎn); P(S); 在AB段行駛; 駛出B點(diǎn); V(S); end,42,2. 一條小河上有一座獨(dú)木橋(如圖),規(guī)定每次只允許一個(gè)人過橋?,F(xiàn)河?xùn)|和河西都有相等的人數(shù)在等待過橋,為了使兩邊的人都有同樣的過橋機(jī)會(huì),規(guī)定某邊的一個(gè)人過橋后要讓另一邊的一個(gè)人過橋,即兩邊的人交替過橋。如果把每個(gè)過橋者看做一個(gè)進(jìn)程,為保證安

24、全,可用PV操作來管理。,(1)寫出應(yīng)定義的信號(hào)量及其初值。(2)假定開始時(shí)讓河?xùn)|的一個(gè)人先過橋,然后交替過橋。請(qǐng)用適當(dāng)?shù)腜V操作,達(dá)到上述管理要求。,43,2.答: 1)定義兩個(gè)信號(hào)量S1和S2,S1:=1,S2:=0。 2)假定開始時(shí)讓河?xùn)|的一個(gè)人先過橋,則用PV操作管理時(shí)的程序應(yīng)如下:,process E-W; begin P(S1); 過橋; V(S2); end;,process W-E; begin P(S2); 過橋; V(S1); end;,44,3.某高校計(jì)算機(jī)系開設(shè)網(wǎng)絡(luò)課并安排上機(jī)實(shí)習(xí),假設(shè)機(jī)房有共有2m臺(tái)機(jī)器,有2n名學(xué)生選該課,規(guī)定: 1)每2個(gè)學(xué)生組成一組,各占一臺(tái)機(jī)

25、器,合作完成上機(jī)實(shí)習(xí) 2)只有一組2個(gè)學(xué)生到齊,并且此時(shí)機(jī)房有空閑機(jī)器時(shí),該組學(xué)生才能進(jìn)入機(jī)房 3)上機(jī)實(shí)習(xí)由一名教師檢查,檢查完畢,一組學(xué)生同時(shí)離開機(jī)房 設(shè)計(jì)相應(yīng)的數(shù)據(jù)結(jié)構(gòu),并用wait、signal操作模擬上面實(shí)習(xí)過程。 (提示:除了有學(xué)生和教師進(jìn)程外,還應(yīng)該有門衛(wèi)進(jìn)程),45,3. 答: Var student,computer,enter, finish,test :semaphore:=0, 2m,0,0,0; student: begin P(computer) - 得到一臺(tái)計(jì)算機(jī) V(student) - 有學(xué)生到達(dá),通知門衛(wèi) P(enter) - 等待進(jìn)入 Practice;

26、V(finish); - 實(shí)習(xí)結(jié)束,通知教師 P(test); - 等待教師檢查 V(computer); - 釋放計(jì)算機(jī)資源 End;,46,Teacher: begin P(finish); -等待學(xué)生實(shí)習(xí)結(jié)束 P(finish); -等待另一學(xué)生實(shí)習(xí)結(jié)束 Check; V(test); -檢查完成 V(test); -檢查完成 End; Guard: begin P(student); -等待學(xué)生到達(dá) P(student); -等待另一學(xué)生到達(dá) V(enter); - 允許學(xué)生進(jìn)入 V(enter); -允許另一學(xué)生進(jìn)入 End;,47,4.設(shè)有三個(gè)進(jìn)程、,其中與構(gòu)成一對(duì)生產(chǎn)者和消費(fèi)者,

27、共享一個(gè)由個(gè)緩沖區(qū)組成的緩沖池;與也構(gòu)成一對(duì)生產(chǎn)者和消費(fèi)者,共享另一個(gè)由個(gè)緩沖區(qū)組成的緩沖池。用操作描述它們的同步關(guān)系。 解答,48,4、答: Var empty1,empty2,full1,full2:semaphore: =1,1,0,0;,begin parbegin process A:begin repeat produce an item; wait(empty1); put to buffer1; signal(full1); until false; end,49,Process B:begin repeat wait(full1); get from buffer1; sig

28、nal(empty1); wait(empty2); put to buffer2; signal(full2); until false; end,Process C:begin repeat wait(full2); get from buffer2; signal(empty2); until false; end,50,作業(yè): 吃水果問題 問題描述:桌上有一只盤子,每次只能放一個(gè)水果,爸爸專向盤中放蘋果,媽媽專向盤中放桔子,兒子專等吃盤里的桔子,女兒專等吃盤里的蘋果。只要盤子空,則爸爸或媽媽可向盤中放水果,僅當(dāng)盤中有自己需要的水果時(shí),兒子或女兒可從中取出。 請(qǐng)給出四人之間的同步關(guān)系,并

29、用P、V操作實(shí)現(xiàn)四人正確活動(dòng)的程序。,51,問題分析:,四人之間的關(guān)系: 爸爸,媽媽要互斥使用盤子,所以兩者之間是互斥關(guān)系; 爸爸放的蘋果,女兒吃,所以兩者是同步關(guān)系; 媽媽放的桔子,兒子吃,所以兩者也是同步關(guān)系。 提示:設(shè)置一個(gè)信號(hào)量表示可否向盤中放水果,一個(gè)信號(hào)量表示可否取桔子,一個(gè)信號(hào)量表示可否取蘋果。,52,解:,設(shè)置三個(gè)信號(hào)量S,So,Sa ,初值分別為1,0,0。分別表示可否向盤中放水果,可否取桔子,可否取蘋果。,53,54,管程機(jī)制,55,1.管程引入,56,信號(hào)量機(jī)制要求在訪問臨界資源的進(jìn)程中自備wait和signal操作,加長(zhǎng)了進(jìn)程的長(zhǎng)度,易產(chǎn)生死鎖。 設(shè)mutex為互斥信號(hào)

30、量,signal(mutex) CS signal(mutex),wait(mutex) CS wait(mutex),遺漏了wait或signal,1.1問題描述,57,思想:對(duì)于分散在進(jìn)程中的臨界段進(jìn)行集中管理。 1971年,Dijkstra提出,為每一臨界資源設(shè)置一個(gè)“秘書”進(jìn)程。要訪問該臨界資源的進(jìn)程都需先報(bào)告“秘書”,由“秘書”實(shí)現(xiàn)諸進(jìn)程的同步。 1973年,Hoare和Hanson將其發(fā)展為管程。把并發(fā)進(jìn)程間的操作,分別集中于相應(yīng)的管程中。 哲學(xué)原理:你不行,把困難交給別人,1.2管程思想,58,2.管程的概念,59,1)管程的定義:一個(gè)管程定義了一組數(shù)據(jù)結(jié)構(gòu)和能為并發(fā)進(jìn)程所執(zhí)行的

31、一組操作。這組操作能同步進(jìn)程和改變管程中的數(shù)據(jù)。 管程是管理進(jìn)程間同步的機(jī)制,它保證進(jìn)程互斥地訪問臨界資源,并且提供了一個(gè)方便的阻塞和喚醒進(jìn)程的機(jī)構(gòu)。 2 )組成: 1)局部于管程的共享變量說明(臨界資源的描述) 2)對(duì)該數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的一組過程(即對(duì)臨界資源進(jìn)行操作的部分) 3)對(duì)局部于管程的數(shù)據(jù)設(shè)置初始值的語(yǔ)句。,2.1管程定義組成,60,1)管程中的數(shù)據(jù)結(jié)構(gòu)僅能被局部于管程的過程所訪問;管程中的過程也僅能訪問管程內(nèi)的數(shù)據(jù)結(jié)構(gòu) 2)一個(gè)進(jìn)程只有通過調(diào)用管程內(nèi)的過程才能進(jìn)入管程訪問共享數(shù)據(jù)。進(jìn)程要訪問臨界資源,必須經(jīng)過管程。 3)任一時(shí)刻管程中只能有一個(gè)活躍的進(jìn)程。這就保證了進(jìn)程互斥地進(jìn)入

32、管程。 4)編譯管程時(shí)會(huì)將需要的操作系統(tǒng)原語(yǔ)加上,使得兩個(gè)線程不能同時(shí)活躍于同一個(gè)官程內(nèi),2.2管程語(yǔ)法格式,61,管程的語(yǔ)法如下 monitor monitor-name variable declarations procedure entry P1() procedure entry P2() procedure entry Pn() initialization code; ,2.2管程語(yǔ)法格式,62,管程的示意圖,2.2管程語(yǔ)法格式,63,64,管程實(shí)現(xiàn)同步 設(shè)置原語(yǔ)wait和signal分別表示等待、喚醒。條件變量condition表示等待的原因。 Wait(c): 當(dāng)進(jìn)程通過管程

33、申請(qǐng)某資源未能滿足時(shí),管程調(diào)用wait使其等待; Signal(c): 當(dāng)一進(jìn)程釋放該資源后,管程調(diào)用signal喚醒等待隊(duì)列中的隊(duì)首進(jìn)程。 設(shè) var x: condition x.wait表示因等待x而阻塞; x.signal喚醒一個(gè)因等待x而阻塞的進(jìn)程。,2.3管程條件變量,65,條件變量:控制執(zhí)行的順序 是一線程可以在上面等待(因等待x而阻塞); 另一線程可發(fā)信號(hào)將在條件變量上等待的進(jìn)程喚醒。 條件變量不是信號(hào)量,不能進(jìn)行自加和自減操作 所以須設(shè)一個(gè)計(jì)數(shù)器變量 鎖:實(shí)現(xiàn)互斥 由編譯器負(fù)責(zé),在編譯管程代碼段時(shí)將把與鎖有關(guān)的部分加上。進(jìn)入管程需獲取該管程鎖 問題:編譯器怎樣加上鎖?,2.4

34、管程同步機(jī)制,66,注: 1)x.wait作用是因條件不滿足,進(jìn)程執(zhí)行該操作后使本身列入該條件變量的隊(duì)列中, a.釋放鎖 b.阻塞本進(jìn)程(加入對(duì)應(yīng)的阻塞隊(duì)列,睡覺、等待被喚醒) 2) x.signal的作用喚醒阻塞進(jìn)程。若等待隊(duì)列為空,則此操作不產(chǎn)生任何后果(無加一的操作)。與V操作不同。 問題:x.wait 和x.signal如何實(shí)現(xiàn)?,2.4管程同步機(jī)制,67,問題:多個(gè)進(jìn)程出現(xiàn)在管程中 當(dāng)一個(gè)進(jìn)入管程的進(jìn)程執(zhí)行等待操作時(shí),它應(yīng)當(dāng)釋放管程的互斥權(quán);當(dāng)一個(gè)進(jìn)入管程的進(jìn)程執(zhí)行喚醒操作時(shí)(如喚醒),管程中便存在兩個(gè)同時(shí)處于活動(dòng)狀態(tài)的進(jìn)程 處理方法有三種: 等待繼續(xù),直到退出或等待 (Hoare)

35、 等待繼續(xù),直到等待或退出 規(guī)定喚醒為管程中最后一個(gè)可執(zhí)行的操作,2.4管程同步機(jī)制,68,3.管程實(shí)例,69,首先建立管程名為PC,并定義其包含的兩個(gè)過程: 1)put(item)為生產(chǎn)者放消息過程。count表示已有的消息數(shù)目。countn,表緩沖池已滿。生產(chǎn)者需等待。 2)get(item)為消費(fèi)者取消息過程。 count0,表緩沖池已空,消費(fèi)者等待。 PC管程的描述為:,monitor PC integer in,out,count; item buffern; condition notfull,notempty;,3.1生產(chǎn)者-消費(fèi)者問題,70,procedure entry pu

36、t(item) if countn then notfull.wait; bufferin=nextp; in=(in+1) mod n; count=count+1; if notempty.queue then notempty.signal; procedure entry get(item) if count0 then notempty.wait; nextc=bufferout; out=(out+1) mod n; count=count-1; if notfull.queue then notfull.signal; in:=out:=0; count:=0; ,3.1生產(chǎn)者-

37、消費(fèi)者問題,71,void proceducer() while(1) produce an item in nextp; PC.put(item); ,void consumer()while(1) PC.get(item); consume the item in nextc; ,系統(tǒng)中的編譯器可識(shí)別出管程,并對(duì)其實(shí)現(xiàn)互斥操作。,3.1生產(chǎn)者-消費(fèi)者問題,72,哲學(xué)家可有三種狀態(tài):進(jìn)餐、饑餓、思考。,monitor dining-philosophers enum states thinking,hungry,eating; enum states state5; condition se

38、lf5 ;,procedure entry pickup(int i) statei:=hungry;/*置自己為饑餓狀態(tài)*/ test(i) ; /*再測(cè)試是否具有進(jìn)餐條件, */ if stateieating then selfi.wait;/*沒有,則調(diào)用wait*/ ,此過程為取筷子或申請(qǐng)進(jìn)餐過程。,3.2哲學(xué)家進(jìn)餐問題,73,procdeure entry putdown(int i) statei:=thinking; test(i-1) mod 5); test(i+1) mod 5);,procedure test(int k) if state(k-1) mod 5eati

39、ng and statek=hungry and state(k+1) mod 5eating then statek:=eating; selfk.signal ,放筷子過程。狀態(tài)設(shè)為thinking,測(cè)試左右兩邊是否有因筷子而等待者,若有,且等待人左右兩邊都未進(jìn)餐,可將他們喚醒。,為測(cè)試過程。若左右均不是eating狀態(tài),且自身已hungry,則可設(shè)置自己的狀態(tài)eating并喚醒。,3.2哲學(xué)家進(jìn)餐問題,74, for i:=0 to 4 do statei:=thinking ;,process (int i) while(1) thinking; dining-philosophers

40、. pickup(i); eating; dining-philosophers.putdown(i); ,3.2哲學(xué)家進(jìn)餐問題,75,管程和進(jìn)程的異同點(diǎn): (1)設(shè)置進(jìn)程和管程的目的不同 (2)系統(tǒng)管理數(shù)據(jù)結(jié)構(gòu) 進(jìn)程:PCB 管程:等待隊(duì)列 (3)管程被進(jìn)程調(diào)用 (4)管程是操作系統(tǒng)的固有成分,無創(chuàng)建和撤消,小結(jié),76,進(jìn)程通信機(jī)制,77,1.進(jìn)程通信類型,78,進(jìn)程通信即進(jìn)程間的信息交換??捎械图?jí)通信機(jī)制和高級(jí)通信機(jī)制兩種。 低級(jí)通信機(jī)制:進(jìn)程的互斥、同步屬于低級(jí)通信機(jī)制。特點(diǎn):交換的信息量很少、效率低(如生產(chǎn)者和消費(fèi)者中,一次放或取一個(gè)數(shù)據(jù));通信對(duì)用戶不透明(用戶要自己管理數(shù)據(jù)的傳送)

41、。 高級(jí)通信機(jī)制:可以交換大量信息;用戶利用OS提供的通信命令進(jìn)行數(shù)據(jù)的傳輸;通信對(duì)用戶是透明的(即用戶不需關(guān)心傳輸過程中的細(xì)節(jié)),1.1通信概述,79,進(jìn)程通信的類型 高級(jí)通信機(jī)制可歸結(jié)為三大類: 共享存儲(chǔ)器系統(tǒng) 消息傳遞系統(tǒng) 管道通信系統(tǒng),1.1通信概述,80,共享存儲(chǔ)器系統(tǒng) 1)基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式 進(jìn)程共用某些數(shù)據(jù)結(jié)構(gòu),通過它們交換信息。程序員負(fù)責(zé)公用數(shù)據(jù)結(jié)構(gòu)的設(shè)置及對(duì)進(jìn)程間同步處理,如生產(chǎn)者消費(fèi)者問題中共享有界緩沖區(qū)(只適合傳遞少量數(shù)據(jù))。 2)基于共享存儲(chǔ)區(qū)的通信方式 即共享存儲(chǔ)器中的一塊區(qū)域。多個(gè)進(jìn)程可將該區(qū)域連接到本進(jìn)程上,并可向?qū)ζ胀ù鎯?chǔ)區(qū)域一樣讀、寫公用存儲(chǔ)分區(qū)。 注

42、:為訪問公共內(nèi)存需要設(shè)置必要的同步機(jī)制。,1.2共享存儲(chǔ)器系統(tǒng),81,消息傳遞系統(tǒng) (單機(jī)、多機(jī)系統(tǒng)、網(wǎng)絡(luò)中的主要進(jìn)程通信方式) 用戶利用兩個(gè)通信命令(發(fā)送命令和接收命令)實(shí)現(xiàn)通信。 直接通信 間接通信 進(jìn)程間的數(shù)據(jù)交換以消息(message)為單位; 消息傳遞過程對(duì)用戶是透明的。,1.3消息傳遞系統(tǒng),82,(1)直接通信方式(一般在一臺(tái)機(jī)器的多進(jìn)程中) 發(fā)送進(jìn)程直接將消息發(fā)送、掛接到接收進(jìn)程的消息緩沖隊(duì)列中。,發(fā)送進(jìn)程 接收進(jìn)程的 接收進(jìn)程 消息緩沖隊(duì)列,系統(tǒng)提供下述兩條通信原語(yǔ): Send(Receiver,message) ; .發(fā)送原語(yǔ) Receive(Sender,message)

43、; .接收原語(yǔ),1.3消息傳遞系統(tǒng),83,直接消息通信的兩種傳遞模式: 對(duì)稱形式: 特點(diǎn):通信形式是一對(duì)一的 系統(tǒng)調(diào)用命令: Send(P2,m1) 表示將消息m1發(fā)送給進(jìn)程P2; Receive(P1,m1) 表示接收由P1發(fā)過來的消息m1; 非對(duì)稱形式: 特點(diǎn):通信形式是多對(duì)一的(即C/S模式) 系統(tǒng)調(diào)用命令: Send(M,R) 表示將消息R發(fā)送給進(jìn)程M; Receive(pid,N) 表示接收消息至N,返回pid為發(fā)送進(jìn)程標(biāo)識(shí)。,1.3消息傳遞系統(tǒng),84,(2)間接通信方式(在多臺(tái)機(jī)器之間): 發(fā)送者進(jìn)程是把消息發(fā)送到一個(gè)共享的數(shù)據(jù)結(jié)構(gòu)信箱中去;接收者進(jìn)程到信箱中去取消息。信箱可實(shí)現(xiàn)“

44、實(shí)時(shí)”或“非實(shí)時(shí)”通信。,A,B,C,D,E,1.3消息傳遞系統(tǒng),85,有關(guān)信箱的系統(tǒng)調(diào)用命令: 信箱的創(chuàng)建和撤消原語(yǔ) 消息的發(fā)送與接收 Send(mailbox,message) Receive(mailbox,message) 信箱可分為三類: 1)私用信箱:由用戶進(jìn)程自己創(chuàng)建。擁有者可從中讀,其它進(jìn)程只能向其中發(fā)送。進(jìn)程結(jié)束,信箱消失。 2)公用信箱:由OS創(chuàng)建,允許系統(tǒng)中所有核準(zhǔn)用戶讀、放。 3)共享信箱:由某進(jìn)程創(chuàng)建,指明可共享的用戶名。這些進(jìn)程有權(quán)從信箱中讀。,1.3消息傳遞系統(tǒng),86,特性: 靈活性。靈活性表現(xiàn)在發(fā)送者進(jìn)程和接收者進(jìn)程之間的關(guān)系可以有一對(duì)一、一對(duì)多、多對(duì)一,以及多

45、對(duì)多的多種關(guān)系。 a. 一對(duì)一:專用的通信鏈路,兩個(gè)進(jìn)程間建立私用的通信連接,不受其他進(jìn)程的干擾和影響。 b. 多對(duì)一:多個(gè)向一個(gè)發(fā)信息。用于現(xiàn)代操作系統(tǒng) (客戶/服務(wù)器) c. 一對(duì)多:一個(gè)發(fā)送者和多個(gè)接收者的通信關(guān)系。發(fā)送進(jìn)程可利用廣播形式,向接收者發(fā)送消息。 d. 多對(duì)多:如公用信箱,允許多個(gè)進(jìn)程都能象信箱中投遞消息,也可從信箱中取走屬于自己的消息。 信箱可以是靜態(tài)、固定不變的,也可以是動(dòng)態(tài)、可變的。,1.3消息傳遞系統(tǒng),87,管道通信(unix系統(tǒng)) 管道:是連接接收進(jìn)程和發(fā)送進(jìn)程的共享文件。又稱pipe文件。它以字符流方式進(jìn)行數(shù)據(jù)傳送. 共享文件可居于外存.,1.4管道通信,88,管

46、道通信機(jī)制應(yīng)能提供三方面的協(xié)調(diào)功能: 1)互斥:管道可看作是臨界資源。對(duì)管道的操作是互斥的。 2)同步:當(dāng)寫進(jìn)程把一定數(shù)量數(shù)據(jù)寫入pipe后,便去等待,直到讀出進(jìn)程取走數(shù)據(jù)后,把它喚醒。反之亦然。 3)對(duì)方是否存在:只有確定對(duì)方存在時(shí),才可通信。,1.4管道通信,89,2.消息傳遞實(shí)現(xiàn),90,通信鏈路:在發(fā)送進(jìn)程和接收進(jìn)程之間為信息傳送而建立的一條通路。 建立方式: 顯式建立:由發(fā)送進(jìn)程利用建立命令建立,用完后用刪除命令拆除。(網(wǎng)絡(luò)中) 隱式建立:利用發(fā)送命令,系統(tǒng)自動(dòng)建立。(單機(jī)中) 連接方法 點(diǎn)點(diǎn)連接:一條鏈路只有兩個(gè)結(jié)點(diǎn) 多點(diǎn)連接:一條鏈路連接多個(gè)結(jié)點(diǎn) 通信方式 單向:發(fā)送進(jìn)程接收進(jìn)程

47、雙向:進(jìn)程 進(jìn)程 鏈路的容量 無容量:鏈路上沒有緩沖區(qū),不能暫存信息 有容量:鏈路上有緩沖區(qū),能暫存信息,2.1通信鏈路,91,消息的格式 消息可分為消息頭、消息正文兩部分。 有定長(zhǎng)消息格式、變長(zhǎng)消息格式兩種。,2.2消息格式,92,(1)執(zhí)行完Send命令后怎么辦? 阻塞自己等待接收者的回答信息后才繼續(xù)向前執(zhí)行,我們稱為阻塞發(fā)送。 發(fā)送完消息后不等回答就繼續(xù)向前執(zhí)行稱為不阻塞發(fā)送。 (2) 執(zhí)行Receive命令后怎么辦? 已經(jīng)有消息在等待接收者進(jìn)程接收,于是在接收這個(gè)消息后繼續(xù)前進(jìn)。 還沒有任何消息到來,于是它或者阻塞自己等待消息到來,或者干脆放棄接收的意圖,繼續(xù)前進(jìn)。前者稱阻塞接收,后者

48、稱非阻塞接收。 (3) 常用的進(jìn)程通信時(shí)的同步模式: 發(fā)送進(jìn)程阻塞,接收進(jìn)程阻塞(適用于無緩沖的情況) 發(fā)送進(jìn)程不阻塞、接收進(jìn)程阻塞(應(yīng)用廣泛,C/S結(jié)構(gòu)) 發(fā)送進(jìn)程不阻塞、接收進(jìn)程不阻塞(較常見),2.3進(jìn)程同步,93,3.消息緩沖隊(duì)列,94,1)消息緩沖區(qū): struct message_buffer char name; /發(fā)送者進(jìn)程標(biāo)識(shí)符 int size; /消息長(zhǎng)度 char text;/消息正文 struct message_buffer* next; /指向下一個(gè)消息緩沖區(qū)的指針 ; 2)PCB中增加的有關(guān)數(shù)據(jù)項(xiàng) struct process control block qm;

49、 / 消息隊(duì)列隊(duì)首指針 mutex ;/消息隊(duì)列互斥信號(hào)量 sm; /消息隊(duì)列私有信號(hào)量 ,3.1數(shù)據(jù)結(jié)構(gòu),95,接收消息進(jìn)程的PCB和它的消息緩沖鏈的關(guān)系,3.1數(shù)據(jù)結(jié)構(gòu),96,3.2實(shí)現(xiàn)過程,97,PCB,. Send(B, a) . Sender:A SIZE:消息長(zhǎng)度 TEXT:消息正文,. 消息鏈指針 .,. Receive(b) . Sender:A SIZE:消息長(zhǎng)度 TEXT:消息正文 .,a:,b:,接收進(jìn)程 B,發(fā)送進(jìn)程 A,98,99,注: 應(yīng)互斥地使用緩沖隊(duì)列,應(yīng)設(shè)mutex作為互斥信號(hào)量 消息緩沖隊(duì)列是按接收進(jìn)程排列,每個(gè)接收進(jìn)程擁有自己的消息隊(duì)列。因此同一時(shí)間存在多

50、個(gè)消息隊(duì)列;且這些隊(duì)列長(zhǎng)度不固定。 當(dāng)緩沖區(qū)無消息時(shí),接收進(jìn)程不能接收到任何消息。Sm作為接收進(jìn)程的私用信號(hào)量(初值為0)。,3.2實(shí)現(xiàn)過程,100,Send(receiver,a) 向系統(tǒng)申請(qǐng)一個(gè)消息緩沖區(qū); wait(mutex); 把發(fā)送區(qū)a送入新申請(qǐng)的消息緩沖區(qū),把消息緩沖區(qū)掛入接收進(jìn)程的消息隊(duì)列。 signal(mutex); signal(Sm); ,Receive(b) wait(Sm); wait(mutex); 摘下消息隊(duì)列中的消息n,將消息從緩沖區(qū)復(fù)制到接收區(qū)b ; 釋放緩沖區(qū); signal(mutex); ,發(fā)送進(jìn)程是否可以發(fā)送消息,取決于是否申請(qǐng)到緩沖區(qū)。,3.2實(shí)現(xiàn)

51、過程,101,void send(receiver,a) getbuf(a.size,i); i.sender=a.sender; i.size=a.size; i.text=a.text; i.next=0; getid(PCB.receiver.j); wait(j.mutex); insert(j.mq,i); signal(j.mutex); signal(j.sm); ,a為發(fā)送進(jìn)程在自己的內(nèi)存空間中設(shè)置的一發(fā)送區(qū)。 把消息正文、發(fā)送進(jìn)程標(biāo)識(shí)符、消息長(zhǎng)度等信息填入a中。 根據(jù)a.size申請(qǐng)一緩沖區(qū)i,把a(bǔ)中信息復(fù)制到i中, 獲得接收進(jìn)程的內(nèi)部標(biāo)識(shí)符j,將i掛在j.mq上。因?yàn)橄㈥?duì)

52、列為臨界資源,對(duì)其操作要求互斥。,3.3發(fā)送原語(yǔ),102,void receive(b) j=internal name; wait(j.sm); wait(j.mutex); remove(j.mq,i); signal(j.mutex); b.sender:=i.sender; b.size:=i.size; b.text:=i.text; putbuf(i); ,在接收消息之前,需先在自己的內(nèi)存空間建立一個(gè)接受區(qū)b,接收進(jìn)程調(diào)用接收原語(yǔ),在自己的消息緩沖隊(duì)列mq中,摘下第一個(gè)消息緩沖區(qū)(如i),將其復(fù)制到以b為首址的指定消息接收區(qū)內(nèi)并釋放該消息緩沖區(qū)。,3.4接受原語(yǔ),103,線 程,為

53、進(jìn)一步提高系統(tǒng)內(nèi)程序并發(fā)執(zhí)行的程度,增大系統(tǒng)吞吐量,提出了比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位 : 線程,104,線程概念,105,1.線程的引入與定義,106,以往都是以進(jìn)程作為OS獨(dú)立運(yùn)行的基本單位. 引入進(jìn)程的目的:使多個(gè)程序并發(fā)執(zhí)行以改善資源的利用率和提高系統(tǒng)的吞吐量 進(jìn)程的兩個(gè)基本屬性: 資源的擁有者: 給每個(gè)進(jìn)程分配一PCB,保存進(jìn)程映像,控制一些資源(文件,I/O設(shè)備),有狀態(tài)、優(yōu)先級(jí)等。 獨(dú)立調(diào)度和運(yùn)行單位: 進(jìn)程是一個(gè)執(zhí)行軌跡。 以上兩個(gè)屬性構(gòu)成進(jìn)程并發(fā)執(zhí)行的基礎(chǔ)。,1.1進(jìn)程面臨的問題,107,系統(tǒng)必須完成的操作: 進(jìn)程的創(chuàng)建,需要除CPU之外的必須為之分配的資源,如內(nèi)存空間、

54、I/O設(shè)備以及建立相應(yīng)的PCB; 進(jìn)程的撤銷,必須先對(duì)所有的占用資源進(jìn)行回收操作,然后撤銷PCB; 進(jìn)程的切換,要保留當(dāng)前進(jìn)程的CPU環(huán)境和設(shè)置新選中進(jìn)程的CPU環(huán)境。 缺點(diǎn): 時(shí)間空間開銷大,在系統(tǒng)中設(shè)置的進(jìn)程數(shù)目不宜過多,進(jìn)程切換的頻率不宜過高,限制并發(fā)度的提高。,1.1進(jìn)程面臨的問題,108,解決方案 將原來進(jìn)程的兩個(gè)屬性(資源分配單位和運(yùn)行調(diào)度單位)分開處理。即對(duì)作為運(yùn)行調(diào)度的基本單位,不作為資源分配的基本單位 引入線 為了簡(jiǎn)化進(jìn)程間的通信,以較小的時(shí)間開銷來提高進(jìn)程內(nèi)的并發(fā)程度。,1.2問題解決思路,109,又稱“輕型進(jìn)程”(Light-Weight Process),具有許多傳統(tǒng)進(jìn)

55、程所具有的特征。 線程的屬性: 是進(jìn)程中的一個(gè)運(yùn)行實(shí)體, 是一個(gè)CPU調(diào)度單位;,只擁有少量的系統(tǒng)資源(線程控制塊(TCB)、線程狀態(tài)、寄存器和堆棧)等;線程自己基本不擁有系統(tǒng)資源,同一進(jìn)程下的線程可以共享進(jìn)程擁有的資源。,與進(jìn)程的關(guān)系:進(jìn)程創(chuàng)建線程,一個(gè)進(jìn)程可以有一個(gè)或多個(gè)線程。 功能分配:進(jìn)程作為資源分配的單位,線程作為系統(tǒng)調(diào)度和分派的獨(dú)立單位。,1.3線程的定義,110,2.線程的屬性與狀態(tài),111,可并發(fā)執(zhí)行:通常一個(gè)進(jìn)程包含多個(gè)線程,一個(gè)線程可創(chuàng)建和撤銷另一個(gè)線程,同一進(jìn)程的多個(gè)線程間可并發(fā)執(zhí)行。,獨(dú)立性:是處理機(jī)的獨(dú)立調(diào)度單位,在單CPU,多線程交替占用;多CPU,同時(shí)占用不同的C

56、PU,不同的線程可執(zhí)行相同的程序如同一服務(wù)被不同用戶使用。,2.1線程的屬性,唯一性:每個(gè)線程有唯一的標(biāo)識(shí)符、一張線程描述表(線程執(zhí)行的寄存器和棧等現(xiàn)場(chǎng)狀態(tài))和線程控制塊(控制線程運(yùn)行)。,共享性:每個(gè)線程共享所屬進(jìn)程的資源,同一進(jìn)程中的各個(gè)線程共享該進(jìn)程的內(nèi)存地址空間,112,狀態(tài)轉(zhuǎn)換:與進(jìn)程轉(zhuǎn)換相近,有對(duì)應(yīng)的種基本操作:創(chuàng)建、阻塞、喚醒、調(diào)度和終止。具體的狀態(tài)轉(zhuǎn)換圖參見教材。,線程同樣具有就緒、阻塞和執(zhí)行三種基本狀態(tài)。同樣在運(yùn)行中呈現(xiàn)間斷性。,2.2線程的狀態(tài)及轉(zhuǎn)換,113,創(chuàng)建和撤銷線程花費(fèi)時(shí)間少:不需另行分配和回收資源,2. 3線程的好處,切換線程花費(fèi)時(shí)間少:不需保留舊環(huán)境,設(shè)置新環(huán)境。,線程通信不需額外的機(jī)制:不同一進(jìn)程的線程共享內(nèi)存和文件,通信無須調(diào)用內(nèi)核,充分

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論