2023年山東大學(xué)操作系統(tǒng)實驗報告進程同步實驗_第1頁
2023年山東大學(xué)操作系統(tǒng)實驗報告進程同步實驗_第2頁
2023年山東大學(xué)操作系統(tǒng)實驗報告進程同步實驗_第3頁
2023年山東大學(xué)操作系統(tǒng)實驗報告進程同步實驗_第4頁
2023年山東大學(xué)操作系統(tǒng)實驗報告進程同步實驗_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機科學(xué)與技術(shù)學(xué)院實驗報告實驗題目:實驗四、進彳是同步實驗學(xué)號:日期20230409班級:計基地12姓名:實驗?zāi)康模杭由顚Σl(fā)協(xié)作進程同步與互斥概念的理解,觀測和體驗并發(fā)進程同步與互斥操作的效果,分析與研究經(jīng)典進程同步與互斥問題的實際解決方案。了解Linux系統(tǒng)中IPC進程同步工具的用法,練習(xí)并發(fā)協(xié)作進程的同步與互斥操作的編程與調(diào)試技術(shù)。實驗內(nèi)容:抽煙者問題。假設(shè)一個系統(tǒng)中有三個抽煙者進程,每個抽煙者不斷地卷煙并抽煙。抽煙者卷起并抽掉一顆煙需要有三種材料:煙草、紙和膠水。一個抽煙者有煙草,一個有紙,另一個有膠水。系統(tǒng)中尚有兩個供應(yīng)者進程,它們無限地供應(yīng)所有三種材料,但每次僅輪流提供三種材料中的兩種。得到缺失的兩種材料的抽煙者在卷起并抽掉一顆煙后會發(fā)信號告知供應(yīng)者,讓它繼續(xù)提供此外的兩種材料。這一過程反復(fù)進行。請用以上介紹的IPC同步機制編程,實現(xiàn)該問題規(guī)定的功能。硬件環(huán)境:解決器:Intel?CoreNi3—2350MCPU@2.3OGHzX4圖形:Intel?SandybridgeMobilex86/MMX/SSE2內(nèi)存:4G操作系統(tǒng):32位磁盤:20.1GB軟件環(huán)境:ubuntul3.04實驗環(huán)節(jié):(1)新建定義了Producer和consumer共用的IPC函數(shù)原型和變量的ipc.h文獻。(2)新建ipc.c文獻,編寫producer和consumer共用的IPC的具體相應(yīng)函數(shù)。(3)新建Producer文獻,一方面定義producer的一些行為,運用系統(tǒng)調(diào)用,建立共享內(nèi)存區(qū)域,設(shè)定其長度并獲取共享內(nèi)存的首地址。然后設(shè)定生產(chǎn)者互斥與同步的信號燈,并為他們設(shè)立相應(yīng)的初值。當(dāng)有生產(chǎn)者進程在運營而其他生產(chǎn)者請求時,相應(yīng)的信號燈就會阻止他,當(dāng)共享內(nèi)存區(qū)域已滿時,信號等也會提醒生產(chǎn)者不能再往共享內(nèi)存中放入內(nèi)容。(4)新建Consumer文獻,定義consumer的一些行為,運用系統(tǒng)調(diào)用來創(chuàng)建共享內(nèi)存區(qū)域,并設(shè)定他的長度并獲取共享內(nèi)存的首地址。然后設(shè)定消費者互斥與同步的信號燈,并為他們設(shè)立相應(yīng)的初值。當(dāng)有消費進程在運營而其他消費者請求時,相應(yīng)的信號燈就會阻止它,當(dāng)共享內(nèi)存區(qū)域已空時,信號等也會提醒生產(chǎn)者不能再從共享內(nèi)存中取出相應(yīng)的內(nèi)容。

