




已閱讀5頁(yè),還剩3頁(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)介
操作系統(tǒng)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目:進(jìn)程控制 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué) 生 姓 名 班 級(jí) 學(xué) 號(hào) 12006715 指 導(dǎo) 教 師 指 導(dǎo) 單 位 計(jì)算機(jī)學(xué)院 日 期 2014年11月13日 教師評(píng)語(yǔ)教師簽名: 年 月 日成績(jī)?cè)u(píng)定備 注一、實(shí)驗(yàn)?zāi)康?.學(xué)習(xí)和了解進(jìn)程控制的基本和常用的系統(tǒng)調(diào)用 forkwaitsleepexitexec等等2. 查看 /usr/src/include/sched.h中的task_struct 數(shù)據(jù)結(jié)構(gòu),并分析Linux 操作系統(tǒng)進(jìn)程狀態(tài)。 3.通過(guò)進(jìn)程創(chuàng)建的應(yīng)用實(shí)例,深刻理解進(jìn)程創(chuàng)建的過(guò)程將以下例題輸入運(yùn)行,并分析運(yùn)行結(jié)果 程序例題1 #include #include #include int main(void) pid_t pid; int data=5; if(pid=fork()0) printf(fork errorn); exit(0); else if(pid=0) data-; printf(childs data is:%dn,data); exit(0); else printf(parents data is:%dn,data); exit(0); 程序例題2 用fork創(chuàng)建一個(gè)子進(jìn)程,由其調(diào)用execve啟動(dòng)shell命令ps查看系統(tǒng)當(dāng)前的進(jìn)程信息 #include #include #include main( ) pid_t pid; char *path=/bin/ps; char *argv5= ps,-a,-x,NULL; printf(“Run ps with execve by child process:n”); if(pid=fork( )0) printf(“fork error!”); exit(0); else if (pid=0) if(execve(path,argv,0)0) printf(“fork error!”); exit(0); printf(“child is ok!n”); exit(0); wait( ); printf(“it is ok!n”); exit(0); 3.創(chuàng)建一個(gè)共享內(nèi)存,實(shí)現(xiàn)一個(gè)生產(chǎn)者進(jìn)程寫(xiě)共享內(nèi)存,一個(gè)消費(fèi)者進(jìn)程讀共享內(nèi)存,并在寫(xiě)前讀后輸出寫(xiě)和讀的內(nèi)容。4.創(chuàng)建一個(gè)共享文件,實(shí)現(xiàn)一個(gè)寫(xiě)者進(jìn)程寫(xiě)文件,2個(gè)讀者在寫(xiě)者寫(xiě)后分別讀出文件的內(nèi)容,并給出讀后評(píng)價(jià)。二、實(shí)驗(yàn)指導(dǎo) Linux中與進(jìn)程控制相關(guān)的幾個(gè)主要系統(tǒng)調(diào)用 名/格式/參數(shù)功能返回值的解釋fork( )、vfork( ) 創(chuàng)建一個(gè)字進(jìn)程 對(duì)父進(jìn)程:返回子進(jìn)程號(hào) 對(duì)子進(jìn)程:返回0 錯(cuò)誤:返回-1 #include execve(char *file,char *argv,char *envp) 用指定程序覆蓋當(dāng)前程序代碼 正確:0 錯(cuò)誤:-1 #include #include pid_t wait(int *statloc) 等待進(jìn)程終止 正確:子進(jìn)程的ID 錯(cuò)誤:-1 getpid( )、getppid( ) 獲得進(jìn)程號(hào) #include void exit(int status) 進(jìn)程正常結(jié)束 三、實(shí)驗(yàn)步驟(附程序原碼)實(shí)驗(yàn)一:創(chuàng)建文件wang.c,編寫(xiě)C語(yǔ)言程序,實(shí)現(xiàn)在程序運(yùn)行時(shí)通過(guò)系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子進(jìn)程,使父,子三進(jìn)程并發(fā)進(jìn)行,父親進(jìn)程執(zhí)行時(shí)屏幕顯示“parent”,兒子進(jìn)程執(zhí)行時(shí)屏幕顯示“son”,女兒進(jìn)程執(zhí)行時(shí)屏幕顯示“daugher”。程序如下:(進(jìn)程一)#includeint main() int p1,p2,i; while(p1=fork()=-1); if(p1=0) for(i=0;i4;i+) printf(daughter%dn,i); else while(p2=fork()=-1); if(p2=0) for(i=0;i4;i+) printf(son%dn,i); else for(i=0;i4;i+) printf(parent%dn,i); (進(jìn)程二)#includeint main() int pid; pid=fork(); switch(pid) case -1:printf(fork failn);exit(1); case 0:printf(subprocessn);exit(0); default:wait(0);printf(completedn);exit(0); 實(shí)驗(yàn)二:編寫(xiě)程序,用fork創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal讓父進(jìn)程捕捉鍵盤(pán)上傳來(lái)的中斷信號(hào),捕捉到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用kill向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程終止。父進(jìn)程等待兩個(gè)子進(jìn)程終止后終止。程序代碼如下#include#include#includevoid waiting(),stop();int wait_mark;int main() int p1,p2,stdout; signal(SIGINT,stop); while(p1=fork()=-1); if(p10) while(p2=fork()=-1); if(p20) wait_mark=1; sleep(5); waiting(); kill(p1,16); kill(p2,17); wait(0); wait(0); printf(Parent process is killed!n); exit(0); else wait_mark=1; signal(17,stop); waiting(); lockf(stdout,1,0); printf(Child process 2 is killed by parent!n); lockf(stdout,0,0); exit(0); else wait_mark=1; signal(16,stop); waiting(); lockf(stdout,1,0); printf(Child process 1 is killed by parent!n); lockf(stdout,0,0); exit(0); void waiting() while(wait_mark!=0); void stop() wait_mark=0; 四、運(yùn)行結(jié)果及其結(jié)果分析實(shí)驗(yàn)一:結(jié)果分析:0:在子進(jìn)程中,pid變量保存的fork()返回值為0,表示當(dāng)前進(jìn)程是子進(jìn)程。0:在父進(jìn)程中,pid變量保存的fork()返回值為子進(jìn)程的pid值。-1:創(chuàng)建失敗。實(shí)驗(yàn)二:結(jié)果分析:從鍵盤(pán)輸入中斷信號(hào),父進(jìn)程收到中斷信號(hào)用系統(tǒng)調(diào)用kill向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程收到信號(hào)后分別輸出Child process 1 is killed by parent!,Child process 2 is killed by parent!結(jié)束進(jìn)程并exit(0),父進(jìn)程收到兩個(gè)exit(0)后輸出Parent process is killed!結(jié)束進(jìn)程。五、思考題1、當(dāng)首次調(diào)用新創(chuàng)建進(jìn)程時(shí),其入口在哪里?解:調(diào)用fork函數(shù)的下一條語(yǔ)句開(kāi)始。2、可執(zhí)行文件加載時(shí)進(jìn)行了哪些處理?解:可執(zhí)行文件加載時(shí)首先是創(chuàng)建一個(gè)新進(jìn)程的fork系統(tǒng)調(diào)用,然后用于實(shí)現(xiàn)進(jìn)程自我終止的exit系統(tǒng)調(diào)用;改變進(jìn)程原有代碼的exec系統(tǒng)調(diào)用;用于將調(diào)用進(jìn)程掛起并等待子進(jìn)程終止的wait系統(tǒng)調(diào)用;獲得進(jìn)程標(biāo)識(shí)符的getpid系統(tǒng)調(diào)用等處理過(guò)程。3、什么是進(jìn)程同步?wait( )是如何實(shí)現(xiàn)進(jìn)程同步的?解:異步環(huán)境下的一組并發(fā)進(jìn)程因直接制約而
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 健康街封路施工方案
- 電氣火災(zāi)監(jiān)控系統(tǒng)施工方案
- 石材室內(nèi)吊裝施工方案
- 曝氣管安裝施工方案
- 二零二五年度食品行業(yè)員工年勞動(dòng)合同法規(guī)范文本
- 二零二五年度倆孩子離婚財(cái)產(chǎn)分割與共同撫養(yǎng)權(quán)協(xié)議
- 2025年度民宿轉(zhuǎn)租經(jīng)營(yíng)合同模板
- 二零二五年度房屋院落租賃與社區(qū)公共空間開(kāi)發(fā)合同
- 2025年度礦山買賣中介服務(wù)傭金標(biāo)準(zhǔn)合同
- 2025年度股東清算及公司清算審計(jì)報(bào)告出具服務(wù)合同
- 臨時(shí)工雇傭合同范本2025年度
- (二調(diào))武漢市2025屆高中畢業(yè)生二月調(diào)研考試 地理試卷
- “艾梅乙”感染者消除醫(yī)療歧視制度-
- 2024-2025學(xué)年八年級(jí)地理下冊(cè)第七章《南方地區(qū)》檢測(cè)卷(人教版)
- 森林防火知識(shí)
- 2025年湖南鐵路科技職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)參考答案
- 2025年黑龍江林業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- 《ISO 56000-2025創(chuàng)新管理 基礎(chǔ)和術(shù)語(yǔ)》之1:“引言+范圍+術(shù)語(yǔ)和定義”專業(yè)深度解讀與應(yīng)用指導(dǎo)材料(雷澤佳編寫(xiě)2025A0)-1-150
- DB37-T4817-2025 瀝青路面就地冷再生技術(shù)規(guī)范
- 2025年公共營(yíng)養(yǎng)師三級(jí)理論試題及答案
- 小學(xué)語(yǔ)文常見(jiàn)的說(shuō)明方法(四年級(jí)下冊(cè)第二單元)
評(píng)論
0/150
提交評(píng)論