版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、廣州大學學生實驗報告開課學院及實驗宣開課學院及實驗宣. .計算機科學與工程實驗室計算機科學與工程實驗室20152015年年1111月月2929日日實綁實綁 程名程名稱稱操作系統(tǒng)實驗操作系統(tǒng)實驗成績成績實驗項實驗項目名稱目名稱實驗實驗1 1進程管理實驗進程管理實驗指導老師指導老師一、實驗目的1、掌握進程的概念,明確進程的含義 認識并了解井發(fā)執(zhí)行的實質(zhì) 加深對進程概念的理解,明確進程和程序的區(qū)別 分析進程爭用資源的現(xiàn)象,學習解決進程互斥的方法 了解Linux/windows系統(tǒng)中進程通信的基本原理 熟悉LINUX系統(tǒng)中進程之間軟中斷通信的基本原理 熟悉UNIX/LINUX支持的管道通信方式 熟悉消
2、息傳送的機理 了解和熟悉共享存儲機制二、實驗內(nèi)容1、編寫一段程序,使用系統(tǒng)調(diào)用forkO創(chuàng)建兩個子進程。當此程序運行時,在系統(tǒng)中 有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符:父進程顯示a,子進程分別顯示字符和字符試觀察記錄屏幕上的顯示結(jié)果,井分析原因。2、修改上述程序,每一個進程循環(huán)顯示一句話。子進程顯示daughter及son .,父進程顯示parent .,觀察結(jié)果,分析原因。3、 用fk()創(chuàng)建一個進程,再調(diào)用exec()用新的程序替換該子進程的內(nèi)容,利 用wait()來控制進程執(zhí)行順序。4、 修改實驗代碼2中的程序,用lockfO來給每一個進程加鎖,以實現(xiàn)進程之間的
3、 互斥,觀察井分析出現(xiàn)的現(xiàn)象。5、 寫一個使用守護進程(daemon)的程序,來實現(xiàn):(1)創(chuàng)建一個日志文件/var/log/Mydaemon. log(2)每5秒都向其中寫入一個時間戳(使用t ime_t的格式)注 意:要root權(quán)限才能在/var/log創(chuàng)建文件。6、(1)編寫程序:用forkO創(chuàng)建兩個子進程,再用系統(tǒng)調(diào)用signal ()讓父進程 捕捉鍵盤上來的中斷信號(即按飛鍵);捕捉到中斷信號后,父進程用系統(tǒng)調(diào)用killO向兩個子進程發(fā)出信號,子進程捕捉到信號后分別輸出下列信息后終止:Child processl is killed by Childprocess2 is kille
4、d by父進程等待兩個子進程終止后,Parentprocess is kiI led!(2)分析利用軟中斷通信實現(xiàn)進程同步的機理7、 編寫程序?qū)崿F(xiàn)進程的管道通信。用系統(tǒng)調(diào)用pipeO建立一管道,二個子進程P1和P2分別向管道各寫一句話:Child 1 is sending a message! Child 2 issending a message!2、3、4、5、6、7、8、9、parent!parent!輸出如下的信息后終止:父進程從管道中讀出二個來自子進程的信息并顯示(要求先接收P1,后P2) O8、消息的創(chuàng)建、發(fā)送和接收。使用系統(tǒng)調(diào)用msgget( ) . msgsnd ( ),msg
5、rev().及msgcti ()編制一長度為1 k的消息發(fā)送和接收的程序。9、編制一長度為1k的共享存儲區(qū)發(fā)送和接收的程序。三、實驗原理1、進程創(chuàng)建2、進程控制3、信號量機制4、管道機制5、消息通信機制及共享存儲區(qū)機制。四、實驗設備四、實驗設備Win?下虛擬機VMware-workstation-11. 0. 0及CentOS-5- 8T 386五五. .實驗要求實驗要求調(diào)試并運行一個允許n個進程并發(fā)運行的進程管理模擬系統(tǒng)。了解該系統(tǒng)的進程控制、 同步及通訊機構(gòu),每個進程如何用一個PCB表示、其內(nèi)容的設置;各進程間的同步 關系;系統(tǒng)在運行過程中顯示各進程的狀態(tài)和有關參數(shù)變化情況的意義。六、實驗
6、程序六、實驗程序1 1、進程創(chuàng)建、進程創(chuàng)建#mclude niainQmtpbp2;vhile(p 1=forkO)= -1);if(plT)putchar(iy); elsevvliile(p2=fbrk( )= -1);嚴創(chuàng)建子進程p2*/if(p2=0)putchar(c);else putcliaiCa);2 2、進程管理、進程管理#mclude niainQmtpbp2,i;vhile(pl=fork( )= -1);for(i=0;i10;i+)pruiTf(daughter%dni);elseWhile(p2=fbrk( )= -1);嚴創(chuàng)建子進程p2*/ if(p2=0)/*創(chuàng)
7、建子進程pl*/*創(chuàng)建子進程pl*/for(i=0;i10;i+)prmtf(son%diii);elsefor(i=0;i10;i+)piiiitf(parent3.3.進程控制進程控制#iiiclude#iiiclude niain()mt pid;pid=fbrk();switch(pid)嚴創(chuàng)建子進程case -1:printf(*fbrk faillXn); exit(l);case 0:/榕子進程*/execf/biiVls; JsT J T coloUNULL);printf(execexit(l);default:/*父進程*/wait(NULL);嚴同步*printf(ls
8、completed !n); exit(O);廣創(chuàng)建失敗*74 4、進程互斥、進程互斥include include iiitpbp24;while(pl=fork( )= = -1);嚴創(chuàng)建子進程pl*/ if(P 1=0)lockf(l,l,0);/*加鎖, 這里第一個參數(shù)為stdout(標準輸出設備的描述符)*/for(i=0;i10;i+) printfCdaugliter%dni);lockf(lQ0);/* 解鎖*/elsewhile(p2=fbrk( )= =-l);/* 創(chuàng)建子進程p2*/if (p2=0)lockfU丄0);/初貯/for(i=0;i10;i-H-)pruiT
9、f(son %dnd);lockf( 1,0,0);lockf(l丄0);for(i=0;i10;i+)pnntft paient %dW,i);lockf( 1,0,0);/* 解鎖*/5x5x守護進程守護進程#mclude #mclude #mclude #mclude maui()tiine_t t;FILE *fp;fy=fopen(7vai71og/NIydaenion.log*7a);/|T開文件pid_t pid;/守護神pid=fork(J;if(pid0)printfDaemon ou dutyW);exit(O);else if(pid=0)sleep(5);等待5秒再往文
10、件中寫入時間戳printf(Daemon on duty!n);t=tiine(O);fyruiTf(fp/Tlie current time is%snasctiine(Iocaltime(&t);fclose(fy);關閉文件6 6、信號通信機制、信號通信機制#mclude else/*加鎖*/建立time格式變量建立文件#mclude #mclude voidwaiting( ),stop(); intwait_niai*k;niain()mt pbp2,stdout; vbile(pI=forkQ)=-l); if(pl0)/*創(chuàng)建子進程pl*/vvliile(p2=fbrk(
11、)=-1);/* 創(chuàng)建子進程p2*/if(p20)wait_niark=l;sigiial(SIGET.stop);/*接收到人c信號, 轉(zhuǎn)stop*/waiting!); kill(pia6);kill(p2J7);wait(O);wait(O);嚴向pl發(fā)軟中斷信號16*/嚴向p2發(fā)軟中斷信號17*/產(chǎn)同步*/printf(PareiiT process is killedIW); exit(O);elsewait_niai*k=l;signal(17,stop);嚴接收到軟中斷信號17,轉(zhuǎn)stop*/waiting!);lockftstdoutJ.O);printf(CluId proc
12、ess 2 is killed byiockf(stdoutQO);exit(O);elsewait_inark=i; signal(16,stop);waitmg(); lockf(stdoutj,0); piiiitf(Childprocess I is killed by parent!ii);lockf(stdout.O,0);exit(O);嚴接收到軟中斷信號16,轉(zhuǎn)stop*/void waiting()wliile(wait_inark!=O);void stop()Wait_inark=O;7x7x進程的管道通信進程的管道通信#mclude #mclude #mclude in
13、t pidl,pid2;iuaui()mt fd2;char outpipe100,mpipe100;pipe(fd);嚴創(chuàng)建一個管道while (pidl=fork( )= =-l);if(pidl= =0)lockf(fd丄0);spnntfoutpipe,child 1 process is sending message!);/*把串放入數(shù)組outpipe中*/嚴向管道寫長為50字節(jié)的串*/嚴自我阻座5秒*/wrKe(fd 1 houtpipeJO);sleep(5);lockf(fJlAO);exit(O);elsevvliile(pid2=fbrk( )= =-l); if(pid
14、2= =0) lockf(fyl,l,0);spiiiitf(outpipe/cliild 2 process is sendingmessage!); vnte(fcJl,outpipe,50);sleep(5);/*互斥引lockftfdlAO);exit(O);elsewait(O);/*同步*7 iead(fd0.inpipe,50);/*從管道中讀長為50字節(jié)的串*/pnntf%sii*inpipe);wait(O);read(fd04npipe,50); printf%sii*inpipe);exit(O);8 8、客戶端服務端消息的發(fā)送與接收、客戶端服務端消息的發(fā)送與接收I)、c
15、lient.c#mclude #mclude #mclude 薦define MSGKEY 75stnict nisgfonn long nitype;char intext1000;insg;int nisgqid;void clientQ inti;nisgqid=insgget(MSGKEV0777);/*打開75#消息隊列*/fbr(i=10;i=l;i)nisg.nitype=i;piimfb(cliem)sentir);insgsiid(nisgqid,&nisg, 1024,0);/* 發(fā)送消息*/exit(O);niain()client();2)、serveT.cin
16、clude include include 薦define MSGKEY 75 stnictnisgfonn long nitype; char intext1000;insg;int nisgqid;void seiverQmsgqid=insggeT(MSGKEV0777|IPC_CREAr);產(chǎn)創(chuàng)建75#消息隊列donisgrcv(insgqid,&insg. 1030,0,0);嚴接收消息*/printfVYserveQreceivedW);wliile(ype !=1);msgctl(msgqid,IPC_RMID,O);嚴刪除消息隊列,歸還資源*/exit(O
17、);niainQserveM);9 9、共享存儲區(qū)通信、共享存儲區(qū)通信include include include 薦define SHMKEY 75 intshmidj; int *addr;void) inti;shinid=sliniget(SHMKEYa024,0777);addr=shinat(shinid,O,O);for (i=9;i=0;i-) while (*addr!=-l); phntfCXclient) sentn); *addi-i;exit(O);void serveM)shinid=shmget(SHMKEYaO24,O777iIPC_CREAr);嚴創(chuàng)建共享存
18、儲區(qū)addr=shinat(shinid,O,O);/* 獲取首地址*/do*addr=-l;while (*addr=-l);pniitf(serveij receivedn);wlule (*addr);shmcd(shmidJPC_RMID,O);/*撤消共享存儲區(qū),歸還資源exit(O);niaui()while (i=fork( )= =-1); if (!i) seiver(); system(ipcs加);while (i=fork( )=-l);wait(O);wait(O);七、總結(jié)心得(一)實驗分析:K進程創(chuàng)建進程創(chuàng)建進程的創(chuàng)建運行結(jié)果bca(有時會出現(xiàn)bac)rooTlo
19、calhogt Desktopjjt . /a: outbarootlocalhost Desk to p# c /a. outJicarooflocalhost Desktop# . / a. outbcarootlocalhost Desktop# . /a. outbcafr001localhost Desktop# . /a. out分析:從進程執(zhí)行并發(fā)來看,輸出bac, acb等情況都有可能。原因:forkO創(chuàng)建進程所需的時間多于輸出一個字符的時間, 因此在主進程創(chuàng)建進程2的同時,進程1就輸出了“b,而進程2和主程序的輸出次序是有隨機有隨機性的,性的,所以會 出現(xiàn)上述結(jié)果2、進程管理
20、嚴打開共享存儲區(qū)対 嚴獲得共享存儲區(qū)首地址*/進程的管理運行結(jié)果p a rent- son daughterdaughter或p arent son parent daughter等 第一種運行結(jié)果分析由于函數(shù)printfO輸出的字符串之間不會被中斷,因此,字符串內(nèi)部的字符順 序輸出時不變。但是,由于進程并發(fā)執(zhí)行時的調(diào)度順序和父子進程的搶占處理機問 題,輸出字符串的順序和先后隨著執(zhí)行的不同而發(fā)生變化。這與打印單字符的結(jié)果相同。思考題:思考題:(1)系統(tǒng)是怎樣創(chuàng)建進程的?答:一旦操作系統(tǒng)發(fā)現(xiàn)了要求創(chuàng)建新進程的爭件后,便調(diào)用進程創(chuàng)建原語Great()按 下述步驟創(chuàng)建一個新進程。1)申請空白PCB為
21、新進程申請獲得唯一的數(shù)字標識符,并從PCB集合中索取一個空 白PCB2)3)息。4緒隊列中。(2)當首次調(diào)用新創(chuàng)建進程時,其入H在哪里?答:fbrk系統(tǒng)調(diào)用創(chuàng)建的子進程繼承了原進程的context.也就是說fbrk調(diào)用成功后,子進程與父進程并發(fā)執(zhí)行相同的代碼。 但由于子進程也繼承了父進程的程序指針, 所以子進 程第二種運行結(jié)果acarjcacarjchosthost jcxsjcxs */2*/2 l-2l-2e e1 12 23 34 45 56 67 7a4 4tAugmertAugmerlaughterlaughterlatighterlatighterlaughterlaughterJ
22、augmerJaugmerfaughfaugh十e e r rJaugmerJaugmeriaughteiaughter rlaugmerlaugmer(ayghter(ayghterL L2 23 34 45 56 67 73 39 9oarenloarenlaarcrrtaarcrrtparentparentoarentoarentparentparentgrentgrentarentarentjaijai 電m marentarentjcxT.ocalho-51jcxT.ocalho-51 J JCKCK-$-$ sonson 6 6sensensonsonwonwonsonsonwon
23、wonsonsonwonwon3 3 ononsonson2 23 34 45 57 78 89 9I rro&tMBTbcho sTlJesrtopjBTTaToufarenta ar rantant arentarentparentparentiariar ntntar entarentlarentlacontrootfilocall laughterlaughterlausht-erlaughterlauchterlaught 編譯預處理一 編譯一 優(yōu)化程序一 匯編程序一 鏈接程序一 可執(zhí)行文件(2)什么是進程同步?W皿()是如何實現(xiàn)進程同步的?1)我們把異步環(huán)境下的一組并發(fā)進程
24、因直接制約而互相發(fā)送消息而進行互相合作、 互相等待,使得各進程按一定的速度執(zhí)行的過程稱為進程間的同步。進程同步是進程之間直接的相互作用,是合作進程間有意識的行為。2)如果我們對一個消息或事件賦以唯一的消息名,則我們可用過程wa(消息名)表示 進程等待合作進程發(fā)來的消息。這樣.wait ()就實現(xiàn)了進程間的同步。4、進程互斥運行結(jié)果:parent第一種可能的運行結(jié)果son* daughter*daughter*SJc parent* son*P areM daiiglHei等第二種可能運行結(jié)果arent I ar ant arent arent I ar ent arentiairnt aren
25、t larent larontI LrooTgioca.inoSTSTyesKTopjffrootfil ocaUlaughterlaughterlaught6rlaughterlauchterlauht為什么?該程序中每個進程退出時都用了語句exit(O),這是進程的正常終止。在正常終 止時,exitO函數(shù)返回進程結(jié)束狀態(tài)。異常終止時,則由系統(tǒng)內(nèi)核產(chǎn)生一個代表 異常終止原因的終止狀態(tài),該進程的父進程都能用waitO得到其終止狀態(tài)。在 子進程調(diào)用exitO后,子進程的結(jié)束狀態(tài)會返回給系統(tǒng)內(nèi)核,由內(nèi)核根據(jù)狀態(tài) 字生成終止狀態(tài),供父進程在waitO中讀取數(shù)據(jù)。若子進程結(jié)束后,父進程還 沒有讀取子進
26、程的終止狀態(tài),則系統(tǒng)就子進程的終止狀態(tài)置為“ZOMBIE”并保留子 進程的進程控制塊等信息,等父進程讀取信息后,系統(tǒng)才徹底釋放子進程的進程 控制塊。若父進程在子進程結(jié)束之前就結(jié)束的話,則子進程就變成了“孤兒進程X 系統(tǒng)進程init會自動“收養(yǎng)”該子進程,成為該子進程的父進程即父進程標識號 變?yōu)?,當子進程結(jié)束時,init會自動調(diào)用waitO讀取子進程的遺留數(shù)據(jù),從 而避免系統(tǒng)中留下大量的垃圾。3、為何預期的結(jié)果并未顯示出?pl、p2都會捕捉該中斷信號。 對于父進程, 當它捕捉到中斷信號后就會轉(zhuǎn)向程序中指 定的函數(shù)“stop () ”,當“stop () ”執(zhí)行 完畢后,父進程被喚醒,從中斷處繼
27、續(xù)運行。 對于子進程,由于沒有給它們指定收到中斷信號后的動作,它們會在捕捉到中斷信號后執(zhí)行 默認操作,即結(jié)束自己。所以當我們發(fā)出中斷信號后,父進程按預計方式正常執(zhí)行,而pl、p2就被自己結(jié)束了,從而也就不會有預計的結(jié)果了。4、程序該如何修改才能得到正確結(jié)果?為了使程序運行得到正確的結(jié)果,町以在每個子進程程序段開頭加上忽略“AC”中斷信號 的語句,即:signal (SIGINT,SIG_IGN)。#include # i ncIude # i ncIude gcc o 2-5 t31 c-Z2-5Parent p rocess is killed! /2 5# i nc I ude void
28、wait in g(), stop (): int wa i t_mark; int ma i n 0 int p1, p2, stdout: whiIe(p1=fork()=-1); if (p10) whi Ie(p2=fork()=-!): if (p20) wa i t_tnark=1;signal(SIGINT,stop);/*創(chuàng)建子進程p1*/*創(chuàng)建子進程p2*/*接收到t信號,轉(zhuǎn)stop*/waitingO ;kill(p1.16):kill(p2. 17):wait(O); wait(O);printf (Parentexit(O);/*向p1發(fā)軟中斷信號16*/水向p2發(fā)軟中
29、斷信號17*/*同步*/Process is killed!n);else signal (SIGINT.SIG-IGN);wa it_mark=1;signal (17. stop) ;/*接收到軟中斷信號17,轉(zhuǎn)stop*/waitingO ;I ockf (stdout. 1,0);printf (Chi Id process 2 is killed by parent!n);I ockf (stdout. 0, 0);exit(O);else signal (SIGINT, SIG-IGN);wa it_mark=1; signal (16. stop);waitingO ;I ock
30、f (stdout. 1,0);printf (Chi Id process 1 i s killed by parent!n);I ockf (stdout. 0, 0);exit(O);/*接收到軟中斷信號16,轉(zhuǎn)stop*/void waitingO whi le(wait_mark!=O);void stop() wa it_mark=0;7.7.進程的管道通信進程的管道通信運行結(jié)果:執(zhí)行程序剛開始屏幕無反應cxlocalhost jex$ ./2-5延遲5秒后顯示chi Id 1 process is sending message!jcxlocalho5t jcx$ ./2-6ch
31、ild I process is sending message!再延遲5秒后顯示child2process is send i ng message!jcxXocalhost jcx$ ./2-6child 1 poce&s is sending message!child 2 process is sending message!思考題:1、程序中的sleep(5)起什么作用?作用是讓進程休眠5秒。2、子進程1和2為什么也能對管道進行操作?實驗中所用到的無名管道實際上是一個沒有路徑的臨時文件,進程通過該文件的文件描 述符來識別它,而子進程會繼承父進程的環(huán)境和上下文中的大部分內(nèi)容,包
32、括文件描述 符,從而子進程也能對父進程中創(chuàng)建的管道進行操作。8 8、客戶端服務端消息的發(fā)送與接收、客戶端服務端消息的發(fā)送與接收運行結(jié)果:2個程序分別編輯、編譯為client與server執(zhí)行!1)- /server& 2) ipcs -q 3) - /cl ientrootlocalhostrootlocalhostrootlocalhost1 13392rootlocalhostDesktopfiDesktop#Desktop#gcc -0 server gcc-0 client /server &13321332- - c c1331.1331. c cDesktop#ip
33、csipcs-q-q- Message Queues-bey msqid owier Ox0000004b 0 rootp erms777used-bytesmessages0 0 0 0Depictopfi . /clientC丄lentj sentLserver) receivedclient) sentserver)received :client)sent sexvec)received client)sent server)received client)sent server)received client)sent server)received client)sent serv
34、er)received :client)sent server)received client)sent server)received client)sent server)received1J+ Donerootlocalhost Desktop# |/server分析分析:從理想的結(jié)果來說,應當是每當cl lent發(fā)送一個消息后,server接收該消息,cl lent再發(fā)送下一條。也就是說(CI i ent) sent”和(server) rece i ved”的字樣應 該在屏幕上交替出現(xiàn)。實際的結(jié)果大多是,先由client發(fā)送了兩條消息,然后server接收一條消息。此后CI ient、server交替發(fā)送和接收交替發(fā)送和接收消息。最后server次接收兩 條消息 2Client和server分別發(fā)送和接收了10條消息,與預期設想一致。9、共享存儲區(qū)通信運行結(jié)果:在運行過程中,發(fā)現(xiàn)每當client發(fā)送一次數(shù)據(jù)后,server要等待大約0. 1秒才有響應。同樣,之后client又
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 婚姻解除協(xié)議書
- 邢臺學院《現(xiàn)代教育技術(shù)在封學中的應用》2022-2023學年第一學期期末試卷
- 邢臺學院《土地資源管理學》2022-2023學年第一學期期末試卷
- 2024年特種低壓電工資格考試必考題庫500題及答案
- 美麗鄉(xiāng)村文化傳承方案
- 外貿(mào)英語函電教程 第二版 課件Unit 5 Confirming Orders;Unit 6 Letter of Credit
- 四川省巴中市(2024年-2025年小學五年級語文)人教版隨堂測試(上學期)試卷及答案
- 2024至2030年螺桿壓縮機配件項目投資價值分析報告
- 高速公路照明工程方案
- 2024至2030年木制工藝臺燈項目投資價值分析報告
- 教學課件 國際貨運代理-肖旭
- 新生適應性成長小組計劃書
- 08SS523建筑小區(qū)塑料排水檢查井
- 中國圖書館分類法講座
- 父親去世訃告范文(通用12篇)
- 人教版八年級上Unit 2How often do you exercise Section A(Grammar Focus-3c)
- 導讀工作總結(jié)優(yōu)秀范文5篇
- 超聲波UTⅠ級考試題庫2023
- SB/T 10851-2012會議中心運營服務規(guī)范
- JJF 1916-2021掃描電子顯微鏡校準規(guī)范
- GB/T 6587-2012電子測量儀器通用規(guī)范
評論
0/150
提交評論