版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《離婚法律程序執(zhí)行細(xì)則協(xié)議》版
- 二零二五版保險(xiǎn)及期貨居間業(yè)務(wù)委托管理合同3篇
- 二零二五年度智慧社區(qū)商業(yè)配套租賃協(xié)議3篇
- 二零二五年度集成墻板原材料期貨交易與風(fēng)險(xiǎn)管理合同2篇
- 二零二五年度高端人才引進(jìn)與培養(yǎng)合同5篇
- 臨時(shí)建筑建設(shè)合同樣本2024年版版B版
- 2025年度智能廚房設(shè)備研發(fā)、安裝與培訓(xùn)服務(wù)合同3篇
- 二零二五版公共工程合同擔(dān)保制度及操作細(xì)則3篇
- 二零二五年電子設(shè)備采購(gòu)與技術(shù)服務(wù)合同2篇
- 2024年簡(jiǎn)化版資金借用協(xié)議范本版B版
- DB-T29-74-2018天津市城市道路工程施工及驗(yàn)收標(biāo)準(zhǔn)
- 小學(xué)一年級(jí)20以內(nèi)加減法混合運(yùn)算3000題(已排版)
- 智慧工廠數(shù)字孿生解決方案
- 病機(jī)-基本病機(jī) 邪正盛衰講解
- 品管圈知識(shí) 課件
- 非誠(chéng)不找小品臺(tái)詞
- 2024年3月江蘇省考公務(wù)員面試題(B類)及參考答案
- 患者信息保密法律法規(guī)解讀
- 老年人護(hù)理風(fēng)險(xiǎn)防控PPT
- 充電樁采購(gòu)安裝投標(biāo)方案(技術(shù)方案)
- 醫(yī)院科室考勤表
評(píng)論
0/150
提交評(píng)論