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

下載本文檔

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

文檔簡介

1、操作系統(tǒng)實驗報告實驗題目: 進程控制專 業(yè) 計算機科學(xué)與技術(shù)學(xué)生姓名班 級 學(xué) 號 12006715指導(dǎo)教師指 導(dǎo) 單 位 計算機學(xué)院期 2014 年 11 月 13 日教師 評 語教師簽名:年 月 日成 績 評 定備注一、實驗?zāi)康?. 學(xué)習(xí)和了解進程控制的基本和常用的系統(tǒng)調(diào)用fork wait sleep exit exec 等等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 #i

2、nclude #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);elseprintf(parents data is:%dn,data);exit(0);程序例題 2用 fork 創(chuàng)建一個子進程,由其調(diào)用 execve 啟動 shell 命令 ps 查看系統(tǒng)當(dāng)前的進程信息 #include #include #include main( )pid_t p

3、id;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.

4、創(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)用 指 定程 序覆 蓋 當(dāng) 前程序代碼正確:0錯誤: -1#include #incl

5、ude pid t wait(int *statloc)等待進程終止正確:子進程的 ID錯誤: -1getpid( ) 、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;w

6、hile(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);elsefor(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:wai

7、t(0);printf(completedn);exit(0);實驗二:編寫程序,用 fork 創(chuàng)建兩個子進程,再用系統(tǒng)調(diào)用 signal 讓父進程捕捉鍵盤上傳來的中 斷信號,捕捉到中斷信號后,父進程用系統(tǒng)調(diào)用 kill 向兩個子進程發(fā)出信號,子進程終 止。父進程等待兩個子進程終止后終止。程序代碼如下 #include #include #include void waiting(),stop();int wait_mark;int main()int p1,p2,stdout; signal(SIGINT,stop); while(p1=fork()=-1);if(p10)while(p2=

8、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);elsewait_mark=1; sig

9、nal(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,表示當(dāng)前進程是 子進程。0: 在父進程中, pid 變量保存的 fork ()返回值為子進程的 pid 值。-1 :創(chuàng)建失敗。實驗二:結(jié)果分

10、析: 從鍵盤輸入中斷信號,父進程收到中斷信號用系統(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、當(dāng)首次調(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)用;獲得進程標(biāo)識符的 getpid 系統(tǒng)調(diào)用等處理過程。3、什么是進程同步? wait( ) 是如何實現(xiàn)進程同步的? 解:異步環(huán)境下的一組并發(fā)進程因直接制約而互相發(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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論