操作系統(tǒng)進程控制實驗報告分析解析.doc_第1頁
操作系統(tǒng)進程控制實驗報告分析解析.doc_第2頁
操作系統(tǒng)進程控制實驗報告分析解析.doc_第3頁
操作系統(tǒng)進程控制實驗報告分析解析.doc_第4頁
操作系統(tǒng)進程控制實驗報告分析解析.doc_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

操作系統(tǒng)實驗報告實驗題目:進程控制 專 業(yè) 計算機科學(xué)與技術(shù) 學(xué) 生 姓 名 班 級 學(xué) 號 12006715 指 導(dǎo) 教 師 指 導(dǎo) 單 位 計算機學(xué)院 日 期 2014年11月13日 教師評語教師簽名: 年 月 日成績評定備 注一、實驗?zāi)康?.學(xué)習(xí)和了解進程控制的基本和常用的系統(tǒng)調(diào)用 forkwaitsleepexitexec等等2. 查看 /usr/src/include/sched.h中的task_struct 數(shù)據(jù)結(jié)構(gòu),并分析Linux 操作系統(tǒng)進程狀態(tài)。 3.通過進程創(chuàng)建的應(yīng)用實例,深刻理解進程創(chuàng)建的過程將以下例題輸入運行,并分析運行結(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)建一個子進程,由其調(diào)用execve啟動shell命令ps查看系統(tǒng)當前的進程信息 #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)建一個共享內(nèi)存,實現(xiàn)一個生產(chǎn)者進程寫共享內(nèi)存,一個消費者進程讀共享內(nèi)存,并在寫前讀后輸出寫和讀的內(nèi)容。4.創(chuàng)建一個共享文件,實現(xiàn)一個寫者進程寫文件,2個讀者在寫者寫后分別讀出文件的內(nèi)容,并給出讀后評價。二、實驗指導(dǎo) Linux中與進程控制相關(guān)的幾個主要系統(tǒng)調(diào)用 名/格式/參數(shù)功能返回值的解釋fork( )、vfork( ) 創(chuàng)建一個字進程 對父進程:返回子進程號 對子進程:返回0 錯誤:返回-1 #include execve(char *file,char *argv,char *envp) 用指定程序覆蓋當前程序代碼 正確:0 錯誤:-1 #include #include pid_t wait(int *statloc) 等待進程終止 正確:子進程的ID 錯誤:-1 getpid( )、getppid( ) 獲得進程號 #include void exit(int status) 進程正常結(jié)束 三、實驗步驟(附程序原碼)實驗一:創(chuàng)建文件wang.c,編寫C語言程序,實現(xiàn)在程序運行時通過系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進程,使父,子三進程并發(fā)進行,父親進程執(zhí)行時屏幕顯示“parent”,兒子進程執(zhí)行時屏幕顯示“son”,女兒進程執(zhí)行時屏幕顯示“daugher”。程序如下:(進程一)#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); (進程二)#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); 實驗二:編寫程序,用fork創(chuàng)建兩個子進程,再用系統(tǒng)調(diào)用signal讓父進程捕捉鍵盤上傳來的中斷信號,捕捉到中斷信號后,父進程用系統(tǒng)調(diào)用kill向兩個子進程發(fā)出信號,子進程終止。父進程等待兩個子進程終止后終止。程序代碼如下#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; 四、運行結(jié)果及其結(jié)果分析實驗一:結(jié)果分析:0:在子進程中,pid變量保存的fork()返回值為0,表示當前進程是子進程。0:在父進程中,pid變量保存的fork()返回值為子進程的pid值。-1:創(chuàng)建失敗。實驗二:結(jié)果分析:從鍵盤輸入中斷信號,父進程收到中斷信號用系統(tǒng)調(diào)用kill向兩個子進程發(fā)出信號,子進程收到信號后分別輸出Child process 1 is killed by parent!,Child process 2 is killed by parent!結(jié)束進程并exit(0),父進程收到兩個exit(0)后輸出Parent process is killed!結(jié)束進程。五、思考題1、當首次調(diào)用新創(chuàng)建進程時,其入口在哪里?解:調(diào)用fork函數(shù)的下一條語句開始。2、可執(zhí)行文件加載時進行了哪些處理?解:可執(zhí)行文件加載時首先是創(chuàng)建一個新進程的fork系統(tǒng)調(diào)用,然后用于實現(xiàn)進程自我終止的exit系統(tǒng)調(diào)用;改變進程原有代碼的exec系統(tǒng)調(diào)用;用于將調(diào)用進程掛起并等待子進程終止的wait系統(tǒng)調(diào)用;獲得進程標識符的getpid系統(tǒng)調(diào)用等處理過程。3、什么是進程同步?wait( )是如何實現(xiàn)進程同步的?解:異步環(huán)境下的一組并發(fā)進程因直接制約而

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論