Linux內(nèi)核與編程.ppt_第1頁
Linux內(nèi)核與編程.ppt_第2頁
Linux內(nèi)核與編程.ppt_第3頁
Linux內(nèi)核與編程.ppt_第4頁
Linux內(nèi)核與編程.ppt_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實(shí)驗(yàn)3linux高級IPC,陳毅東,提綱,結(jié)束,進(jìn)程間通訊概要目標(biāo)問題哲學(xué)家飲食問題描述錯(cuò)誤和壞解法并行度高的解法Linux高級IPC反應(yīng)歷程概要System V信號System V共有存儲區(qū)實(shí)現(xiàn)了其他問題實(shí)習(xí)問題,進(jìn)程間通訊概要(1) :使用引子、#的main () 結(jié)果=0; pid=fork (); if (PID0)退出(-1 ); if(pid) pid=fork (); if (PID0)退出(-1 ); 指定時(shí)間(PID=0)休眠(3); result=result 20; exit(0); 休眠(3); result=result 10; exit(0); while (等于0

2、 )!=-1 ); 打印(% dn,結(jié)果); exit(0); 輸出結(jié)果是什么?進(jìn)程間通訊概要(2)、進(jìn)程相互獨(dú)立,進(jìn)程間通訊需要專用的反應(yīng)歷程。 進(jìn)程之間的通訊可以通過文件系統(tǒng),但實(shí)際使用很復(fù)雜(例如,需要搖滾樂反應(yīng)歷程)。 UNIX IPC (inter process communication )機(jī)構(gòu)是各種過程通訊定方式的總稱。 Linux上的進(jìn)程通訊工具基本上從Unix平臺上的進(jìn)程通訊工具繼承。進(jìn)程間通訊的概要(3)、對于UNIX的發(fā)展,貝爾實(shí)驗(yàn)室和BSD在進(jìn)程間通訊方面不同:貝爾實(shí)驗(yàn)室對UNIX的初期進(jìn)程間通訊工具進(jìn)行了系統(tǒng)的改良和擴(kuò)展,形成了“System V IPC”,溝通過程

3、僅限于單臺計(jì)算機(jī)內(nèi)。 BSD主要考慮校正設(shè)備之間的過程間通訊而形成基于套接口的過程間通訊機(jī)制。 進(jìn)程間通訊概要(4)、返回、第一個(gè)Unix IPC :信號、管道、FIFO; 系統(tǒng)v IPC :消息隊(duì)列、信號量、共享存儲器區(qū)域POSIX IPC :消息隊(duì)列、信號量、共享存儲器區(qū)域。 根據(jù)哲學(xué)家的飲食問題的說明,5個(gè)哲學(xué)家圍坐在圓桌的周圍,各個(gè)哲學(xué)家面前有一碗飯,相鄰的兩碗之間有筷子(圖)。 哲學(xué)家的生活包括飲食和思考兩種活動(dòng)。 哲學(xué)家感到餓的時(shí)候,他試圖把左右筷子分成兩次去取。 成功拿到筷子的話,他就開始吃飯,吃完了就放下筷子繼續(xù)思考。 就這樣,給每個(gè)哲學(xué)家寫一個(gè)普通話計(jì)程儀來記述行動(dòng),不死搖滾

4、樂是個(gè)問題。 門,錯(cuò)誤和壞的解法(1),解法1 :可能進(jìn)入死搖滾樂狀態(tài),# definen5void philosopher (inti ) while (true ) think () ) take-chopstick (I ); 任務(wù)選擇(I1) % n ); eat (); 補(bǔ)償(I ); 選擇(I1) % n ) :錯(cuò)誤和不良解法(2),#定義5語音飛行器(inti ) while (true ) think (); 多任務(wù)處理(I ); 卡片選擇(I1) % n )中斷。 激光輸出選擇(I ); 威爾(真); eat (); 補(bǔ)償(I ); put-chopstick(i 1)%N

5、) :解法2 :有進(jìn)入“饑餓”狀態(tài)的可能性,這個(gè)解法哲學(xué)家們不斷地重復(fù)“把各自的左筷子拿下來”的動(dòng)作,有可能成為誰也不能吃飯的狀況。 注意:與此時(shí)解法1的狀態(tài)不同,此時(shí)進(jìn)程沒有被封搖滾樂。 錯(cuò)誤和不良解法(3)、#define N 5 typedef int semaphore; semaphore mutex=1; 語音支持者(inti )威爾(true ) think (); 關(guān)(多); 任務(wù)選擇(I ); 任務(wù)選擇(I1) % n ); eat (); 補(bǔ)償(I ); 上傳選擇(I1) % n ) :上傳(mutex ); 因此,解法3 :可行但效率低,本解法理論上可行,但從實(shí)際角度來看