?.⑥Ukun(0)Ukun-Lenovo-ldeaPad-Y471A:~/lab4likun@likun-Lenovo-IdeaPad-Y471A:~$cdIab4likun@likun-Lenovo-IdeaPad-Y471A:~/lab4$./consumer23319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergetshastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaper分析:hastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaper多進程的系統(tǒng)中避免不了進程間的互相關(guān)系。進程互斥是進程之間發(fā)生的一種間接性作用,一般是程序不希望的。通常的情況是兩個或兩個以上的進程需要同時訪問某個共享變量。我們一般將發(fā)生可以問共享變量的程序段稱為臨界區(qū)。兩個進程不能同時進入臨界區(qū),否則就會導(dǎo)致數(shù)據(jù)的不一致,產(chǎn)生與時間有關(guān)的錯誤。解決互斥問題應(yīng)當(dāng)滿足互斥和公平兩個原則,即任意時刻只能允許一個進程處在同一共享變量的臨界區(qū),并且不能讓任一進程無限期地等待。進程同步是進程之間直接的互相作用,是合作進程間故意識的行為,典型的例子是公共汽車上司機與售票員的合作。只有當(dāng)售票員關(guān)門之后司機才干啟動車輛,只有司機停車之后售票員才干開車門。司機和售票員的行動需要一定的協(xié)調(diào)。同樣地,兩個進程之間有時也有這樣的依賴關(guān)系,因此我們也要有一定的同步機制保證它們的執(zhí)行順序。信號量機制就是其中的一種。信號燈機制即運用Pv操作來對信號量進行解決。PV操作由P操作原語和V操作原語組成(原語是不可中斷的過程),對信號量進行操作,具體定義如下:P(S):①將信號量S的值減1,即S=S-1;②假如S3。,則該進程繼續(xù)執(zhí)行;否則該進程置為等待狀態(tài),排入等待隊列。V(S):①將信號量S的值加14US=S+1;②假如S>0,則該進程繼續(xù)執(zhí)行;否則釋放隊列中第一個等待信號量的進程。PV操作的意義:我們用信號量及PV操作來實現(xiàn)進程的同步和互斥。信號量的數(shù)據(jù)結(jié)構(gòu)為一個值和一個指針,指針指向等待該信號量的下一個進程。信號量的值與相應(yīng)資源的使用情況有關(guān)。當(dāng)它的值大于0時,表達當(dāng)前可用資源的數(shù)量;當(dāng)它的值小于0時,其絕對值表達等待使用該資源的進程個數(shù)。信號量的值僅能由PV操作來改變。一般來說,信號量S3。時,S表達可用資源的數(shù)量。執(zhí)行一次P操作意味著請求分派一個單位資源,因此S的值減1;當(dāng)S<0時,表達已經(jīng)沒有可用資源,請求者必須等待別的進程釋放該類資源,它才干運營下去。而執(zhí)行一個V操作意味著釋放一個單位資源,因此S的值加1;若S£0,表達有某些進程正在等待該資源,因此要喚醒一個等待狀態(tài)的進程,使之運營下去。使用多于4個的生產(chǎn)者和消費者,以各種不同的啟動順序、不同的執(zhí)行速率檢測以上示例程序和獨立實驗程序也能滿足同步的規(guī)定。由于使用信號量滿足進程互斥的規(guī)定,任意時刻進入臨界區(qū)的進程只有一個。而進程是通過信號量喚醒阻塞進程,仍然可以實現(xiàn)進程同步。調(diào)試過程中碰到的重要問題及解決過程:(1)在修改程序時,最開始使用了read。、scheduaI。、Iock(),但是編譯出現(xiàn)錯誤。解決方法:使用sleep。函數(shù)。(2)exit()缺少頭文獻。解決方法:加頭文獻#include<stdlib.h>osleep。等Iinux系統(tǒng)調(diào)用缺少頭文獻。解決方法:加頭文獻#include<unistd.h>體會和收獲:通過本次實驗,初步了解操作系統(tǒng)的進程同步的過程。我對生產(chǎn)者-消費者問題的解決辦法有了更全面的結(jié)識,同時對調(diào)試代碼更加純熟。本次實驗最大的體會就是,做東西要細心,在寫代碼的過程中,稍不留意就給后期調(diào)試工作帶來很多問題。運營的消費者應(yīng)行與相應(yīng)的生產(chǎn)者相應(yīng)起來,只有這樣運營結(jié)果才會對的。結(jié)論分析與體會:實現(xiàn)方式:Consumer:#incIude"ipc.h"intmain(intargc,char*argv口){。intrate=3;intconsumerid=atoi(argv[1]);buff_h=101;buff_number=1;cget_h=103;eget_number=1;shm_fIg=IPC_CREAT|0644;buff_ptr=(char*)set_shm(buff_h,buff_number,shm_fig);ocget_ptr=(int*)set_shm(cget_h,cget_number,shm_fIg);prod_h=201;。pmtx_h=202;cons_h=301;。cmtx_h=302;。sem_fIg=IPC_CREAT|0644;osem_vaI=buff_number;prod_sem=set_sem(prod_h,sem_vaI,sem_fIg);sem_vaI=0;ocons_sem=set_sem(cons_h,sem_vaI,sem_fIg);。sem_vaI=1;cmtx_sem=set_sem(cmtx_h,sem_vaI,sem_fig);。if(consumerid==O)。*cget_ptr=O;°whiIe(1){。if(buff_ptr[O]-'A,==consumerid){3down(cons_sem);o。down(cmtx_sem);。。sleep(rate);。oif(buff_ptr[O]='A')(ooprintf("%dTheconsumerhasglue.\nTheconsumergetstobaccoandpaper\n",getpid());0ft)o。if(buff_ptr[O]=='B'){。。printf("%dTheconsumerhaspaper.\nTheconsumergetstobaccoandgIue\n",getpid());0)if(buff_ptr[0]=='C){。o。oprintf("%dTheconsumerhastobacco.\nTheconsumergetsglueandpaper\n",getpid());0o}。*cget_ptr=(*cget_ptr+1);if(*cget_ptr%2==0)obuff_ptr[0]="D';。buff_ptr[0]='E';。。up(cmtx_sem);o3oup(prod_sem);00})breturnEXIT_SUCCESS;}Producer:#incIude"ipc.h"intmain(intargc,char*argv[]){。intrate=3;。intproducerid=atoi(argv[1]);。buff_h=101;buff_number=1;。pput_h=102;pput_number=1;shm_fIg=lPC_CREAT|0644;fbuff_ptr=(char)set_shm(buff_h,buff_number,shmpput_ptr=(int*)set_shm(pput_h,pput_number,shm_fIg);prod_h=201;pmtx_h=202;?cons_h=301;cmtx_h=302;osem_fIg=IPC_CREAT|0644;sem_vaI=buff_number;prod_sem=set_sem(prod_h,sem_vaI,sem_fIg);sem_vaI=0;conssem=setsem(consh,semvaI,semfIg);sem_vaI=1;pmtx_sem=set_sem(pmtx_h,sem_vaI,sem_fIg);oif(producerid==0){obuff_ptr[0]='D';*pput_ptr=0;。)whiIe(1){。if(buff_ptr[0]-"D'~producerid){o。down(prod_sem);?o。down(pmtx_sem);?*pput_ptr=(*pput-ptr+1)%3;。if(*pput_ptr==0){。。buff_ptr[0]='A';o6oprintf("%dTheproducergivestobaccoandpaper\n",getpid());00)。。if(*pput-ptr==1){。o。buff_ptr[0]='B';3oprintf("%dTheproducergivestobaccoandgIue\n",getpid());6O}。。if(*pput_ptr==2){o。。buff_ptr[0]='C';。oprintf("%dTheproducergivesglueandpaper\n",getpid());00}osIeep(rate);。up(pmtx_sem);。。up(cons_sem);))。returnEXIT_SUCCESS;Ipc.h:#incIude"ipc.h"intget_ipc_id(char*proc_fiIe,h_th){。FILE*pf;intm,n;ocharline[BUFSZ],colum[BUFSZ];if((pf=fopen(proc_fiIe,"r"))==NULL)(。perror("ProcfiIenotopen");exit(EXIT_FAILURE);0)fgets(line,BUFSZ,pf);。whiIe(!feof(pf))(om=n=0;fgets(Iine,BUFSZ,pf);。while(Iine[m]=='')0om++;whiIe(Iine[m]!='')。o。coIum[n++]=line[m++];。coIum[n]='\0';。if(atoi(colum)!=h)ocontinue;。n=0;whiIe(Iine[m]=='')o?m++;while(line[m]!='')°ocoIum[n++]=Iine[m++];colum[n]='\0';m=atoi(coIum);。fcIose(pf);。returnm;。)。fclose(pf);return—1;]intdown(intsem_id)(ostructsembufbuf;obuf.sem_op=-1;。buf.sem_number=0;buf.sem_fIg=SEM_UND0;。if((semop(sem_id,&buf,1))<0){?perror("downerror");ooexit(EXIT_FAILURE);。)returnEXIT_SUCCESS;1intup(intsem_id)(structsembufbuf;buf.sem_op=1;buf.sem_number=0;buf.sem_fIg=SEM_UND0;oif((semop(semid,&buf,1))<0){。perror("uperror");。exit(EXIT_FAILURE);)。returnEXITSUCCESS;1intset_sem(h_tsem_h,intsem_vaI,intsem_fIg){intsem_id;Sem_unssem_arg;。if((sem_id=get_ipc_id("/proc/sysvipc/sem",sem_h))<0)(。if((sem_id=semget(sem_h,1,sem_fIg))<0){operror("semaphorecreateerror");ooexit(EXIT_FAILURE);00)。?sem_arg.vaI-sem_vaI;。if(semctI(sem_id,0,SETVAL,sem_arg)<0){3perror("semaphoreseterror");exit(EXIT_FAILURE);。1)returnsem_id;]一char*set_shm(h_tshm_h,intshm_number,intshm_fIg){ointm,shm_id;char*shm_buf;oif((shm_id=get_ipc_id("/proc/sysvipc/shm",shm_h))<0)(一一if((shm_id=shmget(shm_h,shm_number,shm_fIg))<0)(。。perror("shareMemoryseterror");3exit(EXIT_FAILURE);00)。oif((shm_buf=(char*)shmat(shm_id,0,0))<(char*)0)(operror("getshareMemoryerror");exit(EXIT_FAILURE);。)。。for(m=0;m<shm_number;m++)。shm_buf[m]=0;0)if((shm_buf=(charshmat(shm_id,0,0))<(char*)0){。perror("getshareMemoryerror");exit(EXIT_FAILURE);0)。returnshm_buf;1intset_msq(h_tmsq_h,intmsq_fIg){intmsq_id;?if((msq_id=get_ipc_id("/proc/sysvipc/msg",msq_h))<0)(。oif((msq_id=msgget(msq_h,msq_fIg))<0){。。perror("messageQueueseterror");。。exit(EXIT_FAILURE);})。returnmsq_id;}實驗結(jié)果:?.⑥Ukun(0)Ukun-Lenovo-ldeaPad-Y471A:~/lab4likun@likun-Lenovo-IdeaPad-Y471A:~$cdIab4likun@ltkun-Lenovo-IdeaPad-Y471A:~/lab4$./producer0

