操作系統(tǒng)課程設(shè)計(jì)報(bào)告格式_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告格式_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告格式_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告格式_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告格式_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、江蘇大學(xué)計(jì)算機(jī)學(xué)院課程設(shè)計(jì)報(bào)告課程名稱(chēng)操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)學(xué)期2010至2011學(xué)年,第1學(xué)期學(xué)生姓名周勇專(zhuān)業(yè)班級(jí)計(jì)算機(jī)0801學(xué)號(hào)3080602049指導(dǎo)教師詹永照開(kāi)課系計(jì)算機(jī)科學(xué)系操作系統(tǒng)課程組制操作系統(tǒng)課程設(shè)計(jì)報(bào)告實(shí)驗(yàn)題目:Linux系統(tǒng)管理實(shí)踐與設(shè)計(jì)時(shí)間:2010-12-27至進(jìn)程控制、進(jìn)程通信實(shí)現(xiàn)2011-01-02一、實(shí)驗(yàn)?zāi)康呐c要求1、 掌握基本的同步與互斥算法。2、 學(xué)習(xí)使用Linux中基本的同步對(duì)象,掌握相關(guān)函數(shù)的使用方法。3、 了解Linux中多進(jìn)程的并發(fā)執(zhí)行機(jī)制,實(shí)現(xiàn)進(jìn)程的同步與互斥。4、 查閱相關(guān)資料。5、 熟悉各種命令、系統(tǒng)調(diào)用與實(shí)用程序。6、 按給定功能設(shè)計(jì)相關(guān)程序。

2、7、 撰寫(xiě)課程設(shè)計(jì)報(bào)告。二、實(shí)驗(yàn)內(nèi)容桌上有一只盤(pán)子,盤(pán)子只能放5只水果,每次只能放一只水果或取出一只水果。爸爸專(zhuān)放蘋(píng)果,媽媽專(zhuān)放橘子,兒子專(zhuān)等吃盤(pán)子中的橘子,女兒專(zhuān)等吃盤(pán)子中的蘋(píng)果。分別用P,V操作實(shí)現(xiàn)他們的協(xié)作行為。三、實(shí)驗(yàn)設(shè)備與環(huán)境實(shí)驗(yàn)設(shè)備:虛擬機(jī)運(yùn)行平臺(tái):Linux語(yǔ)言:c四、設(shè)計(jì)正文(包括分析與設(shè)計(jì)思路、各模塊流程圖以及帶注釋的主要算法源碼)設(shè)計(jì)思路:設(shè)計(jì)4個(gè)進(jìn)程,分別是父親進(jìn)程,母親進(jìn)程,兒子進(jìn)程,設(shè)置一個(gè)緩沖區(qū),用來(lái)放水果,長(zhǎng)度為5.所以設(shè)置一個(gè)公有信號(hào)量mutex,以限制他們對(duì)緩沖區(qū)的放和取,初值為1.另外設(shè)置私有信號(hào)S2,S1.以控制兒子是否可以取橘子吃,女兒是否可以取蘋(píng)果吃。

3、初值都為0.還要設(shè)置一個(gè)信號(hào)量empty,控制父親跟母親之間的同步,初值為5。表示現(xiàn)在緩沖區(qū)有5個(gè)空位可以放。各模塊流程圖:Sn帶注釋的主要算法源碼:I.Conntrol.c#include<sys/types.h>#include<stdio.h>#include<stdlib.h>#include<sys/ipc.h>#include<sys/shm.h>#include<sys/sem.h>#include<errno.h>#include<string.h>#defineSHMKE

4、Y9075/*共享存儲(chǔ)區(qū)的鍵*/#defineSEMKEY_EMPTY9085#defineSEMKEY_S19086#defineSEMKEY_S29087#defineSEMKEY_MUTEX9088*信號(hào)量數(shù)組的鍵*/#defineBUFF_LEN5/*緩沖區(qū)可以存放個(gè)水果*/#defineFRUIT_LEN12/*水果用字符串代替*/voidset_sembuf_struct(structsembuf*sem,intsemnum,intsemop,intsemflg)/*設(shè)置信號(hào)量結(jié)構(gòu)*/sem->sem_num=semnum;sem->sem_op=semop;sem-&

