北郵大三操作系統(tǒng)進程管理實驗報告_第1頁
北郵大三操作系統(tǒng)進程管理實驗報告_第2頁
北郵大三操作系統(tǒng)進程管理實驗報告_第3頁
北郵大三操作系統(tǒng)進程管理實驗報告_第4頁
北郵大三操作系統(tǒng)進程管理實驗報告_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗一進度管理1.實驗?zāi)康模?)加深對進度觀點的理解,明確進度和程序的差別;2)進一步認(rèn)識并發(fā)履行的實質(zhì);3)剖析進度爭用資源的現(xiàn)象,學(xué)習(xí)解決進度互斥的方法;4)認(rèn)識Linux系統(tǒng)中進度通訊的基來源理。2.實驗預(yù)備內(nèi)容1)閱讀Linux的源碼文件,加深對進度管理觀點的理解;2)閱讀Linux的fork( )源碼文件,剖析進度的創(chuàng)立過程。3.實驗內(nèi)容(1)進度的創(chuàng)立:編寫一段程序,使用系統(tǒng)調(diào)用fork( )創(chuàng)立兩個子進度。當(dāng)此程序運轉(zhuǎn)時,在系統(tǒng)中有一個父進度和兩個子進度活動。讓每一個進度在屏幕上顯示一個字符:父進度顯示字符“a,”子進度分別顯示字符“b和”“c?!痹嚥炜从涗浧聊簧系娘@示結(jié)果,并剖析原由。源代碼以下:#include<sys/>#include<>#include<>#include<>#include<>intmain(intargc,char*argv[]){pid_tpid1,pid2;pid1=fork( );if(pid1<0){fprintf(stderr,"childprocess1failed");exit(-1);}elseif(pid1==0){printf("b\n");}else{pid2=fork( );if(pid2<0){fprintf(stderr,"childprocess1failed");exit(-1);}elseif(pid2==0){printf("c\n");}else{printf("a\n");sleep(2);exit(0);}}return0;}結(jié)果以下:剖析原由:pid=fork( );操作系統(tǒng)創(chuàng)立一個新的進度(子進度),而且在進度表中相應(yīng)為它成立一個新的表項。新進度和原有進度的可履行程序是同一個程序;上下文和數(shù)據(jù),絕大多數(shù)就是原進度(父進度)的拷貝,但它們是兩個互相獨立的進度!所以,這三個進度哪個先履行,哪個后履行,完整取決于操作系統(tǒng)的調(diào)動,沒有固定的次序。(2)進度的控制改正已經(jīng)編寫的程序,將每個進度輸出一個字符改為每個進度輸出一句話,再察看程序履行時屏幕上出現(xiàn)的現(xiàn)象,并剖析原由。將父進度的輸出改為fatherprocesscompleted輸出b的子進度改為輸出childprocess1completed輸出c的子進度改為輸出childprocess2completed運轉(zhuǎn)的結(jié)果以下:原由同(1)假如在程序中使用系統(tǒng)調(diào)用lockf( )來給每一個進度加鎖,能夠?qū)崿F(xiàn)進度之間的互斥,察看并剖析出現(xiàn)的現(xiàn)象。加鎖以后的代碼:#include<sys/>#include<>#include<>#include<>#include<>intmain(intargc,char*argv[]){pid_tpid1,pid2;pid1=fork( );if(pid1<0){fprintf(stderr,"childprocess1failed");exit(-1);}elseif(pid1==0){lockf(1,1,0);printf("childprocess1completed\n");}else{pid2=fork( );if(pid2<0){fprintf(stderr,"childprocess1failed");exit(-1);}elseif(pid2==0){lockf(1,1,0);printf("childprocess2completed\n");}else{lockf(1,1,0);printf(“fatherprocessiscompleted\n”);sleep(2);exit(0);}}return0;}所謂進度互斥,是指兩個或兩個以上的進度,不可以同時進入對于同一組共享變量的臨界地區(qū),不然可能發(fā)生與時間相關(guān)的錯誤,這類現(xiàn)象被稱作進度互斥.lockf( )函數(shù)是將文件地區(qū)用作信號量(監(jiān)督鎖),或控制對鎖定進度的接見(強迫模式記錄鎖定)。試圖接見已鎖定資源的其余進度將返回錯誤或進入休態(tài),直到資源排除鎖定為止。而上邊三個進度,不存在要同時進入同一組共享變量的臨界地區(qū)的現(xiàn)象,所以輸出和本來同樣。3)編寫一段程序,使其實現(xiàn)進度的軟中止通訊。要求:使用系統(tǒng)調(diào)用fork( )創(chuàng)立兩個子進度,再用系統(tǒng)調(diào)用signal( )讓父進度捕獲鍵盤上來的中止信號(即按DEL鍵);當(dāng)捕獲到中止信號后,父進度用系統(tǒng)調(diào)用Kill( )向兩個子進度發(fā)出信號,子進度捕獲到信號后分別輸出以下信息后停止:ChildProcess1iskilledbyParent!ChildProcess2iskilledbyParent!父進度等候兩個子進度停止后,輸出以下的信息后停止:ParentProcessiskilled!代碼以下:#include<sys/>#include<>#include<>#include<>#include<>#include<>intwf;voidwaiting( ){while(wf!=0);}voidstop( ){wf=0;}intmain(intargc,char*argv[]){pid_tpid1,pid2;pid1=fork( );if(pid1<0){fprintf(stderr,"childprocess1failed");exit(-1);}elseif(pid1==0){wf=1;signal(16,stop);子進度1收到軟中止信號16時,調(diào)用函數(shù)stop( )排除“waiting”,繼續(xù)往下履行;等它打印完了childprocess1iskilledbyparent,就退出;對于子進度2來說也是這樣。而父進度在此階段向來處于“waiting”狀態(tài)(履行wait(0)),直到兩個子進度都退出了,父進度才會退出。因為ctrl+c信號會并發(fā)傳到每個進度中,進度遇到該信號會馬上停止。當(dāng)子進度收到ctrl+c信號時,就停止了,根本不會等父進度傳來的軟中止信號,所以也就不會打印出childprocess1iskilled和childprocess2iskilled.在上邊的程序中增添語句signal(SIGINT,SIG-IGN)和signal(SIGQUIT,SIG-IGN),察看履行結(jié)果,并剖析原由。按下ctrl+c后,運轉(zhuǎn)結(jié)果以下:signal(SIGINT,SIG-IGN)和signal(SIGQUIT,SIG-IGN)的作用是障蔽從鍵盤上傳來的中止信號,所以子進度能夠接收到父進度傳來的軟中止信號,從而將那兩句話打印出來(4)進度的管道通訊編制一段程序,實現(xiàn)進度的管道通訊。使用系統(tǒng)調(diào)用pipe( )成立一條管道線;兩個子進度P1和P2分別向管道各寫一句話:Child1issendingamessage!Child2issendingamessage!而父進度則從管道中讀出來自于兩個子進度的信息,顯示在屏幕上。要求父進度先接收子進度P1發(fā)來的信息,而后再接收子進度P2發(fā)來的信息。源代碼以下:#include<sys/>#include<>#include<>#include<>#include<>intmain(intargc,char*argv[]){pid_tpid1,pid2;intfd[2];charparbuf[50],childbuf[50];pipe(fd);個子進度和父進度不一樣的地方只有他的進度ID和父進度ID,其余的都是同樣.就象符進度克隆(clone)自己同樣.而此時子進度也與父進度分道揚鑣,各自履行自己的操作。至于先履行子進度,仍是先履行父進度,取決去內(nèi)核的調(diào)動算法。一旦子進度被創(chuàng)立,父子進度互相競爭系統(tǒng)的資源.有時我們希望子進度持續(xù)履行,而父進度堵塞直到子進度達成任務(wù).這個時候我們能夠調(diào)用wait或許waitpid系統(tǒng)調(diào)用.(2)可履行文件加載時進行了哪些辦理注冊一個可履行文件的加載模塊(包括信息:鏈表list,所屬的module,加載可履行文件,加載共享庫),而后遍歷鏈表,挨次按module加載這個可執(zhí)行文件(3)當(dāng)初次調(diào)用新創(chuàng)立進度時,其進口在哪里在進度行列的ready狀態(tài)下,由離自己近來的父進度履行調(diào)動,即進口在近來的父進度處。(4)進度通訊有什么特色(針對管道通訊)只支持單向數(shù)據(jù)流;只好用于擁有親緣關(guān)系的進度之間;沒出名字;管道的緩沖區(qū)是有限的(管道制存在于內(nèi)存中,在管道創(chuàng)立時,為緩沖劃分派一個頁面大?。?;管道所傳遞的是無格式字節(jié)流,這就要求管道的讀出方和寫入方一定預(yù)先商定好數(shù)據(jù)的格式,比方多少字節(jié)算作一個信息(或命令、或記錄)等等;總結(jié)經(jīng)過此次實驗,讓我對操作系統(tǒng)進度這一章的內(nèi)容有了更深入的理解。此次實驗有四部分構(gòu)成。第一部分的要點是進度創(chuàng)立。在linx操作系統(tǒng)中,進度的創(chuàng)立需要調(diào)用fork函數(shù)。此函數(shù)調(diào)用一次,返回兩次。第二部分的要點進度互斥。所謂的進度互斥,是指兩個或兩個以上的進度,不可以同時進入對于同一組共享變量的臨界地區(qū)。經(jīng)過編程,能更為理解這個觀點。進度互斥經(jīng)過lockf( )來實現(xiàn)。第三部分的要點是經(jīng)過kill( )函數(shù)和signal( )函數(shù)深入理解進度的之間的軟中止。前者是發(fā)送軟中止信號,后者是接收軟中止信號。第四部分的要點是經(jīng)過pipe( )函

溫馨提示

  • 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

提交評論