3320Theproducergivestobaccoandglue3320Theproducergivesglueandpaper3320Theproducergivestobaccoandglue3320Theproducergivestobaccoandpaper3320Theproducergivesglueandpaper3320Theproducergivestobaccoandglue3320Theproducergivestobaccoandpaper3320Theproducergivesglueandpaper3320Theproducergivestobaccoandglue3320Theproducergivestobaccoandpaper3320Theproducergivesglueandpaper3320Theproducergivestobaccoandglue3320Theproducergivestobaccoandpaper3320Theproducergivesglueandpaper3320Theproducergivestobaccoandglue3320Theproducergivestobaccoandpaper6—管Ukun(0)Ukun-Lenovo-ldeaPad-Y471A:~/lab4likunglikun-Lenovo-IdeaPad-Y471A:*/lab4$./producer13321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper1?一⑥Ukun(fl)Ukun-Lenovo-ldeaPad-Y471A:~/lab4

Itkun@ltkun-Lenovo-IdeaPad-Y471A:,lab4$./consumer?bash:./consumerQ:沒有那個文件或目錄likunglikun-Lenovo-IdeaPad-Y471A:~/Lab4$3096Theconsumerhasglue../consumer0Theconsumergets3096Theconsumertobaccoandhasglue.paperTheconsumergets3096Theconsumertobaccoandhasglue.paperTheconsumergets3096Theconsumertobaccoandhasglue.paperTheconsume

溫馨提示

  • 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

提交評論