操作系統(tǒng)試驗---進程的創(chuàng)建與控制_第1頁
操作系統(tǒng)試驗---進程的創(chuàng)建與控制_第2頁
操作系統(tǒng)試驗---進程的創(chuàng)建與控制_第3頁
操作系統(tǒng)試驗---進程的創(chuàng)建與控制_第4頁
操作系統(tǒng)試驗---進程的創(chuàng)建與控制_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、箏波大考NINGBOUNIVERSITY實驗報告實驗題目姓名:學(xué)號:一課程名稱:操作系統(tǒng)實驗所在學(xué)院:信息科學(xué)與工程學(xué)院專業(yè)班級:計算機任課教師:實驗項目名稱進程的創(chuàng)建與控制實驗?zāi)康呐c要求:1、 掌握進程的概念,明確進程的含義2、 認識并了解并發(fā)執(zhí)行的實質(zhì)3、 掌握進程另外的創(chuàng)建方法4、 熟悉進程的睡眠、同步、撤消等進程控制方法實驗設(shè)備及軟件:1、 電腦一臺2、 Linux操作系統(tǒng)實驗方法(原理、流程圖)1、fork()創(chuàng)建一個新進程。系統(tǒng)調(diào)用格式:pid=fork()參數(shù)定義:intfork()fork()返回值意義如下:若子進程創(chuàng)建失敗,則調(diào)用進程獲得返回值-1。若創(chuàng)建成功,在子進程中,f

2、ork()返回值為0,表示當(dāng)前進程是子進程;在父進程中,fork()返回值為子進程的id值(>0)。如果fork()調(diào)用成功,它向父進程返回子進程的PID,并向子進程返回0,即fork()調(diào)用一次,但在不同進程返回不同的值。此時OS在內(nèi)存中建立一個新進程,所建的新進程是調(diào)用fork()父進程(parentprocess)的副本,稱為子進程(childprocess)。子進程繼承了父進程的許多特性,并具有與父進程完全相同的用戶級上下文。父進程與子進程并發(fā)執(zhí)行。圖ILINUX進程狀志之間的轉(zhuǎn)換核心為fork()完成以下操作:(1)為新進程分配一進程表項和進程標識符進入fork()后,核心檢查

3、系統(tǒng)是否有足夠的資源來建立一個新進程。若資源不足,則fork()系統(tǒng)調(diào)用失?。环駝t,核心為新進程分配一進程表項和唯一的進程標識符。(2)檢查同時運行的進程數(shù)目超過預(yù)先規(guī)定的最大數(shù)目時,fork()系統(tǒng)調(diào)用失敗。(3)拷貝進程表項中的數(shù)據(jù)將父進程的當(dāng)前目錄和所有已打開的數(shù)據(jù)拷貝到子進程表項中,并置進程的狀態(tài)為“創(chuàng)建”狀態(tài)。(4)子進程繼承父進程的所有文件對父進程當(dāng)前目錄和所有已打開的文件表項中的引用計數(shù)加1。(5)為子進程創(chuàng)建進程上、下文進程創(chuàng)建結(jié)束,設(shè)子進程狀態(tài)為“內(nèi)存中就緒”并返回子進程的標識符。(6)子進程執(zhí)行雖然父進程與子進程程序完全相同,但每個進程都有自己的程序計數(shù)器PC注意子進程的注

4、意子進程的PC開始位置),然后根據(jù)pid變量保存的fork()返回值的不同,執(zhí)行了不同的分支語句。四、實驗過程、步驟及內(nèi)容1、編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進程。當(dāng)此程序運行時,在系統(tǒng)中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯個字符:父進程顯示'a',子進程分別顯示字符b'和字符'c'。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。2、修改上述程序,每一個進程循環(huán)顯示一句話。子進程顯示'son;父進程顯示'parent;觀察結(jié)果,分析原因。'daughter及3、用fork()創(chuàng)建一個進程,再調(diào)用exec(

5、用新的程序替換該子進程的內(nèi)容4、用fork()建立如下形式的進程樹:各個進程中都打印出本身PID和其父進程的PID,并用wa4()來控制進程執(zhí)行順序,打印出正確和期望的結(jié)果。實驗步驟1.創(chuàng)建空文件,后綴為.c2.打開文件編寫代碼(利用參考代碼)打畀血jt儀將圖-*MAfl4F)購日技和斛工知T>文杓山幫幼的,】nclud學(xué)y$tdig.h>。二RElude考丫號'tvpr.hiljncludecunitd.h>nidirO<intpLp2"Mig3 .通過GCC命令生成可執(zhí)行文件(a.out)a.outmMara4 .執(zhí)行文件aAK5PHO圖卻111。

6、映啕L餐中帶助回sbiynLcsu:$gttafcar.t$hiyanku:bm:口l,/a,outjhiyonlou:ni.fa.outHt»i17JhShiyanLou:m點£Jm.o時19:29:11sbivanlcu:iriJd.M19;79:415hiy«iluj;bs<2<:"i.DUt1>J9;<7寫hiyhilcu:日中£JH.MtD:»:51shiy加leu:£Ja.ciut19:29:571%Gmyanlcu:artj$JH.OUt口文押;5ylshiyanlcu:蠅£L

7、l9t!0:eihiyanlcu:ba用I./3.DUtgsshiyanlcu:“1口器堀:蛇yiiy«ilou:Sgeeartar.cshiyinlou:$./a.outparent,tMfent1son9wc9iyanlou:、,$廣,S/aovtdaugnttrCdaughter1dau中【r1daugnter5daughter4datiqnrerSdaughter6daughter7daughter8daughter9sen0sen1sen2,cn?sen4sen55cn6sen7sen8sen9por9ntQcurent1parent2parent3parent4paren

