《Linux內(nèi)核與編程》PPT課件

《Linux內(nèi)核與編程》PPT課件

ID:39358263

大?。?99.84 KB

頁(yè)數(shù):36頁(yè)

時(shí)間:2019-07-01

《Linux內(nèi)核與編程》PPT課件_第1頁(yè)
《Linux內(nèi)核與編程》PPT課件_第2頁(yè)
《Linux內(nèi)核與編程》PPT課件_第3頁(yè)
《Linux內(nèi)核與編程》PPT課件_第4頁(yè)
《Linux內(nèi)核與編程》PPT課件_第5頁(yè)
資源描述:

《《Linux內(nèi)核與編程》PPT課件》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、實(shí)驗(yàn)三 使用Linux高級(jí)IPC陳毅東提綱結(jié)束進(jìn)程間通信概述目標(biāo)問(wèn)題——哲學(xué)家進(jìn)餐問(wèn)題問(wèn)題描述錯(cuò)誤與不好的解法并行度較高的解法Linux高級(jí)IPC機(jī)制概述SystemV信號(hào)燈SystemV共享內(nèi)存區(qū)實(shí)現(xiàn)的其他問(wèn)題實(shí)習(xí)題進(jìn)程間通信概述(1):引子#include #include intresult; main() { pid_tpid; result=0; pid=fork(); if(pid<0)exit(-1);if(pid){ pid=fork(); if(pid<0)exit(-1); if(pid==0){ slee

2、p(3); result=result+20; exit(0); } }else{ sleep(3); result=result+10; exit(0); } while(wait((int*)0)!=-1); printf("%d",result); exit(0); }輸出結(jié)果是什么?進(jìn)程間通信概述(2)進(jìn)程是相互獨(dú)立的,進(jìn)程間的通信需要專門的機(jī)制。進(jìn)程之間的通信可以經(jīng)由文件系統(tǒng),但實(shí)際使用較為復(fù)雜(例如,需要鎖機(jī)制)。UNIXIPC(InterProcessCommunication)機(jī)制是各種進(jìn)程通信方式的統(tǒng)稱。Linux下的進(jìn)程通信手段基本上是從Unix平

3、臺(tái)上的進(jìn)程通信手段繼承而來(lái)的。進(jìn)程間通信概述(3)對(duì)于UNIX的發(fā)展,貝爾實(shí)驗(yàn)室和BSD在進(jìn)程間通信方面的側(cè)重點(diǎn)有所不同:貝爾實(shí)驗(yàn)室對(duì)Unix早期的進(jìn)程間通信手段進(jìn)行了系統(tǒng)的改進(jìn)和擴(kuò)充,形成了“SystemVIPC”,通信進(jìn)程局限在單個(gè)計(jì)算機(jī)內(nèi);BSD則主要考慮跨計(jì)算機(jī)的進(jìn)程間通信,形成了基于套接口(socket)的進(jìn)程間通信機(jī)制。進(jìn)程間通信概述(4)返回最初的UNIXIPCSystemVIPC基于Socket的IPCLinuxIPCPOSIXIPC最初的UnixIPC:信號(hào)、管道、FIFO;SystemVIPC:消息隊(duì)列、信號(hào)量、共享內(nèi)存區(qū);POSIXIPC:消息隊(duì)列、

4、信號(hào)量、共享內(nèi)存區(qū)。哲學(xué)家進(jìn)餐問(wèn)題的描述五個(gè)哲學(xué)家圍坐在一張圓桌周圍,每個(gè)哲學(xué)家面前都有一碗米飯,相鄰的兩碗之間有一支筷子(如圖)。哲學(xué)家的生活包含兩種活動(dòng):即吃飯和思考。當(dāng)一個(gè)哲學(xué)家覺(jué)得餓時(shí),他就試圖分兩次去取他左邊和右邊的筷子,每次拿起一支,但不分次序。如果成功地獲得了一雙筷子,他就開(kāi)始吃飯,吃完以后放下筷子繼續(xù)思考。這樣,問(wèn)題就是,為每個(gè)哲學(xué)家寫(xiě)一段程序來(lái)描述其行為,要求不死鎖。返回錯(cuò)誤與不好的解法(1)解法一:可能進(jìn)入“死鎖”狀態(tài)#defineN5voidphilosopher(inti){while(TRUE){think();take-chopstick(i)

5、;take-chopstick((i+1)%N);eat();put-chopstick(i);put-chopstick((i+1)%N);}}若每個(gè)哲學(xué)家進(jìn)程都運(yùn)行到此句后發(fā)生進(jìn)程切換,則進(jìn)入死鎖。錯(cuò)誤與不好的解法(2)#defineN5voidphilosopher(inti){while(TRUE){think();do{take-chopstick(i);if(can-take-chopstick((i+1)%N))break;elseput-chopstick(i);}while(TRUE);eat();put-chopstick(i);put-chopsti

6、ck((i+1)%N);}}解法二:可能進(jìn)入“饑餓”狀態(tài)不妨假設(shè)此函數(shù)能做到“測(cè)試且設(shè)置”。這種解法可能會(huì)造成下面情況:哲學(xué)家們不斷地重復(fù)“拿起各自左邊的筷子又放下”的動(dòng)作,誰(shuí)也不能進(jìn)餐。注意:這時(shí)和解法一的狀態(tài)不同,這時(shí)進(jìn)程都沒(méi)有阻塞。錯(cuò)誤與不好的解法(3)#defineN5typedefintsemaphore;semaphoremutex=1;voidphilosopher(inti){while(TRUE){think();down(mutex);take-chopstick(i);take-chopstick((i+1)%N);eat();put-chopsti

7、ck(i);put-chopstick((i+1)%N);up(mutex);}}返回解法三:可行但效率低下本解法從理論上可行,但從實(shí)際角來(lái)看,有一局限性:同一時(shí)刻只能有一位哲學(xué)家進(jìn)餐。而這里有五支筷子,實(shí)際上應(yīng)能允許兩位哲學(xué)家同時(shí)進(jìn)餐。并行度較高的解法(1)#defineN5#defineLEFT(i+N-1)%N#defineRIGHT(i+1)%N#defineTHINKING0#defineHUNGRY1#defineEATING2typedefintsemaphore;intstate[N];semaphoremut

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。