6、,有一個(gè)限制:云同步只有哲學(xué)家一個(gè)人可以吃飯。 這里有五雙筷子,實(shí)際上應(yīng)該允許兩位哲學(xué)家去云同步吃飯。并行度較高的解法(1)、# definen5# define left (in-1 ) % n # define right (I1) % n # define thinking0#。 國際站; semaphore mutex=1; 神奇寶貝sn; 語音支持者(inti )威爾(true ) think (); 任務(wù)選擇(I ); eat (); 補(bǔ)償(I ); 并行度高的解法(2),門,void put-chopsticks(int i) down (,void測試(I ) if (stat

7、ei=hungry,) 主函數(shù)為:打開信號共享內(nèi)存區(qū)域頭文件或由IPCsemgetshmget控制的IPC操作semctlshmctl IPC操作函數(shù)semopshmat,其中shmdt System V IPC對象使用key_t類型的值作為其名稱System V IPC對象以一定的網(wǎng)站數(shù)據(jù)庫權(quán)限控制網(wǎng)站數(shù)據(jù)庫。 返回、System V IPC的名稱、System V IPC很有名,可以通訊端口沒有親緣關(guān)系的進(jìn)程網(wǎng)站數(shù)據(jù)庫到同一IPC對象。 它的名稱類型是key_t,可以使用ftok函數(shù)賦值IPC_PRIVATE或直接取值。 ftok函數(shù)原型: # include # include key

8、_ tft ok (計(jì)數(shù)卡*參數(shù),int id ); 功能:將現(xiàn)有路徑名和整數(shù)標(biāo)識符轉(zhuǎn)換為稱為IPC牛鼻子的key_t值。 門值:如果成功則返回IPC牛鼻子,錯(cuò)誤則返回-1。 說明: 1、ftok生成的牛鼻子值不是IPC_PRIVATE。 保不定ftok生成的牛鼻子值是唯一的3 .生成牛鼻子的文件在該IPC對象存在時(shí)不能刪除。 是的,System V IPC對象的網(wǎng)站數(shù)據(jù)庫權(quán)限必須設(shè)置IPC對象的網(wǎng)站數(shù)據(jù)庫權(quán)限,以防止非法網(wǎng)站數(shù)據(jù)庫共享IPC對象。 System V IPC對象的網(wǎng)站數(shù)據(jù)庫權(quán)限與文件系統(tǒng)中的文件的網(wǎng)站數(shù)據(jù)庫權(quán)限類似,由三個(gè)9位的組表示,三個(gè)組分別表示所有者、成員和其他用戶對IP

9、C對象的網(wǎng)站數(shù)據(jù)庫權(quán)限,每組中只有三位是一般來說,為了安全起見,在創(chuàng)建IPC對象時(shí)要設(shè)置的網(wǎng)站數(shù)據(jù)庫權(quán)限被限制為0600,該圖示出了只對所有者可讀和寫入。門、系統(tǒng)v信號、semget semctl semop down和up的實(shí)現(xiàn)、門、semget(1)函數(shù)說明、原型: # include # include int功能:創(chuàng)建或打開信號定徑套。 門值:非負(fù)信號標(biāo)識符返回正常,錯(cuò)誤返回-1。 說明: 1,key是要制作或打開的信號燈的集合的名稱,nsems表示信號燈集合中包含的信號燈的數(shù)量,oflag是包含網(wǎng)站數(shù)據(jù)庫權(quán)和控制域兩個(gè)信息的二進(jìn)制位信息標(biāo)志。 最低9位二進(jìn)制位表示網(wǎng)站數(shù)據(jù)庫權(quán),控制字

