河南工業大學實驗二進程的創建_第1頁
河南工業大學實驗二進程的創建_第2頁
河南工業大學實驗二進程的創建_第3頁
河南工業大學實驗二進程的創建_第4頁
河南工業大學實驗二進程的創建_第5頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、學號 201216010506班級:計科1201班姓名:實驗二進程的創建一、實驗目的1、掌握進程的概念,明確進程的含義2、認識并了解并發執行的實質 二、實驗內容1、編寫一段程序,使用系統調用fork()創建兩個子進程。當此程序運行時,在系統中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符:父進程顯示'a',子進程分別顯示字符'b'和字符C'。試觀察記錄屏幕上的顯示結果,并分析原因。ubuntuubuntu 二 - / ri utpuntkjuthvjnt-u 二- / ri ub>un t_kjg)kjb>ur* Lu 二 #

2、e t_kl$)kjb>UVYt_«J 二 #E 上 7 Ljbut«J 二#En.ou 化calIc.UiFfebf«jhLjrrLj0uhuntLj ; AcbubuntLjubuntLj ± iad>ubi_intLjubuntu 二/ QU /1_口 0 “ rr rkkkL Q:c A廠 u_ukk0 /-kkkLj-r總 _ out 刊 _ out對于輸出結果,abc, acb等都有可能,從進程并發執行來看,各種情況都有可能,所以父 進程與紫金城的輸出內容會疊加在一起,輸出次序帶有隨機性。'daughter '及&

3、#39;son2、修改上述程序,每一個進程循環顯示一句話。子進程顯示父進程顯示P are nt,觀察結果,分析原因。由于函數printf()在輸出字符串時不會被中斷,因此,字符串內部字符順序輸出不變。但由 于進程并發執行的調度順序和父子進程搶占處理機問題,輸出字符串的順序和先后隨著執行的不同而發生變化,這與打印單字符的結果相同。OG ubuntu(ubuntu: */fork1parent parent parent parent parent parent parenta.out forklc ubuntuubuntu:-/forkl$ /a.out parent 0 daughter 61

4、2345673456789daughter 1 parent 8 daughter 2 parent 9 daughter daughter daughter daughter daughter daughter daughter son 0 son 1oo®ubuntu(Wubuntu: */fork1son 9ubuntuubuntu:/fokl$ ./a.outparent0parent1parent2son 0parent3parent4parent5parent6parent7parent8parent9daughter0son 1son 2daughter1son 3da

5、ughter2son 4daughter3son 5daughter4son 6三、實驗準備(1) 閱讀LINUX的fork.c源碼文件,分析進程的創建過程。(2) 閱讀LINUX的sched.c源碼文件,加深對進程管理概念的認識。四、思考(1) 系統是怎樣創建進程?linux系統創建進程都是用fork() 系統調用創建子進程由fork() 系統調用創建的新進程被稱為子進程。該函數被調用一次,但返回兩次。如果fork()進程調用成功,兩次返回的區別是子進程的返回值是新子進程的進程號(2) 可執行文件加載時進行了哪些處理? 當操作系統裝載一個可執行文件的時候,首先操作系統判斷該文件是否是一個合法

6、的可執行文件。如果是,操作系統將按照段表中的指示為可執行程序分配地址空間。(3)當首次調用新創建的進程時,其入口在哪里?fork系統調用創建的子進程繼承了原進程的con text,也就是說fork調用成功后,子進程與父進程并發執行相同的代碼。但由于子進程也繼承了父進程的程序指針,所以子進程是從fork ()后的語句開始執行(也就是新進程調用的入口 )。另外fork在子進程和父進程中的返 回值是不同的。在父進程中返回子進程的PID,而在子進程中返回五、參考程序1、#i nclude <stdio.h>mai n()int p1, p2;while( p仁fork( ) = -1);

7、if (p1= 0)p utchar('b');elsewhile( p2 = fork( ) = -1); if(p2 = 0) p utchar('c'); else pu tchar('a');2、#in clude <stdio.h>/*創建子進程P1*/*創建子進程p2*/mai n()int p1, p2,i;while( p1 = fork( ) = -1); if (p1 = 0)for(i = 0;i<10;i+)prin tf("daughter%dn ”,i);else/*創建子進程p1*/* 創建子進程 p2*/while(p2 = fork( ) ) = -1);if(p2 =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論