進(jìn)程管理實(shí)驗(yàn)報(bào)告文檔_第1頁(yè)
進(jìn)程管理實(shí)驗(yàn)報(bào)告文檔_第2頁(yè)
進(jìn)程管理實(shí)驗(yàn)報(bào)告文檔_第3頁(yè)
進(jìn)程管理實(shí)驗(yàn)報(bào)告文檔_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(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)一進(jìn)程管理1實(shí)驗(yàn)?zāi)康模杭由顚?duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別;進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì);分析進(jìn)程爭(zhēng)用資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法;了解Linux系統(tǒng)中進(jìn)程通信的基本原理。2實(shí)驗(yàn)預(yù)備內(nèi)容閱讀Linux的源碼文件,加深對(duì)進(jìn)程管理概念的理解;閱讀Linux的fork()源碼文件,分析進(jìn)程的創(chuàng)建過(guò)程。3實(shí)驗(yàn)內(nèi)容(1)進(jìn)程的創(chuàng)建:編寫(xiě)一段程序,使用系統(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#

2、include#include#includemain()intp1,p2;p1=fork();guest-A5OwDi)ubuntu:guest-ASOwDigubuntu:gccprocess.cguest-A50wDiubuntu:5*/dxoutdbcguest-ASOwDiubuntu:|Terminalguest-A5OwDiubuntu!Terminalgues七-ASOwDilubun七*j:$gccprocess3*cguest-A50wDtubuntu:$outtanfatherprocessguest-ASDwDiiubun七u:$ianprocesstwoiamproe

3、ssoneockf()函數(shù)是將文件區(qū)域用作信號(hào)量(監(jiān)視鎖),或控制對(duì)鎖定進(jìn)程的訪問(wèn)(強(qiáng)制模式記錄鎖定)。試圖訪問(wèn)已鎖定資源的其他進(jìn)程將返回錯(cuò)誤或進(jìn)入休態(tài),直到資源解除鎖定為止。而上面三個(gè)進(jìn)程,不存在要同時(shí)進(jìn)入同一組共享變量的臨界區(qū)域的現(xiàn)象,因此輸出和原來(lái)相同。(3)a)編寫(xiě)一段程序,使其實(shí)現(xiàn)進(jìn)程的軟中斷通信。要求:使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signaio讓父進(jìn)程捕捉鍵盤上來(lái)的中斷信號(hào)(即按DEL鍵);當(dāng)捕捉到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用Kill()向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后分別輸出下列信息后終止:ChildProcess1iskilledbyParent

4、!ChildProcess2iskilledbyParent!父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止ParentProcessiskilled!源代碼:#include#include#include#include#includeintsign;voidwaiting()while(sign!=0);voidstop()sign=0;main()intp1,p2;p1=fork();if(if(p10)TerminalOS*guest-K(aJBVubuntu:子進(jìn)程1收到guest-KlaJ8Vubuntu:gccprocess4*cguest-KiaJSVQubuntu:/a.

5、out八匚ParentPro匚已iskilled1guest-KlaJ8Vubuntu子進(jìn)程1收到軟中斷信號(hào)16時(shí),調(diào)用函數(shù)stop()解除“waiting”,繼續(xù)往下執(zhí)行;等它打印完了childprocess1iskilledbyparent就退出;對(duì)于子進(jìn)程2來(lái)說(shuō)也是如此。而父進(jìn)程在此階段一直處于“waiting”狀態(tài)(執(zhí)行wait(0),直到兩個(gè)子進(jìn)程都退出了,父進(jìn)程才會(huì)退出。由于ctrl+c信號(hào)會(huì)并發(fā)傳到每個(gè)進(jìn)程中,進(jìn)程收到該信號(hào)會(huì)立刻終止。當(dāng)子進(jìn)程收到ctrl+c信號(hào)時(shí),就終止了,根本不會(huì)等父進(jìn)程傳來(lái)的軟中斷信號(hào),因此也就不會(huì)打印出childprocess1iskilled和chil

6、dprocess2iskilled.b)在上面的程序中增加語(yǔ)句signal(SIGINT,SIG-IGN)和signal(SIGQUIT,SIG-IGN),觀察執(zhí)行結(jié)果,并分析原因。Terminal*口電Qguest-KlaJBVubuntu;guest-KiaJ8Vubuntu:gerprocessS.cguest-KiaJ8Vubuntu:4/d*outACParentProcessiskilled1guest-KiaJ8Vubuntu:ChildProcess2iskilledbyParent!ChildProcess1iskilledbyParent!signal(SIGINT,SIG

7、-IGN)和signal(SIGQUIT,SIG-IGN)的作用是屏蔽從鍵盤上傳來(lái)的中斷信號(hào),因此子進(jìn)程可以接收到父進(jìn)程傳來(lái)的軟中斷信號(hào),進(jìn)而將那兩句話打印出來(lái)。4)進(jìn)程的管道通信編制一段程序,實(shí)現(xiàn)進(jìn)程的管道通信。使用系統(tǒng)調(diào)用pipe()建立一條管道線;兩個(gè)子進(jìn)程P1和P2分別向管道各寫(xiě)一句話:Child1issendingamessage!Child2issendingamessage!而父進(jìn)程則從管道中讀出來(lái)自于兩個(gè)子進(jìn)程的信息,顯示在屏幕上。要求父進(jìn)程先接收子進(jìn)程P1發(fā)來(lái)的消息,然后再接收子進(jìn)程P2發(fā)來(lái)的消息。源代碼:#include#include#include#include#in

