遠離白色粉末擁抱七彩生活_第1頁
遠離白色粉末擁抱七彩生活_第2頁
遠離白色粉末擁抱七彩生活_第3頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、西安郵電大學(計算機學院)課內實豔報告實驗名稱專業(yè)名稱:計算機科學與技術班 級:計科1104學生姓名:張冬冬(07)學號(8 位):04111112指導教師:任東陜設計起止時間:2013年"月22日一. 實驗目的及實驗環(huán)境(1)加深對進程概念的理解,明確進程和程序的區(qū)別。(2)進一步認識并發(fā)執(zhí)行的實質。(3)分析進程競爭資源現(xiàn)彖,學習解決進程互斥的方法。(4)了解Linux系統(tǒng)中進程通信的基本原理。二. 實驗內容(1)進程的創(chuàng)建編寫一段源程序,使系統(tǒng)調用forkO創(chuàng)建兩個子進程,當此程序運行時,在系統(tǒng)中有一 個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符:父進程顯示字符“

2、a” ; 子進程分別顯示字符“b”和字符“c”。試觀察紀錄屏幕上的顯示結果,并分析原因。(2)進程的控制修改已編寫的程序,將每個進程輸出一個字符改為每個進程輸出一句話,在觀察程序執(zhí) 行時屏幕出現(xiàn)的現(xiàn)彖,并分析原因。如呆在程序中使用調用lockfO來給每一個子進程加鎖,可以實現(xiàn)進程之間的互斥,觀察 并分析出現(xiàn)的現(xiàn)彖。(3)編寫一段程序,使其現(xiàn)實進程的軟中斷通信。要求:使用系統(tǒng)調用forkO創(chuàng)建兩個子進程,再用系統(tǒng)調用signal 0讓父進程捕捉鍵盤 上來的中斷信號(即按DEL鍵):當捕捉到中斷信號后,父進程用系統(tǒng)調用Kill ()向兩個子 進程發(fā)出信號,子進程捕捉到信號后分別輸出下列信息后終止:

3、Child Processll is Killed by Parent!Child Processl2 is Killed by Parent!父進程等待兩個子進程終止后,輸出如下的信息后終止Parent Process is Killed!在上面的程序中增加語句signal (SIGNAL, SIGTGN)和signal (SIGQUIT, SIGTGN), 觀察執(zhí)行結果,并分析原因。(4)進程的管道通信編制一段程序,實現(xiàn)進程的管理通信。使用系統(tǒng)調用pipe。建立一條管道線;兩個子進程P1和P2分別向管道中寫一句話:Child 1 is sending a message!Child 2 i

4、s sending a message!而父進程則從管道中讀出來自于兩個子進程的信息,顯示在屏幕上。要求父進程先接收子進程P1發(fā)來的消息,然后再接收子進程P2發(fā)來的消息。三. 方案設計1.進程的創(chuàng)建任務編寫一段程序,使用系統(tǒng)調用forkO創(chuàng)建兩個子進程。當此程序運行時,在系統(tǒng)中有 一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符;父進程顯示字符 “a”,子進程分別顯示字符“b”和“c”。試觀察記錄屏幕上的顯示結果,并分析原因。 程序# iiiclude<stdio.h>main()嚴子進程創(chuàng)建成功可/*子進程創(chuàng)建成功*/*父進程執(zhí)行5»7mtpLp2;if(p

5、l=fork() putcharfb*);else if(p2=forkQ) putcharfc*);else putchaia1);運行結果bca (有時會出現(xiàn)bac)分析:從進程執(zhí)行并發(fā)來看,輸出bac, acb等情況都有可能。原因:fork。創(chuàng)建進程所需的時間多于輸出一個字符的時間,因此在主進程創(chuàng)建進程2的同 時,進程1就輸出了 “b”,而進程2和主程序的輸出次序是有隨機性的,所以會出現(xiàn)上述 結果。2 進程的控制任務修改已編寫好的程序,將每個程序的輸出由單個字符改為一句話,再觀察程序執(zhí)行時屏幕 上出現(xiàn)的現(xiàn)彖,并分析其原因。如果在程序中使用系統(tǒng)調用lockf()來給每個程序加鎖,可 以實現(xiàn)