5、gt;sem_flg=semflg;main()char*addr,end;intshmid;unsignedcharin;intsemid_empty,semid_s1,semid_s2,semid_mutex;/*信號(hào)量id*/structsembufsem_tmp;/*開(kāi)辟共享存儲(chǔ)區(qū)*/if(shmid=shmget(SHMKEY,BUFF_LEN*FRUIT_LEN,0777|IPC_CREAT|IPC_EXCL)=-1)if(errno=EEXIST)printf("TheBufferHasExisted!n");printf("DoYouWantToD

6、eleteTheBuffer(Y=yes)?n=:");scanf("%c”,&end);if(end='y'|end='Y')/*共享存儲(chǔ)區(qū)、信號(hào)量并不隨程序的結(jié)束而被刪除,如果我們沒(méi)刪除的話(huà),可以用ipcs命令查看,用ipcrm刪除*/*釋放緩沖區(qū)*/shmid=shmget(SHMKEY,BUFF_LEN*FRUIT_LEN,0777);if(shmctl(shmid,IPC_RMID,0)<0)perror("shmctl:");/*同時(shí)釋放信號(hào)量*/semid_mutex=semget(SEMKEY

7、_MUTEX,1,0777);semid_empty=semget(SEMKEY_EMPTY,1,0777);semid_s1=semget(SEMKEY_S1,1,0777);semid_s2=semget(SEMKEY_S2,1,0777);semctl(semid_mutex,0,IPC_RMID);semctl(semid_empty,0,IPC_RMID);semctl(semid_s1,0,IPC_RMID);semctl(semid_s2,0,IPC_RMID);elseprintf("FailToCreateBuffer!n");return-1;addr=

8、(char*)shmat(shmid,0,0);/*連接緩沖區(qū)*/memset(addr,0,BUFF_LEN*FRUIT_LEN);shmdt(addr);/*離開(kāi)緩沖區(qū)*/*創(chuàng)建信號(hào)量:1個(gè)用于對(duì)緩沖區(qū)互斥,3個(gè)用于父親、母親、兒子、女兒同步*/if(semid_mutex=semget(SEMKEY_MUTEX,1,0777|IPC_CREAT|IPC_EXCL)=-1)if(errno=EEXIST)printf("TheSEMKEY_MUTEXHasExisted!n");elseprintf("FailToCreateSEMKEY_MUTEX!n&qu

9、ot;);return-1;if(semid_s1=semget(SEMKEY_S1,1,0777|IPC_CREAT|IPC_EXCL)=-1)if(errno=EEXIST)printf("TheSEMKEY_S1HasExisted!n");elseprintf("FailToCreateSEMKEYS1!n");return-1;if(semid_s2=semget(SEMKEY_S2,1,0777|IPC_CREAT|IPC_EXCL)=-1)if(errno=EEXIST)printf("TheSEMKEY_S2HasExisted

10、!n");elseprintf("FailToCreateSEMKEY_S2!n");return-1;if(semid_empty=semget(SEMKEY_EMPTY,1,0777|IPC_CREAT|IPC_EXCL)=-1)if(errno=EEXIST)printf("TheSEM_EMPTYHasExisted!n");elseprintf("FailToCreateSEM_EMPTY!n");return-1;/*給信號(hào)量賦初值*/set_sembuf_struct(&sem_tmp,0,BUFF_L

11、EN,0);/*BUFF_LEN*/semop(semid_empty,&sem_tmp,1);set_sembuf_struct(&sem_tmp,0,0,0);/*0*/semop(semid_s1,&sem_tmp,1);set_sembuf_struct(&sem_tmp,0,0,0);/*0*/semop(semid_s2,&sem_tmp,1);set_sembuf_struct(&sem_tmp,0,1,0);/*1*/semop(semid_mutex,&sem_tmp,1);return0;2.Father.c/*下面的

12、p,v是對(duì)系統(tǒng)調(diào)用的簡(jiǎn)單封裝*/intP(intsemid)structsembufp_buf;p_buf.sem_num=0;pbuf.semop=-1;p_buf.sem_flg=0;if(semop(semid,&p_buf,1)=-1)/*semop參見(jiàn)課件ppt*/perror("p(semid)falsed");exit(1);elsereturn(0);intV(intsemid)structsembufv_buf;/*structsembuf參見(jiàn)課件ppt*/v_buf.sem_num=0;v_buf.sem_op=1;v_buf.sem_flg=0

