linux進(jìn)程管理實(shí)驗(yàn)_第1頁(yè)
linux進(jìn)程管理實(shí)驗(yàn)_第2頁(yè)
linux進(jìn)程管理實(shí)驗(yàn)_第3頁(yè)
linux進(jìn)程管理實(shí)驗(yàn)_第4頁(yè)
linux進(jìn)程管理實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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)介

第四章進(jìn)程管理實(shí)驗(yàn)4.1實(shí)驗(yàn)?zāi)康囊?、加深?duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別

二.進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)

三.分析進(jìn)程爭(zhēng)用資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法

四.了解Linux系統(tǒng)中進(jìn)程通信的基本原理

4.2準(zhǔn)備知識(shí)

4.2.1基本概念

進(jìn)程的概念

進(jìn)程與程序的區(qū)別

并發(fā)執(zhí)行的概念

進(jìn)程互斥的概念

進(jìn)程通信的基本原理

14.2.2系統(tǒng)調(diào)用圖4-1系統(tǒng)調(diào)用的參數(shù)表方式變?cè)恚篘參數(shù)1參數(shù)2……參數(shù)n(a)直接方式trap參數(shù)1參數(shù)2……參數(shù)n××變?cè)恚篘指針(b)間接方式系統(tǒng)調(diào)用是一種進(jìn)入系統(tǒng)空間的辦法。通常,在OS的核心中都設(shè)置了一組用于實(shí)現(xiàn)各種系統(tǒng)功能的子程序,并將它們提供給程序員使用。程序員在需要OS提供某種服務(wù)的時(shí)候,便可以調(diào)用一條系統(tǒng)調(diào)用命令,去實(shí)現(xiàn)希望的功能,這就是系統(tǒng)調(diào)用。因此,系統(tǒng)調(diào)用就像一個(gè)黑箱子一樣,對(duì)用戶屏蔽了操作系統(tǒng)的具體動(dòng)作而只是提供了調(diào)用功能的接口。24.2.3相關(guān)函數(shù)一.fork()函數(shù):用于創(chuàng)建一個(gè)新進(jìn)程(子進(jìn)程)intfork();pid=fork();if(pid<0){printf("forkerror\n");exit(0);}3if(pid==0){printf("Thechildprocessisrunningnow!\n");exit(0);}if(pid>0){printf("Theparentprocessisrunningnow!\n");exit(0);}4圖3-2父進(jìn)程和子進(jìn)程的內(nèi)存映像用戶內(nèi)存區(qū)父進(jìn)程的vm_arce_structvmstartvmstartcount=2vmstartvmstartcount=2子進(jìn)程的vm_arce_struct子進(jìn)程數(shù)據(jù)區(qū)子進(jìn)程堆棧區(qū)父進(jìn)程數(shù)據(jù)區(qū)父進(jìn)程堆棧區(qū)共享正文區(qū)5二.wait()函數(shù):用來(lái)控制父進(jìn)程與子進(jìn)程的同步。

#include<sys/type.h>#include<sys/wait.h>(pid_t)wait(int*statloc);三.exit()函數(shù):進(jìn)程結(jié)束最常調(diào)用的函數(shù)#include<stdio.h>voidexit(intstatus);四.kill()函數(shù):用于刪除執(zhí)行中的程序或者任務(wù)

kill(int

PID,intIID);6五.signal()函數(shù)signal()函數(shù)是允許調(diào)用進(jìn)程控制軟中斷信號(hào)的處理

#include<signal.h>int

sig;void(*func)();signal(sig,function);7信號(hào)功能值SIGHUP掛起1SIGINT鍵盤(pán)中斷,鍵盤(pán)按Delete鍵或Break鍵2SIGQUIT鍵盤(pán)按Quit鍵3SIGILL非法指令4SIGTRAP跟蹤中斷5SIGIOTIOT指令6SIGBUS總線錯(cuò)7SIGFPE浮點(diǎn)運(yùn)算溢出8SIGKILL要求終止進(jìn)程9SIGUSR1用戶定義信號(hào)#110SIGSEGV段違法11SIGUSR2用戶定義信號(hào)#212SIGPIPE向沒(méi)有讀進(jìn)程的管道上寫(xiě)13SIGALRM定時(shí)器告警,時(shí)間到14SIGTERMkill發(fā)出的軟件結(jié)束信號(hào)15SIGCHLD子進(jìn)程死17SIGCONT若已停止則繼續(xù)18SIGPWR電源故障308六.pipe()函數(shù)pipe()函數(shù)用于創(chuàng)建一個(gè)管道。其調(diào)用格式為:#include