6、進程之間的互斥,觀察并分析出現(xiàn)的現(xiàn)彖。程序1#include<stdio.h>mam()intpl.p2j;if(pl=fork()fbr(i=0;i<500;i+) printff'child %d'jT,i);elseif(p2=forkQ)fbr(i=0;i<500;i+)prmtf(Hson %d'jT,i);elsefbr(i=0;i<500;i+)prmtf(Hdaughter %dMU);child .sondaughter* daughter* 或 childson childsondaugh ter分析:由于函數(shù)print

7、f ()輸出的字符串之間不會被中斷,因此,字符串內部的字符順 序輸出時不變。但是,由于進程并發(fā)執(zhí)行時的調度順序和父子進程的搶占處理機問題,輸 出字符串的順序和先后隨著執(zhí)行的不同而發(fā)生變化。這與打印單字符的結果相同。程序2)# iiiclude<stdio.h>main()intphp2j;if(pl=fork()lockf(l 丄 0);fbr(i=0;i<500;i+) printf(”child %dn*i);lockf(l 丄 0);elseif(p2=forkQ) lockf(l 丄 0);fbr(i=0;K500;i+) pimtf(Mson %d iri); lo

8、ckf( 1,1.0);elselockf(l 丄 0);fbi(i=0;i<500;i+) printf(Hdaughter %diT;i);lockf(l、0、0);人致與未上鎖的輸出結呆相同,也是隨著執(zhí)行時間不同,輸出結果的順序有所不同。 分析:因為上述程序執(zhí)行時,不同進程之間不存在共享臨界資源(其中打印機的互斥性 已有由操作系統(tǒng)保證)問題,所以,加鎖與不加鎖效果相同。3. 軟中斷通信任務1)編制一段程序,使用系統(tǒng)調用forkO創(chuàng)建兩個子進程,再用系統(tǒng)調用signal ()讓父進 程捕捉鍵盤上來的中斷信號(即按ctrl+c鍵),當捕捉到中斷信號后,父進程用系統(tǒng)調用 killO向兩個

9、子進程發(fā)出信號,子進程捕捉到信號后,分別輸出下列信息后終止: child processl is killed by parent!child process2 is killed by parent!父進程等待兩個子進程終止后,輸出以下信息后終止: parent process is killed!4.fork()創(chuàng)建一個新進程。 系統(tǒng)調用格式: pid=fbrk() 參數(shù)定義: mt foik() fork()返回值意義如下: 0:在子進程中,pid變量保存的fork()返回值為0,表示當前進程是子進程。 >0:在父進程中,pid變量保存的fork()返回值為子進程的id值(進程唯一

10、標識符)。 -1:創(chuàng)建失敗。如果fork()調用成功,它向父進程返回子進程的PLD.并向子進程返回0,即fork()被調用 了一次,但返回了兩次。此時OS在內存中建立一個新進程,所建的新進程是調用fork()父 進程(parent process)的副本,稱為子進程(cluld process)<>子進程繼承了父進程的許多特 性,并具有與父進程完全相同的用戶級上下文。父進程與子進程并發(fā)執(zhí)行。核心為fbrk()完成以下操作:(1) 為新進程分配一進程表項和進程標識符進入fork()后,核心檢查系統(tǒng)是否有足夠的資源來建立一個新進程。若資源不足,則fork() 系統(tǒng)調用失敗;否則,核心為

