Linux操作系統(tǒng)設(shè)計(jì)實(shí)踐報(bào)告一_第1頁
Linux操作系統(tǒng)設(shè)計(jì)實(shí)踐報(bào)告一_第2頁
Linux操作系統(tǒng)設(shè)計(jì)實(shí)踐報(bào)告一_第3頁
Linux操作系統(tǒng)設(shè)計(jì)實(shí)踐報(bào)告一_第4頁
Linux操作系統(tǒng)設(shè)計(jì)實(shí)踐報(bào)告一_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《Linux操作系統(tǒng)設(shè)計(jì)實(shí)踐》實(shí)驗(yàn)報(bào)告一學(xué)號(hào):000000000姓名:***(組長)學(xué)院:數(shù)計(jì)學(xué)院專業(yè):年級(jí):09本組其它成員:學(xué)號(hào)姓名學(xué)號(hào)姓名學(xué)號(hào)姓名實(shí)驗(yàn)時(shí)間:2011-2012學(xué)年第一學(xué)期指導(dǎo)教師:《Linux操作系統(tǒng)設(shè)計(jì)實(shí)踐》實(shí)驗(yàn)一:進(jìn)程管理實(shí)驗(yàn)?zāi)康模杭由顚?duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)。學(xué)習(xí)通過進(jìn)程執(zhí)行新的目標(biāo)程序的方法。了解Linux系統(tǒng)中進(jìn)程信號(hào)處理的基本原理。實(shí)驗(yàn)環(huán)境:RedHatEnterpriseLinux5實(shí)驗(yàn)內(nèi)容:實(shí)驗(yàn)一進(jìn)程管理(1)進(jìn)程的創(chuàng)建編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子進(jìn)程。當(dāng)此程序運(yùn)行時(shí),在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每一個(gè)進(jìn)程在屏幕上顯示一個(gè)字符:父進(jìn)程顯示字符“a”:子進(jìn)程分別顯示“b”和“c”。試觀察記錄屏幕上顯示結(jié)果,并分析原因。#include<stdio.h>intmain(){intp1,p2;while((p1=fork())==-1);if(p1==0)putchar('b');else{while((p2=fork())==-1);if(p2==0)putchar('c');elseputchar('a');}return0;}顯示結(jié)果:分析總共可能的結(jié)果有:1.子進(jìn)程全部創(chuàng)建成功:bcabaccabcbaacbabc2.子進(jìn)程一創(chuàng)建失?。篵3.子進(jìn)程二創(chuàng)建失?。篵ccb我的虛擬機(jī)上實(shí)驗(yàn)結(jié)果顯示:bca分析原因:首先,根據(jù)fock()函數(shù)原理,fock()對(duì)于該語句之前的程序段只執(zhí)行一次。此外,fock()對(duì)于該語句返回兩次值,并針對(duì)兩次返回值依次執(zhí)行之后的語句,一般來說fock()是先進(jìn)入子程序執(zhí)行代碼,再執(zhí)行父進(jìn)程代碼。父進(jìn)程與子進(jìn)程的執(zhí)行是相互獨(dú)立的,相互之間沒有任何時(shí)序上的關(guān)系。完全由操作系統(tǒng)的調(diào)度程序來決定進(jìn)城的執(zhí)行次序、速度。所以在沒有加入進(jìn)程同步機(jī)制(比如信號(hào),信號(hào)量等)的代碼的情況下,打印結(jié)果是隨機(jī)出現(xiàn)的。在本程序中,對(duì)于子進(jìn)程p1,p2和父進(jìn)程,我使用的計(jì)算機(jī)操作系統(tǒng)令p1==0時(shí),打印“b”,再讓p2==0,打印“c”,最后打印“a”,結(jié)果顯示為:bca由于在單機(jī)系統(tǒng)下很難出現(xiàn)因系統(tǒng)資源不足導(dǎo)致的進(jìn)程創(chuàng)建失敗,所以后三種情況很難調(diào)試出來,但是根據(jù)fock()的實(shí)現(xiàn)原理,理論上是完全可能出現(xiàn)的。(2)進(jìn)程的控制1.修改已編寫的程序,將每個(gè)進(jìn)程的輸出由單個(gè)字符改為一句話,再觀察程序執(zhí)行是屏幕上出現(xiàn)的現(xiàn)象,并分析其原因。#include<stdio.h>intmain(){intp1,p2;while((p1=fork())==-1);if(p1==0)printf("Child1isrunning!\n");else{while((p2=fork())==-1);if(p2==0)printf("Child2isrunning!\n");elseprintf("Fatherisrunning!\n");}return0;}顯示結(jié)果:本程序是在第一題的源程序基礎(chǔ)上直接編程字符串輸出,與第一題相似,故輸出結(jié)果和第一個(gè)實(shí)驗(yàn)現(xiàn)象一樣,預(yù)測結(jié)果也有9種,這里就不一一例舉了。我的虛擬機(jī)上實(shí)驗(yàn)結(jié)果顯示為:Child1isrunning!Child2isrunning!Fatherisrunning!分析原因:本題的原理與第一小題相同,在本程序中,對(duì)于子進(jìn)程p1,p2和父進(jìn)程,我使用的計(jì)算機(jī)操作系統(tǒng)令p1==0時(shí),打?。骸癈hild1isrunning!”,再讓p2==0,打印“Child2isrunning!”,最后打印“Fatherisrunning!”。2.使用exec函數(shù)族使子進(jìn)程執(zhí)行新的目標(biāo)程序。#include<stdio.h>#include<unistd.h>intmain(){ printf("===systemcallexecltesting===\n"); execlp("date","date",0); printf("execerror!\n"); return0;}顯示結(jié)果:我的虛擬機(jī)上實(shí)驗(yàn)結(jié)果顯示為:===systemcallexecltesting===2011年10月29日星期六分析原因:exec函數(shù)使子進(jìn)程執(zhí)行新的目標(biāo)程序。如果調(diào)用成功則執(zhí)行另一個(gè)進(jìn)程,與fock()最大的區(qū)別是一旦exec調(diào)用成功,就不執(zhí)行原來進(jìn)程后面的代碼。即不會(huì)輸出“execerror!”(3.)編寫一段程序,使其實(shí)現(xiàn)進(jìn)程的軟中斷通信[1]使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子程序,再用系統(tǒng)調(diào)用signal()接收父進(jìn)程從鍵盤上來的中斷信號(hào)(即按Ctrl+c鍵);當(dāng)有中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用Kill()向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程有信號(hào)后分別輸出ChildProcessllisKilledbyParent!ChildProcessl2isKilledbyParent!父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止:ParentprocessisKilled!============================#include<stdio.h>#include<signal.h>intwait_mark;voidwaiting(){while(wait_mark==1);}voidstop(){wait_mark=0;}intmain(){intp1,p2;while((p1=fork())==-1);if(p1==0){wait_mark=1;signal(SIGINT,SIG_IGN);signal(16,stop);waiting();printf("ChildProcess11isKilledbyParent!\n");exit(0);}else{while((p2=fork())==-1);if(p2==0){wait_mark=1;signal(SIGINT,SIG_IGN);signal(17,stop);waiting();printf("ChildProcess12isKilledbyParent!\n");exit(0);}else{wait_mark=1;signal(SIGINT,stop);waiting();kill(p1,16);kill(p2,17);wait(0);wait(0);printf("ParentProcessisKilled!\n");exit(0);}}}結(jié)果顯示:我的虛擬機(jī)上實(shí)驗(yàn)結(jié)果顯示:ChildProcessllisKilledbyParent!ChildProcessl2isKilledbyParent!ParentProcessisKilled!分析原因:首先對(duì)wait函數(shù)進(jìn)行分析,進(jìn)程一旦調(diào)用了wai,就立即阻塞

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論