8、t5parent6parent7parent8parent9皿“23廣,$|卜hiy型&1./d.CHltdayqhiterHdaughter1daughter?daughter5JeiLighlei4muqhtcrSdaughter6diuQhter1daughtpr3daughter9parentJparent1parent1parent?parent4pr?nt4向enl6pjrent/田trmlSparent9sonBpan1ton2san1kan4son5sdn6san?sgnBsan9MNaniMii1進程的控制:,“H:-片帽£門的上rr.R席蓄使1洋處21)a

9、&har-c:Infunctian'uinf:akar.c:12:3:*arfling:kiplkltdeelarationoffunction-tfimplicit-4unctjon-declarjtion>右sk己.仃12:3:varning;incanpdtiblemplkitdeclarationoftMilt-infunction'exitJasiarx:1J:3:note:includeZstdlib*rorprovide$declarationof'exit'宮城岳匕己18:交«3rrii<ij:Lfplieitdet

10、larationoftunctjnrtmit'rinplkitduiutio-declar3tjonwait(OL);AshiT»nlw;VI【19:01"5】shiyanlou:-1/J"露口utI9:fl1:15J息用量24drvixr->r-x2shiynlou4典6b月1111:55DesktopdriniFwxr-i2ShiyanLou4眄6b月itn:wCod日-m-rwr1shiyanlou31610月2819:aflaskar.ckrwnixr-K15hiy«nlau鴕的曲月28I9;eimutIrmcrwxrax1itdy

11、anlou106月1111i;55antandajr->/anacondddIsWMpletkIShiyanlour/f19:01:275 .觀察實驗結(jié)果并分析原因1、從進程并發(fā)執(zhí)行來看,各種情況都有可能。上面的三個進程沒有同步措施,所以父進程與子進程的輸出內(nèi)容會疊加在一起。輸出次序帶有隨機性。Fork()創(chuàng)建進程所需的時間多于輸入一個字符的時間,因此在主進程創(chuàng)建進程2的同時,進程1就輸出了b,而進程2和主程序的輸出次序是隨機性的。2、由于函數(shù)printf()在輸出字符串時不會被中斷,因此,字符串內(nèi)部字符順序輸出不變。但由于進程并發(fā)執(zhí)行的調(diào)度順序和父子進程搶占處理機問題,輸出字符串的順序

12、和先后隨著執(zhí)行的不同而發(fā)生變化。這與打印單字符的結(jié)果相同。3、程序在調(diào)用fork()建立一個子進程后,馬上調(diào)用wait(),使父進程在子進程結(jié)束之前,一直處于睡眠狀態(tài)。子進程用exec()裝入命令ls,exec()后,子進程的代碼被ls的代碼取代,這時子進程的PC指向ls的第1條語句,開始執(zhí)行l(wèi)s的命令代碼。注意在這里wait()給我們提供了一種實現(xiàn)進程同步的簡單方法。參考代碼1、#include<stdio.h>#include<sys/types.h>#include<unistd.h>main()intp1,p2;while(p1=fork()=-1)

13、;/*創(chuàng)建子進程p1*/if(p1=0)putchar('b');elsewhile(p2=fork()=-1);/*創(chuàng)建子進程p2*/if(p2=0)putchar('c');elseputchar('a');2、#include<stdio.h>#include<sys/types.h>#include<unistd.h>main()intp1,p2,i;while(p1=fork()=-1);/*創(chuàng)建子進程p1*/if(p1=0)for(i=0;i<10;i+)printf("daught

14、er%d,i);elsewhile(p2=fork()=-1);/*創(chuàng)建子進程p2*/if(p2=0)for(i=0;i<10;i+)printf("daughter%d,i);elsefor(i=0;i<10;i+)printf("daughtern");i)3、#include<stdio.h>#include<sys/types.h>#include<unistd.h>main()intpid;pid=fork();/*創(chuàng)建子進程*/switch(pid)case-1:/*創(chuàng)建失敗*/printf("

15、forkfail!n");exit(1);case0:/*子進程*/execl("/bin/ls","ls","-1","-color",NULL);printf("execfail!n");exit(1);default:/*父進程*/wait(NULL);/*同步*/printf("lscompleted!n");exit(0);實驗數(shù)據(jù)(現(xiàn)象)處理分析錯誤信息1jUiar.e!Infunttion'aiif:astar.c:12:3:nrning:im

16、plicitdeclarationoffunctjohe)clt'-limplicit-unctiomdeclaratkntiit(l);dskar«c;12;3;urning;incmp就ibleimplifirdeclarationgfbuilt-infunctionfexitJ卜sk時.“12:3:wt«:includeorpmide3declarMionofrtxitJaskar.c:18rl!nming:iiiplitdtJeclarationMfunetion*nitd-IiijLieit*iunction-decLarationwAit(MLL);錯誤信息1ims颯自粗圖西美或I號期此培勖國shianlou:"/$a/ar,匚JJ;57Jsftar.<:4:1:warning:returntypedefaultsto1intf-Vlnplicibint|nuin()AasJcar.c:Infunttien'aaln1!asiar.r:J:8:itrar;expectedBcrc&ionbetor?tokenwhileC)AshiyanlouTZ52OJ7:45由于代碼部分調(diào)用系統(tǒng)函數(shù)的不足導(dǎo)致多次無法生成可執(zhí)

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論