<unistd.h>pipe(intfp[2]);94.3.1編制實(shí)現(xiàn)軟中斷通信的程序

Childprocess1iskilledbyparent!!Childprocess2iskilledbyparent!!Parentprocessiskilled!!多運(yùn)行幾次編寫(xiě)的程序,簡(jiǎn)略分析出現(xiàn)不同結(jié)果的原因。4.3實(shí)驗(yàn)內(nèi)容104.3.2編制實(shí)現(xiàn)進(jìn)程的管道通信的程序

使用系統(tǒng)調(diào)用pipe()建立一條管道線,兩個(gè)子進(jìn)程分別向管道寫(xiě)一句話:Childprocess1issendingamessage!Childprocess2issendingamessage!而父進(jìn)程則從管道中讀出來(lái)自于兩個(gè)子進(jìn)程的信息,顯示在屏幕上。

要求:父進(jìn)程先接收子進(jìn)程P1發(fā)來(lái)的消息,然后再接收子進(jìn)程P2發(fā)來(lái)的消息。114.4實(shí)驗(yàn)指導(dǎo)4.4.1進(jìn)程的軟中斷通信

附:算法流程圖、源代碼、運(yùn)行結(jié)果4.4.2進(jìn)程的管道通信附:算法流程圖、源代碼、運(yùn)行結(jié)果124.4.1進(jìn)程的軟中斷通信參考程序源代碼:#include<stdio.h>#include<signal.h>#include<unistd.h>#include<sys/types.h>13圖4-3軟中斷通信程序流程圖14int

wait_flag;voidstop();main(){intpid1,pid2; //定義兩個(gè)進(jìn)程號(hào)變量

signal(3,stop); //或者signal(14,stop);while((pid1=fork())==-1); //若創(chuàng)建子進(jìn)程1不成功,則空循環(huán)15

if(pid1>0){ //子進(jìn)程創(chuàng)建成功,pid1為進(jìn)程號(hào)while((pid2=fork())==-1); //創(chuàng)建子進(jìn)程2if(pid2>0){

wait_flag=1;sleep(5); //父進(jìn)程等待5秒

kill(pid1,16); //殺死進(jìn)程116

kill(pid2,17);//殺死進(jìn)程2wait(0); //等待第1個(gè)子進(jìn)程1結(jié)束的信號(hào)

wait(0); //等待第2個(gè)子進(jìn)程2結(jié)束的信號(hào)

printf("\nParentprocessiskilled!!\n");17

exit(0); //父進(jìn)程結(jié)束

}else{

wait_flag=1;signal(17,stop); //等待進(jìn)程2被殺死的中斷號(hào)17

printf("\nChildprocess2iskilledbyparent!!\n");18

exit(0);}}else{

wait_flag=1;signal(16,stop); //等待進(jìn)程1被殺死的中斷號(hào)16

printf("\nChildprocess1iskilledbyparent!!\n");exit(0);19

}}voidstop(){wait_flag=0;}20程序運(yùn)行結(jié)果

:Childprocess1iskilledbyparent!!Childprocess2iskilledbyparent!!Parentprocessiskilled!!Childprocess2iskilledbyparent!!Childprocess1iskilledbyparent!!Parentprocessiskilled!!214.4.2進(jìn)程的管道通信參考程序源代碼:

#include<unistd.h>#include<signal.h>#include<stdio.h>intpid1,pid2; //定義兩個(gè)進(jìn)程變量22圖4-4

管道通信程序流程圖23main(){

intfd[2];charOutPipe[100],InPipe[100]; //定義兩個(gè)字符數(shù)組

pipe(fd); //創(chuàng)建管道

while((pid1=fork())==-1); //如果進(jìn)程1創(chuàng)建不成功,則空循環(huán)24

if(pid1==0){ //如果子進(jìn)程1創(chuàng)建成功,pid1為進(jìn)程號(hào)

lockf(fd[1],1,0); //鎖定管道

sprintf(OutPipe,"\nChildprocess1issendingmessage!\n"); //給Outpipe賦值

write(fd[1],OutPipe,50); //向管道寫(xiě)入數(shù)據(jù)25

sleep(5); //等待讀進(jìn)程讀出數(shù)據(jù)

lockf(fd[1],0,0); //解除管道的鎖定

exit(0); //結(jié)束進(jìn)程1}26else{while((pid2=fork())==-1); //若進(jìn)程2

溫馨提示

  • 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)論