實(shí)驗(yàn)一、進(jìn)程管理實(shí)驗(yàn)備課講稿.doc_第1頁(yè)
實(shí)驗(yàn)一、進(jìn)程管理實(shí)驗(yàn)備課講稿.doc_第2頁(yè)
實(shí)驗(yàn)一、進(jìn)程管理實(shí)驗(yàn)備課講稿.doc_第3頁(yè)
實(shí)驗(yàn)一、進(jìn)程管理實(shí)驗(yàn)備課講稿.doc_第4頁(yè)
實(shí)驗(yàn)一、進(jìn)程管理實(shí)驗(yàn)備課講稿.doc_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精品文檔實(shí)驗(yàn)一linux 進(jìn)程的創(chuàng)建與控制【實(shí)驗(yàn)?zāi)康摹?、加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別;2、進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì);3、分析進(jìn)程爭(zhēng)用資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法;【實(shí)驗(yàn)環(huán)境】編程環(huán)境: TC或者 VC操作系統(tǒng)軟件:linux【準(zhǔn)備知識(shí)】一基本概念1、進(jìn)程的概念;進(jìn)程與程序的區(qū)別。2、并發(fā)執(zhí)行的概念。3、進(jìn)程互斥的概念。二系統(tǒng)調(diào)用系統(tǒng)調(diào)用是一種進(jìn)入系統(tǒng)空間的辦法。通常,在 OS 的核心中都設(shè)置了一組用于實(shí)現(xiàn)各種系統(tǒng)功能的子程序,并將它們提供給程序員調(diào)用。程序員在需要OS提供某種服務(wù)的時(shí)候,便可以調(diào)用一條系統(tǒng)調(diào)用命令,去實(shí)現(xiàn)希望的功能,這就是系統(tǒng)調(diào)用。因此, 系統(tǒng)調(diào)用就像一個(gè)

2、黑箱子一樣, 對(duì)用戶屏蔽了操作系統(tǒng)的具體動(dòng)作而只是控制程序的執(zhí)行速度等。各個(gè)不同的操作系統(tǒng)有各自的系統(tǒng)調(diào)用,如windows API ,便是 windows 的系統(tǒng)調(diào)用, Linux 的系統(tǒng)調(diào)用與之不同的是 Linux 由于內(nèi)核代碼完全公開(kāi), 所以可以細(xì)致的分析出其系統(tǒng)調(diào)用的機(jī)制。三相關(guān)函數(shù)。1fork( ) 函數(shù)fork()函數(shù)創(chuàng)建一個(gè)新進(jìn)程。其調(diào)用格式為:int fork();其中返回int取值意義如下:正確返回:等于 0:創(chuàng)建子進(jìn)程,從子進(jìn)程返回的ID 值;大于 0:從父進(jìn)程返回的子進(jìn)程的進(jìn)程ID 值。精品文檔精品文檔錯(cuò)誤返回:等于 1:創(chuàng)建失敗。2 wait( )函數(shù)wait()函數(shù)常

3、用來(lái)控制父進(jìn)程與子進(jìn)程的同步。在父進(jìn)程中調(diào)用wait()函數(shù),則父進(jìn)程被阻塞,進(jìn)入等待隊(duì)列,等待子進(jìn)程結(jié)束。當(dāng)子進(jìn)程結(jié)束時(shí),會(huì)產(chǎn)生一個(gè)終止?fàn)顟B(tài)字,系統(tǒng)會(huì)向父進(jìn)程發(fā)出SIGCHLD信號(hào)。當(dāng)接到信號(hào)后,父進(jìn)程提取子進(jìn)程的終止?fàn)顟B(tài)字,從wait()函數(shù)返回繼續(xù)執(zhí)行原程序。其調(diào)用格式為:#include #include (pid_t) wait(int *statloc);正確返回:大于0:子進(jìn)程的進(jìn)程ID 值;等于 0:其它。錯(cuò)誤返回:等于1:調(diào)用失敗。3exit( )函數(shù)exit()函數(shù)是進(jìn)程結(jié)束最常調(diào)用的函數(shù),在main() 函數(shù)中調(diào)用return ,最終也是調(diào)用 exit()函數(shù)。這些都是進(jìn)

4、程的正常終止。在正常終止時(shí),exit()函數(shù)返回進(jìn)程結(jié)束狀態(tài)。其調(diào)用格式為:#include void exit(int status);其中 status為進(jìn)程結(jié)束狀態(tài)。4 kill( ) 函數(shù)kill()函數(shù)用于刪除執(zhí)行中的程序或者任務(wù)。其調(diào)用格式為: kill(int PID,int IID);其中: PID 是要被殺死的進(jìn)程號(hào),IID 為向?qū)⒈粴⑺赖倪M(jìn)程發(fā)送的中斷號(hào)。關(guān)于 Linux 下的 C 語(yǔ)言編程1)編輯器可使用 vi2)編譯器使用 gcc格式: gccoption filename例如: gcc -o main main.c主要的 option-o指定輸出文件名(不指定則生成默

5、認(rèn)文件a.out )其它的參數(shù)見(jiàn)幫助(man gcc)【實(shí)驗(yàn)內(nèi)容和步驟】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è)字符,父顯示a ,子進(jìn)程分別顯示“b”和“ c”,觀察記錄顯示結(jié)果,并分析原因。#includemain()int p1,p2;while(p1=fork()= =-1);if(p1=0)putchar(b);elsewhile(p2=fork()=-1);if(p2= =0)putchar(c);else putchar(a);運(yùn)行運(yùn)行結(jié)果: rootloca