13、;if(semop(semid,&v_buf,1)=-1)perror("v(semid)failed");exit(1);elsereturn(0);main()char*p_buffer;/*共享存儲(chǔ)區(qū)地址*/unsignedcharin;/*生產(chǎn)者存放產(chǎn)品的指針:它的值存放在全局緩沖區(qū)第一個(gè)字節(jié)*/intshmid;/*共享存儲(chǔ)區(qū)id*/intsemid_empty,semid_s1,semid_s2,semid_mutex;/*信號(hào)量集合id*/shmid=shmget(SHMKEY,BUFF_LEN*FRUIT_LEN,0777);/*連接共享存儲(chǔ)區(qū):2存

14、放in,out的值*/p_buffer=(char*)shmat(shmid,0,0);/*取共享存儲(chǔ)區(qū)地址*/semid_mutex=semget(SEMKEY_MUTEX,1,0777);/*獲取全局信號(hào)量id*/semid_empty=semget(SEMKEY_EMPTY,1,0777);semid_s1=semget(SEMKEY_S1,1,0777);semid_s2=semget(SEMKEY_S2,1,0777);/*進(jìn)入臨界區(qū)*/P(semid_empty);/*對(duì)私有信號(hào)量作嗨作*/P(semid_mutex);/*對(duì)公有信號(hào)量作嗨作*/*二者順序不能換*/in=(unsi

15、gnedchar)(*p_buffer);intj=0;"apple" )&&(*(p_buffer + in * FRUIT_LEN)!= "orange");"apple")for(j=0;j<5;j+)if(*(p_buffer+in*FRUIT_LEN)!=printf("fatherputaapple!n"*(p_buffer+in*FRUIT_LEN)=break;in=(in+1)%BUFF_LEN;shmdt(p_buffer);/*離開(kāi)緩沖區(qū)*/*離開(kāi)臨界區(qū)*/V(semid

16、_s1);V(semid_mutex);3.Mother.c/*下面的p,v是對(duì)系統(tǒng)調(diào)用的簡(jiǎn)單封裝*/intP(intsemid)structsembufp_buf;p_buf.sem_num=0;p_buf.sem_op=-1;p_buf.sem_flg=0;if(semop(semid,&p_buf,1)=-1)/*semop參見(jiàn)課件ppt*/perror("p(semid)falsed");exit(1);elsereturn(0);intV(intsemid)structsembufv_buf;/*structsembuf參見(jiàn)課件ppt*/v_buf.sem

17、_num=0;v_buf.sem_op=1;v_buf.sem_flg=0;if(semop(semid,&v_buf,1)=-1)perror("v(semid)failed");exit(1);elsereturn(0);main()char*p_buffer;/*共享存儲(chǔ)區(qū)地址*/unsignedcharin;/*生產(chǎn)者存放產(chǎn)品的指針:它的值存放在全局緩沖區(qū)第一個(gè)字節(jié)*/intshmid;/*共享存儲(chǔ)區(qū)id*/intsemid_empty,semid_s1,semid_s2,semid_mutex;/*信號(hào)量集合id*/shmid=shmget(SHMKEY,

18、BUFF_LEN*FRUIT_LEN,0777);/*連接共享存儲(chǔ)區(qū):2存放in,out的值*/p_buffer=(char*)shmat(shmid,0,0);/*取共享存儲(chǔ)區(qū)地址*/semid_mutex=semget(SEMKEY_MUTEX,1,0777);/*獲取全局信號(hào)量id*/semid_empty=semget(SEMKEY_EMPTY,1,0777);semid_s1=semget(SEMKEY_S1,1,0777);semid_s2=semget(SEMKEY_S2,1,0777);/*進(jìn)入臨界區(qū)*/P(semid_empty);/*對(duì)私有信號(hào)量作嗨作*/P(semid_m

19、utex);/*對(duì)公有信號(hào)量作嗨作*/*二者順序不能換*/in=(unsignedchar)(*p_buffer);intj=0;for(j=0;j<5;j+)if(*(p_buffer+in*FRUIT_LEN)!="apple")&&(*(p_buffer+in*FRUIT_LEN)!="orange")printf("motherputaorange!n");*(p_buffer+in*FRUIT_LEN)="orange"break;in=(in+1)%BUFF_LEN;shmdt(p

20、_buffer);/*離開(kāi)緩沖區(qū)*/*離開(kāi)臨界區(qū)*/V(semid_s2);V(semid_mutex);4.Son.c/*下面的p,v是對(duì)系統(tǒng)調(diào)用的簡(jiǎn)單封裝*/intP(intsemid)structsembufpbuf;p_buf.sem_num=0;p_buf.sem_op=-1;p_buf.sem_flg=0;if(semop(semid,&p_buf,1)=-1)/*semop參見(jiàn)課件ppt*/perror("p(semid)falsed");exit(1);elsereturn(0);intV(intsemid)structsembufv_buf;/*s

21、tructsembuf參見(jiàn)課件ppt*/v_buf.sem_num=0;v_buf.sem_op=1;v_buf.sem_flg=0;if(semop(semid,&v_buf,1)=-1)perror("v(semid)failed");exit(1);elsereturn(0);main()char*p_buffer;/*共享存儲(chǔ)區(qū)地址*/unsignedcharin;/*生產(chǎn)者存放產(chǎn)品的指針:它的值存放在全局緩沖區(qū)第一個(gè)字節(jié)*/intshmid;/*共享存儲(chǔ)區(qū)id*/intsemid_empty,semid_s1,semid_s2,semid_mutex;/*

22、信號(hào)量集合id*/shmid=shmget(SHMKEY,BUFF_LEN*FRUIT_LEN,0777);/*連接共享存儲(chǔ)區(qū):2存放in,out的值*/p_buffer=(char*)shmat(shmid,0,0);/*取共享存儲(chǔ)區(qū)地址*/semid_mutex=semget(SEMKEY_MUTEX,1,0777);/*獲取全局信號(hào)量id*/semid_empty=semget(SEMKEY_EMPTY,1,0777);semid_s1=semget(SEMKEY_S1,1,0777);semid_s2=semget(SEMKEY_S2,1,0777);/*進(jìn)入臨界區(qū)*/P(semids

23、2);/*對(duì)私有信號(hào)量作P操作*/P(semid_mutex);/*對(duì)公有信號(hào)量作嗨作*/*二者順序不能換*/in=(unsignedchar)(*p_buffer);intj=0;printf("songetaorange!n");for(j=0;j<5;j+)if(*(p_buffer+in*FRUIT_LEN)="orange")*(p_buffer+in*FRUIT_LEN)='0;break;in=(in+1)%BUFF_LEN;shmdt(p_buffer);/*離開(kāi)緩沖區(qū)*/*離開(kāi)臨界區(qū)*/V(semid_empty);V(s

24、emid_mutex);5.Daughter.c/*下面的p,v是對(duì)系統(tǒng)調(diào)用的簡(jiǎn)單封裝*/intP(intsemid)structsembufp_buf;p_buf.sem_num=0;p_buf.sem_op=-1;p_buf.sem_flg=0;if(semop(semid,&p_buf,1)=-1)/*semop參見(jiàn)課件ppt*/perror("p(semid)falsed");exit(1);elsereturn(0);intV(intsemid)structsembufv_buf;/*structsembuf參見(jiàn)課件ppt*/v_buf.sem_num=0

25、;v_buf.sem_op=1;v_buf.sem_flg=0;if(semop(semid,&v_buf,1)=-1)perror("v(semid)failed");exit(1);elsereturn(0);main()char*p_buffer;/*共享存儲(chǔ)區(qū)地址*/unsignedcharin;/*生產(chǎn)者存放產(chǎn)品的指針:它的值存放在全局緩沖區(qū)第一個(gè)字節(jié)*/intshmid;/*共享存儲(chǔ)區(qū)id*/intsemid_empty,semid_s1,semid_s2,semid_mutex;/*信號(hào)量集合id*/shmid=shmget(SHMKEY,BUFF_L

26、EN*FRUIT_LEN,0777);/*連接共享存儲(chǔ)區(qū):2存放in,out的值*/p_buffer=(char*)shmat(shmid,0,0);/*取共享存儲(chǔ)區(qū)地址*/semid_mutex=semget(SEMKEY_MUTEX,1,0777);/*獲取全局信號(hào)量id*/semid_empty=semget(SEMKEY_EMPTY,1,0777);semid_s1=semget(SEMKEY_S1,1,0777);semid_s2=semget(SEMKEY_S2,1,0777);/*進(jìn)入臨界區(qū)*/P(semid_s1);/*對(duì)私有信號(hào)量作P操作*/P(semid_mutex);/*

27、對(duì)公有信號(hào)量作嗨作*/*二者順序不能換*/in=(unsignedchar)(*p_buffer);intj=0;printf("daughtergetaapple!n");for(j=0;j<5;j+)if(*(p_buffer+in*FRUIT_LEN)="apple")*(p_buffer+in*FRUIT_LEN)='0'break;in=(in+1)%BUFF_LEN;shmdt(p_buffer);/*離開(kāi)緩沖區(qū)*/*離開(kāi)臨界區(qū)*/V(semid_empty);V(semid_mutex);五、實(shí)驗(yàn)結(jié)果及分析放入了5個(gè)水

28、果,在執(zhí)行父親進(jìn)程,則該進(jìn)程被阻塞roolLoci Ihast pu I an ang?!I rool'loca Ehos t put an g riingf 1rooilocj Ihos tk4? shelf.Zin./inpu t mi c rnng0!I rool<toca lh()s tke shelft ./fpm 3n apple!rnoiioca Iho? tkcshe# +/fplr口.ah 3Ppi白!loca thus t此時(shí)執(zhí)行兒子進(jìn)程,吃掉一個(gè)橘子,緩沖區(qū)空位增1,喚醒了等待中的父親進(jìn)程,此時(shí)父親可以放入一個(gè)橘子raailocu Ihos t put an

29、 tiraihge!"rao LlocnIhos t pui an nrarige 'roor I oca I ho t put an ura臊! rat* iloc Iho $ t put an appIe!一凸力 ntlnci Ihos t put an apple!raaiocA Ihos tput an appI £!ra& l I tkcihe ./m keshe fl Jm keshe ,/m kethe/I .Xf kufMH Vf "皿# ./f ke5hefl |c-a i an orjngc!rou L "I o l&

30、#39;j Ibus l eat an orange!foot n目】h口號(hào) I m an orange!roo t 利。lho*i ea t an o w*! I ruo I l'Ioca IhoK l此時(shí)橘子被吃完,再執(zhí)行兒子進(jìn)程,則被阻塞(ioDi|ofaIhosIkeshflfl,/5eaIanoiange!11odiMoceiIIidstkeshe#heaLanojaneIroott-'iD3Ikf*hp|./s?atinoiange!iactjlocjllio<Ik”heqJs執(zhí)行一次母親進(jìn)程,放入一個(gè)橘子,來(lái)喚醒兒子進(jìn)程,此時(shí)剛才的兒子進(jìn)程執(zhí)行,吃掉一個(gè)橘子

31、rnotlocahostkeshe)ft.!mpvfanorangeIrofltlncaIhostkeshe#"mpulanorange!roattdeaIhotlke&lw月Jmpinanornrtg<!(rcuLlucaIhuitIceEh。#./mpuLanorunge!root.loca(hastkeshe|rooti'Eoca1hostke!ihefi./seatanorange!tootloca(hostkeshe#./sc-atunorange!rootlacaIhastk心*h#.,算eitanorange!rootlocaIhostke!)he