11、新進程分配一進程表項和唯一的進程標識符。(2) 檢查同時運行的進程數(shù)目超過預先規(guī)定的最大數(shù)目時,fork()系統(tǒng)調用失敗。(3) 拷貝進程表項中的數(shù)據(jù)將父進程的當前目錄和所有已打開的數(shù)據(jù)拷貝到子進程表項中,并置進程的狀態(tài)為“創(chuàng)建” 狀態(tài)。(4) 子進程繼承父進程的所有文件對父進程當前目錄和所有已打開的文件表項中的引用計數(shù)加lo(5) 為子進程創(chuàng)建進程上、下文進程創(chuàng)建結束,設子進程狀態(tài)為“內存中就緒”并返回子進程的標識符。(6) 子進程執(zhí)行雖然父進程與子進程程序完全相同,但每個進程都有自己的程序計數(shù)器pc,然后根據(jù)pid變 量保存的fork()返回值的不同,執(zhí)行了不同的分支語句。#include

12、 <stdio.h> main() intpl,p2;wliile(pl=fork( )= = -1);/*創(chuàng)建子進程 pl*/if (pl= =0) putchaib1);elsewliile(p2=fork( )= = -1); /*創(chuàng)建子進程 p2*/ if(p2= =0) putcharfc1);else putcharfa1);運行結果:bcaLi.cr? iij?cta.c i_4.<T_l.c- I2.1.CI_2.c* T-J.c* 1.4.c*T,T2J.C* 1.3四測試數(shù)據(jù)及運行結果X'V iwv 竺弓巴絃5U2時程如WOT'W| r &

13、#187;r h»i hILiw* *|* l hfiA<nMA-isQt> irtAll OrskxoQscsrun 】e«LRSlalirooteiocalhost 丁 /t b « ! rrotebHBlhi->i. *JS |rootij'locslhosti*-文A® ifiSHQ第館 奇3E® BfU®ra21oc°1gwt mt is cd '(roctlocalhost *r 1*nicomJa&-cfs install J cT-lIJ2TZJ.c*r.ii&quo

14、t; WTiT;c7.3.cTJ.c0 *上w uruti. L«urj.c*n l.tT 2廠廠r 4.r*|roct61 <filbc»bt * |» /J ?.co»M讓./TJ?.cr tZHTroct«localbo&t 卜 Uanaconda aksI r>»tai ll«)cTJTZJ.c*T-3T-igdl 蝕i vwial 1TJtHL】T亠T.3,<TJ.ti U>|Tig.“5.1 dig1 He*1 2 廣【:.'1 roctloCAldo&t &quo

15、t; |> /I 2:rocKlocolbost 卩 Tt?l 干i?f?205- se煽曲已卅色主ts rGL 廠2 八Fi*R >u "rJ»-匸二 *-j 上 :二二:r二二 17-Erefnj,woc 匕 b 5 T 7<wtlsloH»host:>MReiariaT ¥t-;y> 迤攜ew 職© 上匕&-20&rx!L!M12*ll、r4 B ch 二a二Inmnrm VCKIQ2Hx.h ; $rd-r!R 再小占門巳 -2r -©】:1 y Tno na 一 homrri X

16、M- s1. 實驗過程中遇到的問題及解決辦法;實驗結果為c,b,a或b,c,a。父進程a剛啟動,接著就生成子進程b,c,父進程此 時之后暫停,去生成子進程b,c。生成完子進程b,c之后,父進程繼續(xù)執(zhí)行。2.不 能夠同時生兩個子進程,會發(fā)生進程間的互斥。進程創(chuàng)見之后,從鍵盤上接受一個信后,然后關閉子進程和父進程。4.子進 程之間通過管道相互發(fā)送消息2. 對設計及調試過程的心得體會。本次實驗主要實現(xiàn)Linux操作系統(tǒng)中進程管理的功能。了解了進程的創(chuàng)建、執(zhí)行 特定任務、終止、和同步的相關系統(tǒng)調用。理解了 folk、exec、wait、exit3個系 統(tǒng)調用的使用。該系統(tǒng)包括有簡單的進程控制、同步與通訊機構,系統(tǒng)在運行過 程中能顯示各進程的狀態(tài)及有關參數(shù)的變化情況,從而觀察諸進程的運行過程及 系統(tǒng)的管理過程,在我的電腦能夠運行通過,雖不能盡善盡美,但也基本能實現(xiàn) 老師的要求的

溫馨提示

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

評論

0/150

提交評論