河南工業(yè)大學(xué)實驗二進(jìn)程的創(chuàng)建_第1頁
河南工業(yè)大學(xué)實驗二進(jìn)程的創(chuàng)建_第2頁
河南工業(yè)大學(xué)實驗二進(jìn)程的創(chuàng)建_第3頁
河南工業(yè)大學(xué)實驗二進(jìn)程的創(chuàng)建_第4頁
河南工業(yè)大學(xué)實驗二進(jìn)程的創(chuàng)建_第5頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、學(xué)號 201216010506 班級:計科1201班 姓名: 實驗二進(jìn)程的創(chuàng)建 一、實驗?zāi)康?1、掌握進(jìn)程的概念,明確進(jìn)程的含義 2、認(rèn)識并了解并發(fā)執(zhí)行的實質(zhì) 二、實驗內(nèi)容 1、編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進(jìn)程。當(dāng)此程序運行時,在系統(tǒng)中有一 個父進(jìn)程和兩個子進(jìn)程活動。讓每一個進(jìn)程在屏幕上顯示一個字符:父進(jìn)程顯示a,子進(jìn)程 分別顯示字符b和字符C。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。 ubuntuubuntu 二 - / ri utpuntkjuthvjnt-u 二- / ri ubun t_kjg)kjbur* Lu 二 #e t_kl$)kjbUVYt_J 二 #E

2、上 7 LjbutJ 二#E n.ou 化calIc.U iFfebfjhLjrrLj0uhuntLj ; AcbubuntLjubuntLj iadubi_intLjubuntu 二 / QU / / / 1_ 口 0 “ rr r kkk L Q :c A 廠 u_u kk 0 / - -kkk Lj-r 總 _ out 刊 _ out 對于輸出結(jié)果,abc, acb等都有可能,從進(jìn)程并發(fā)執(zhí)行來看,各種情況都有可能,所以父 進(jìn)程與紫金城的輸出內(nèi)容會疊加在一起,輸出次序帶有隨機性。 daughter 及son 2、修改上述程序,每一個進(jìn)程循環(huán)顯示一句話。子進(jìn)程顯示 父進(jìn)程顯示P are nt

3、,觀察結(jié)果,分析原因。 由于函數(shù)printf()在輸出字符串時不會被中斷,因此,字符串內(nèi)部字符順序輸出不變。但由 于進(jìn)程并發(fā)執(zhí)行的調(diào)度順序和父子進(jìn)程搶占處理機問題,輸出字符串的順序和先后隨著執(zhí)行 的不同而發(fā)生變化,這與打印單字符的結(jié)果相同。 OG ubuntu(ubuntu: */fork1 parent parent parent parent parent parent parent a.out forklc ubuntuubuntu:-/forkl$ /a.out parent 0 daughter 6 1 2 3 4 5 6 7 3 4 5 6 7 8 9 daughter 1 par

4、ent 8 daughter 2 parent 9 daughter daughter daughter daughter daughter daughter daughter son 0 son 1 oo ubuntu(Wubuntu: */fork1 son 9 ubuntuubuntu:/fokl$ ./a.out parent 0 parent 1 parent 2 son 0 parent 3 parent 4 parent 5 parent 6 parent 7 parent 8 parent 9 daughter 0 son 1 son 2 daughter 1 son 3 da

5、ughter 2 son 4 daughter 3 son 5 daughter 4 son 6 三、實驗準(zhǔn)備 (1) 閱讀LINUX的fork.c源碼文件,分析進(jìn)程的創(chuàng)建過程。 (2) 閱讀LINUX的sched.c源碼文件,加深對進(jìn)程管理概念的認(rèn)識。 四、思考 (1) 系統(tǒng)是怎樣創(chuàng)建進(jìn)程? linux系統(tǒng)創(chuàng)建進(jìn)程都是用fork() 系統(tǒng)調(diào)用創(chuàng)建子進(jìn)程由fork() 系統(tǒng)調(diào)用創(chuàng)建的新進(jìn) 程被稱為子進(jìn)程。該函數(shù)被調(diào)用一次,但返回兩次。如果 fork()進(jìn)程調(diào)用成功,兩次返回 的區(qū)別是子進(jìn)程的返回值是新子進(jìn)程的進(jìn)程號 (2) 可執(zhí)行文件加載時進(jìn)行了哪些處理? 當(dāng)操作系統(tǒng)裝載一個可執(zhí)行文件的時候,

6、首先操作系統(tǒng)判斷該文件是否是一個合法的可執(zhí) 行文件。如果是,操作系統(tǒng)將按照段表中的指示為可執(zhí)行程序分配地址空間。 (3)當(dāng)首次調(diào)用新創(chuàng)建的進(jìn)程時,其入口在哪里? fork系統(tǒng)調(diào)用創(chuàng)建的子進(jìn)程繼承了原進(jìn)程的con text,也就是說fork調(diào)用成功后,子進(jìn)程 與父進(jìn)程并發(fā)執(zhí)行相同的代碼。但由于子進(jìn)程也繼承了父進(jìn)程的程序指針,所以子進(jìn)程是從 fork ()后的語句開始執(zhí)行(也就是新進(jìn)程調(diào)用的入口 )。另外fork在子進(jìn)程和父進(jìn)程中的返 回值是不同的。在父進(jìn)程中返回子進(jìn)程的PID,而在子進(jìn)程中返回 五、參考程序 1、 #i nclude mai n() int p1, p2; while( p仁fork( ) = -1); if (p1= 0)p utchar(b); else while( p2 = fork( ) = -1); if(p2 = 0) p utchar(c); else pu tchar(a); 2、 #in clude /*創(chuàng)建子進(jìn)程P1*/ /*創(chuàng)建子進(jìn)程p2*/ mai n() int p1, p2,i; while( p1 = fork( ) = -1); if (p1 = 0) for(i = 0;i10;i+) prin tf(daughter%dn ”,i); else /*創(chuàng)建子進(jìn)程p1*/ /* 創(chuàng)建子進(jìn)程 p2*/ while(p2 =

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論