32、1#./s<?.atanorajige!runtuoca1hostkesheJt1通緩沖區(qū)滿(mǎn),執(zhí)行母親進(jìn)程,被阻塞rooItictrookMoeaJtiusiputjailappIefrooLflccalhQstputinapple.oupMccaIticsIpulmnarangeJronIhn51pul3noraigerooi'locaIboatputaiiofjnerool'loca1ticstke she ,U .Jc ke she J fl . / fkc油尸M Ji kcKhe #nikeshe# ./m k士 g# Jm ke she卜.Jm文件®

33、褊捐些 SSCV> 絡(luò)踹轉(zhuǎn):(roo 倒 oc Hwstkc shr#Jqruol'Alcculliin IkeshclJfput an app Ie JrooIhos lkesh«ffput an 叩pieron ilnca I tin s ke shelfiJeput un grange!r«o 11(3 ca Ihnji lkcshfiff*/mput jii orange!i udMuch Ihub Lkeshe#Jmput an orange!roa t'locs Ihos lkeshe*B./mput 口n orange!rnn | 硬In

34、r1a Ihns tDuli im.ii in r L r i i ir m* j m , r - y t / r =":y(rnot :Yioca I tins l roov:loca Itiosi i ruuiluca Uius i 1 rool'a Itius 1 ea1 an orange!(roo 1( Inca hostroot?t cti /hnm? honulN cd sheng shcii cd kesihc! ke she# /ske she執(zhí)行兒子進(jìn)程,吃掉一個(gè)橘子,此時(shí)喚醒剛才的母親進(jìn)程,放入一個(gè)橘子女兒吃完了蘋(píng)果,在執(zhí)行女兒進(jìn)程,則被阻塞。eu 1

35、ait upp If !口uthus 1kehe#.7dL an appIe 1Eroo I Mrca 】卜。9 11Vdoa I an appIe!.rootkblie &Jd&a ! an npp Ie ! Eroo t Mnca Iho n IVdea I an upp 3 rot)t luta Ihu & Ik 八 he #J A執(zhí)行父親進(jìn)程,增加一個(gè)蘋(píng)果,喚醒剛才等待中的女兒進(jìn)程,女兒吃掉一個(gè)蘋(píng)果。pit l an oranjie !roo t i'Inca tpul an nppM!roo tloca Ibos lpul jn app Ie J| roo t .loca fpul an app1e!roo t loca Ihos 1pul aji a ppi /I ruo t 'lora Ihus Eke shelfl 口root I hu5 tea t an a pp!rontlDe0 I

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論