版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 升學(xué)宴致辭15篇
- 汽車車牌的號碼識別
- (資料)利用畜禽糞便及農(nóng)村生活垃圾中的有機廢棄物生產(chǎn)有機肥和車用沼氣替代石油示范項目可行性研究報告
- 湖南省衡陽市2024年數(shù)學(xué)三上期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 湖南省婁底市新化縣2024-2025學(xué)年四上數(shù)學(xué)期末學(xué)業(yè)質(zhì)量監(jiān)測試題含解析
- 湖南省邵陽市邵陽縣2024-2025學(xué)年六上數(shù)學(xué)期末經(jīng)典模擬試題含解析
- 湖南省湘西土家族苗族自治州鳳凰縣2024年數(shù)學(xué)三年級第一學(xué)期期末教學(xué)質(zhì)量檢測模擬試題含解析
- 湖南省長沙市寧鄉(xiāng)縣2024-2025學(xué)年四上數(shù)學(xué)期末綜合測試試題含解析
- 懷安縣2024年六上數(shù)學(xué)期末監(jiān)測試題含解析
- 湖南省永州市寧遠縣2024-2025學(xué)年數(shù)學(xué)六年級第一學(xué)期期末復(fù)習(xí)檢測模擬試題含解析
- 小學(xué)教育教學(xué)管理案例分析
- 新生兒藥物滲漏應(yīng)急預(yù)案
- 克雅氏病個案護理
- 軟裝設(shè)計項目計劃書
- 手術(shù)室手術(shù)前中后的護理
- 品三國論領(lǐng)導(dǎo)藝術(shù)智慧樹知到期末考試答案2024年
- (2024年)醫(yī)院污水處理應(yīng)急預(yù)案完整版
- 2024年操作工技能考核考試-制冷壓縮機筆試歷年真題薈萃含答案
- 小學(xué)數(shù)學(xué)課題《小學(xué)生良好的數(shù)學(xué)學(xué)習(xí)習(xí)慣的培養(yǎng)策略》開題報告
- 2024年英語B級考試真題及答案
- 阿加莎克里斯蒂簡介課件
評論
0/150
提交評論