6、lhost # gcc -o lsj lsj.crootlocalhost # ./lsjbcarootlocalhost # ./lsjbcarootlocalhost # ./lsjbcarootlocalhost # ./lsjbarootlocalhost # c./lsjbcarootlocalhost # ./lsjbcarootlocalhost # ./lsjbcarootlocalhost # ./lsjcarootlocalhost # b分析原因:從進(jìn)程并發(fā)執(zhí)行來(lái)看,各種情況都有可能。上面的三個(gè)進(jìn)程沒(méi)有同步措施,所以父進(jìn)程與子進(jìn)程的輸出內(nèi)容會(huì)疊加在一起。輸出次序帶有隨機(jī)性

7、。由于函數(shù)printf() 在輸出字符串時(shí)不會(huì)被中斷,因此,字符串內(nèi)部字符順序輸出不變。但由于進(jìn)程并發(fā)執(zhí)行的調(diào)度順序和父子進(jìn)程搶占處理機(jī)問(wèn)題, 輸出字符串的順序和先后隨著執(zhí)行的不同而發(fā)生變化。這與打印單字符的結(jié)果相同。精品文檔精品文檔2. 進(jìn)程控制 (修改已編寫的程序,將每個(gè)進(jìn)程輸出一個(gè)字符改為每個(gè)進(jìn)程輸出一句話,在觀察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析原因。)編寫一段程序,使用系統(tǒng)調(diào)用fork()來(lái)創(chuàng)建兩個(gè)子進(jìn)程,并由父進(jìn)程重復(fù)顯示字符串:“parent :”和自己的標(biāo)識(shí)數(shù),而子進(jìn)程則重復(fù)顯示字符串“child :”和自己的標(biāo)識(shí)數(shù)。#include#includemain()int p1,p

8、2;while(p1=fork()=-1);if(p1=0)printf(childs pid=%dn,getppid();elsewhile(p2=fork()=-1);if(p2=0)printf(childs pid=%dn,getppid();else printf(parents pid=%d n,getppid();結(jié)果:rootlocalhost # gcc -o lsj lsj.crootlocalhost # ./lsjchild 1s pid=4852child 2s pid=4852parent s pid=3224rootlocalhost # ./lsj精品文檔精品文

9、檔child 1s pid=4903child 2s pid=4903parent s pid=3224rootlocalhost # ./lsjchild 1s pid=4918parent s pid=3224rootlocalhost # child 2s pid=1./lsjchild 1s pid=4945child 2s pid=4945parent s pid=3224rootlocalhost # ./lsjchild 1s pid=5270parent s pid=3224rootlocalhost # child 2s pid=5270分析原因:進(jìn)程標(biāo)識(shí)數(shù)隨機(jī)產(chǎn)生,輸出次序

10、也有隨機(jī)性3.編寫一段程序,使用系統(tǒng)調(diào)用fork()來(lái)創(chuàng)建一個(gè)子進(jìn)程。子進(jìn)程通過(guò)系統(tǒng)調(diào)用exec( )更換自己的執(zhí)行代碼,顯示新的代碼“new program. ”后,調(diào)用exit()結(jié)束。而父進(jìn)程則調(diào)用 waitpid()等待子進(jìn)程結(jié)束,并在子進(jìn)程結(jié)束后顯示子進(jìn)程的標(biāo)識(shí)符,然后正常結(jié)束。代碼:main()int p;p=fork();if(p=0)execl( “/root/new ”,0);exit(1);精品文檔精品文檔elseprintf(“parent=%d”,getpid();waitpid();printf(“child=%d ”,getpid();新建 C 程序 new.c:m

11、ainprintf(“new program. ”);分析原因:先編譯 root 下的 new.c ,產(chǎn)生 new應(yīng)用程序, execl( “/root/new ”, 0); 調(diào)用 root 目錄下的 new應(yīng)用程序,執(zhí)行輸出 new program. 問(wèn)題討論 1. 系統(tǒng)是怎樣創(chuàng)建進(jìn)程的?答:系統(tǒng)創(chuàng)建的第一個(gè)進(jìn)程是init進(jìn)程。系統(tǒng)中所有的進(jìn)程都是由當(dāng)前進(jìn)程使用系統(tǒng)調(diào)用fork()創(chuàng)建的。子進(jìn)程被創(chuàng)建后繼承了父進(jìn)程的資源。子進(jìn)程共享父進(jìn)程的虛存空間。寫時(shí)拷貝 (copyon write):子進(jìn)程在創(chuàng)建后共享父進(jìn)程的虛存內(nèi)存空間,只是在兩個(gè)進(jìn)程中某一個(gè)進(jìn)程需要向虛擬內(nèi)存寫入數(shù)據(jù)時(shí)才拷貝相應(yīng)部分的虛擬內(nèi)存。子進(jìn)程在創(chuàng)建后執(zhí)行的是父進(jìn)程的程序代碼。2. 可執(zhí)行文件加載時(shí)進(jìn)行了哪些處理?答:當(dāng)操作系統(tǒng)裝載一個(gè)可執(zhí)行文件的時(shí)候,首先操作系統(tǒng)判斷該文件是否是一個(gè)合法的可執(zhí)行文件。如果是操作系統(tǒng)將按照段表中的指示為可執(zhí)行程序分配地址空間。3. 當(dāng)首次調(diào)用新創(chuàng)建進(jìn)程時(shí),其入口在哪里?精品文檔精品文檔答: fork 系統(tǒng)調(diào)用創(chuàng)建的子進(jìn)程繼承了原進(jìn)程的conte

溫馨提示

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