10、段的IPC_CREAT二進(jìn)制位和IPC_EXCL二進(jìn)制位的設(shè)定狀況與殘奧儀表key一起決定正式調(diào)用的操作。 semget(2)工作流程,if (key=IPC_PRIVATE )創(chuàng)建一個(gè)新的信號燈定徑套,并返回其id。 else if (存在與密鑰關(guān)聯(lián)的信號燈集合) if (標(biāo)志、門、semctl(1)函數(shù)說明、原型: # include # int semctl )。 功能:控制semid標(biāo)識牌的信號機(jī)集合。 門值:非負(fù)值返回正常,錯(cuò)誤返回-1。 說明: 1、cmd是針對信號機(jī)集的控制命令,有GETVAL、SETVAL、GETALL、SETALL、IPC_RMID等,我們只使用最后兩個(gè)。 s

11、emnum識別該信號機(jī)定徑套中的某個(gè)成員(以0為第一),只用于GETVAL、SETVAL等命令。 3、arg是可選的,根據(jù)殘奧儀表cmd,GETALL和SETALL等命令使用殘奧儀表arg。 semctl(2)union semun、union semun的定義為union semun int val; 僅適用于SETVAL指令struct semid_ds * buf。 指令ushort * array,例如IPC_SET; 請注意,諸如SETALL之類的命令不會在任何系統(tǒng)頭文件中顯示此聯(lián)合,因此應(yīng)用程序必須聲明它。 門,semop(1)函數(shù)說明,原型: # include # includ

12、eintsemop (intsemid,struct sembuf * opsptr,)功能:操作semid信號燈集合中信號燈。 門值:正常返回0,錯(cuò)誤返回-1。 說明: 1、opsptr是指向結(jié)構(gòu)struct sembuf的指針,也可以是此類結(jié)構(gòu)數(shù)組的標(biāo)頭指針。在排列的各個(gè)要素中,包含與對于信號燈集合內(nèi)的一個(gè)信號的操作相關(guān)的信息,可以在云同步中實(shí)現(xiàn)對于多個(gè)信號燈的操作。 2、nops是指opsptr所指的結(jié)構(gòu)陣列中的要素?cái)?shù)。 另外,結(jié)構(gòu)和結(jié)構(gòu)的定義也可以是結(jié)構(gòu)和短序列號; /信號燈編號: 0,1, nsems-1短信號燈_ op; 信號燈操作:0 short sem_flg; /操作標(biāo)識牌:

13、在此對應(yīng)于0 sem_op的不同值的操作(將信號機(jī)的當(dāng)前值設(shè)為SV ):SEM-op=ABS (SEM _ op ) ) SV=SV-ABS (SEM _ ABS else sleep; goto開始; sem_op0:sv=sv sem_op。 啟動(dòng)被信號量封搖滾樂的所有進(jìn)程測試sem_op=0:sv是否為0。 門、關(guān)、向上和向下的實(shí)現(xiàn)、語音向下(int sid、int sn )結(jié)構(gòu)簡單; 正在進(jìn)行中。 正在進(jìn)行。 op.sem_flg=0; 抽象(sid ),抽象(int sid ),抽象(int sn )結(jié)構(gòu)抽象。 正在進(jìn)行中。 op.sem_op=1。 op.sem_flg=0; se

14、mop(sid,return,System V共享內(nèi)存區(qū)域,使用shmget shmctl shmat和shmdt共享內(nèi)存區(qū)域的一般進(jìn)程,return,shmget,手板模型: #include#include# )功能:創(chuàng)建共享內(nèi)存區(qū)域或門值:非負(fù)內(nèi)存區(qū)域標(biāo)識符返回正常,錯(cuò)誤返回-1。 說明: 1、size表示共享內(nèi)存區(qū)域的大小(字節(jié)單位) 2、key和oflag的說明基本上與semget相同。 3 .打開或創(chuàng)建共享內(nèi)存區(qū)域。 沒有提供調(diào)用進(jìn)程并將其網(wǎng)站數(shù)據(jù)庫到內(nèi)存區(qū)域的方法。 必須調(diào)用shmat。門、shmctl、原型: # include # includeintshmctl (ints

15、hmid、int cmd、struct shmid_ds *buff )功能:控制由shmid標(biāo)識的共享內(nèi)存區(qū)域。 門值:正常返回0,錯(cuò)誤返回-1。 說明: 1、殘奧儀表cmd是對共享內(nèi)存區(qū)域的控制命令,IPC_RMID、IPC_SET或IPC_STAT,僅使用第一個(gè)。 2、buff主要用于命令I(lǐng)PC_SET和IPC_STAT,如果命令是IPC_RMID,則可以直接提供空值。 戶、戶、shmat和shmdt、原型: # include # include void * shmat (intshmid、const void * shmaddr、int) int shmdt(const void * shmaddr ); 功能: shmat用于將打開的共享內(nèi)存區(qū)域附著到調(diào)用進(jìn)程的地址空間。 shmdt用于切斷這個(gè)內(nèi)存區(qū)域。 門值:錯(cuò)誤返回-1,shmat成功返回映射區(qū)域的起始地址,如果shmdt成功則返回0。 說明: shmat的shmaddr和flag可以用于

溫馨提示

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

評論

0/150

提交評論