8、cludemain()intp1,p2,fd2;charparbuf50,childbuf50;pipe(fd);p1=fork();if(p10)個(gè)子進(jìn)程和父進(jìn)程不同的地方只有他的進(jìn)程ID和父進(jìn)程ID,其他的都是一樣if(p10)個(gè)子進(jìn)程和父進(jìn)程不同的地方只有他的進(jìn)程ID和父進(jìn)程ID,其他的都是一樣就象符進(jìn)程TermFnalguest-IClaJSVubuntu:P#ina#incffinc#irit#i_rKguest-KlaJ8VMbuntugeeprocess*ggiues七-Kl日21圧*/a.outChild1issendingamessageChild2issendingames

9、sage!giues七-11日門儀/切1?口11七11|克?。╟lone)自己一樣而此時(shí)子進(jìn)程也與父進(jìn)程分道揚(yáng)鑣,各自執(zhí)行自己的操作。至于先執(zhí)行子進(jìn)程,還是先執(zhí)行父進(jìn)程,取決去內(nèi)核的調(diào)度算法。一旦子進(jìn)程被創(chuàng)建,父子進(jìn)程相互競(jìng)爭(zhēng)系統(tǒng)的資源.有時(shí)候我們希望子進(jìn)程繼續(xù)執(zhí)行,而父進(jìn)程阻塞直到子進(jìn)程完成任務(wù).這個(gè)時(shí)候我們可以調(diào)用wait或者waitpid系統(tǒng)調(diào)用.(2)可執(zhí)行文件加載時(shí)進(jìn)行了哪些處理注冊(cè)一個(gè)可執(zhí)行文件的加載模塊(包含信息:鏈表list,所屬的module,加載可執(zhí)行文件,加載共享庫(kù)),然后遍歷鏈表,依次按module加載這個(gè)可執(zhí)行文件(3)當(dāng)首次調(diào)用新創(chuàng)建進(jìn)程時(shí),其入口在哪里在進(jìn)程隊(duì)列的

10、ready狀態(tài)下,由離自己最近的父進(jìn)程執(zhí)行調(diào)度,即入口在最近的父進(jìn)程處。4)進(jìn)程通信有什么特點(diǎn)針對(duì)管道通信)只支持單向數(shù)據(jù)流;只能用于具有親緣關(guān)系的進(jìn)程之間;沒(méi)有名字;管道的緩沖區(qū)是有限的(管道制存在于內(nèi)存中,在管道創(chuàng)建時(shí),為緩沖區(qū)分配一個(gè)頁(yè)面大小);管道所傳送的是無(wú)格式字節(jié)流,這就要求管道的讀出方和寫(xiě)入方必須事先約定好數(shù)據(jù)的格式,比如多少字節(jié)算作一個(gè)消息(或命令、或記錄)等等。5.實(shí)驗(yàn)總結(jié)通過(guò)這次實(shí)驗(yàn),讓我對(duì)操作系統(tǒng)進(jìn)程這一章的內(nèi)容有了更深入的理解。此次實(shí)驗(yàn)有四部分組成。第一部分的重點(diǎn)是進(jìn)程創(chuàng)建。在linx操作系統(tǒng)中,進(jìn)程的創(chuàng)建需要調(diào)用fork函數(shù)。此函數(shù)調(diào)用一次,返回兩次。父進(jìn)程返回子進(jìn)程的pid,而子進(jìn)程返回0。父進(jìn)程和子進(jìn)程除了進(jìn)程pid不同以外,其他的都相同。他們都從調(diào)用fork子進(jìn)程之后代碼執(zhí)行。然后就是進(jìn)程互斥。所謂的進(jìn)程互斥,是指兩個(gè)

溫馨提示

  • 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)論