




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實驗報告五——生產(chǎn)者和消費者問題姓名:叢菲學(xué)號:20230830205班級:信息平安二班一、實習(xí)內(nèi)容1、模擬操作系統(tǒng)中進程同步和互斥2、實現(xiàn)生產(chǎn)者和消費者問題的算法實現(xiàn)二、實習(xí)目的1、熟悉臨界資源、信號量及PV操作的定義與物理意義2、了解進程通信的方法3、掌握進程互斥與進程同步的相關(guān)知識4、掌握用信號量機制解決進程之間的同步與互斥問題5、實現(xiàn)生產(chǎn)者-消費者問題,深刻理解進程同步問題三、實習(xí)題目在Linux操作系統(tǒng)下用C實現(xiàn)經(jīng)典同步問題:生產(chǎn)者—消費者,具體要求如下:(1)一個大小為10的緩沖區(qū),初始狀態(tài)為空。(2)2個生產(chǎn)者,隨機等待一段時間,往緩沖區(qū)中添加數(shù)據(jù),假設(shè)緩沖區(qū)已滿,等待消費者取走數(shù)據(jù)之后再添加,重復(fù)10次。(3)2個消費者,隨機等待一段時間,從緩沖區(qū)中讀取數(shù)據(jù),假設(shè)緩沖區(qū)為空,等待生產(chǎn)者添加數(shù)據(jù)之后再讀取,重復(fù)10次。提示本實驗的主要目的是模擬操作系統(tǒng)中進程同步和互斥。在系統(tǒng)進程并發(fā)執(zhí)行異步推進的過程中,由于資源共享和進程間合作而造成進程間相互制約。進程間的相互制約有兩種不同的方式?!?〕間接制約。這是由于多個進程共享同一資源〔如CPU、共享輸入/輸出設(shè)備〕而引起的,即共享資源的多個進程因系統(tǒng)協(xié)調(diào)使用資源而相互制約?!?〕直接制約。只是由于進程合作中各個進程為完成同一任務(wù)而造成的,即并發(fā)進程各自的執(zhí)行結(jié)果互為對方的執(zhí)行條件,從而限制各個進程的執(zhí)行速度。生產(chǎn)者和消費者是經(jīng)典的進程同步問題,在這個問題中,生產(chǎn)者不斷的向緩沖區(qū)中寫入數(shù)據(jù),而消費者那么從緩沖區(qū)中讀取數(shù)據(jù)。生產(chǎn)者進程和消費者對緩沖區(qū)的操作是互斥,即當前只能有一個進程對這個緩沖區(qū)進行操作,生產(chǎn)者進入操作緩沖區(qū)之前,先要看緩沖區(qū)是否已滿,如果緩沖區(qū)已滿,那么它必須等待消費者進程將數(shù)據(jù)取出才能寫入數(shù)據(jù),同樣的,消費者進程從緩沖區(qū)讀取數(shù)據(jù)之前,也要判斷緩沖區(qū)是否為空,如果為空,那么必須等待生產(chǎn)者進程寫入數(shù)據(jù)才能讀取數(shù)據(jù)。在本實驗中,進程之間要進行通信來操作同一緩沖區(qū)。一般來說,進程間的通信根據(jù)通信內(nèi)容可以劃分為兩種:即控制信息的傳送與大批量數(shù)據(jù)傳送。有時,也把進程間控制在本實驗中,進程之間要進行通信來操作同一緩沖區(qū)。一般來說,進程間的通信根據(jù)通信內(nèi)容可以劃分為兩種:即控制信息的傳送與大批量數(shù)據(jù)傳送。有時,也把進程間控制信息的交換稱為低級通信,而把進程間大批量數(shù)據(jù)的交換稱為高級通信。目前,計算機系統(tǒng)中用得比擬普遍的高級通信機制可分為3大類:共享存儲器系統(tǒng)、消息傳遞系統(tǒng)及管道通信系統(tǒng)。共享存儲器系統(tǒng)共享存儲器系統(tǒng)為了傳送大量數(shù)據(jù),在存儲器中劃出一塊共享存儲區(qū),諸進程可通過對共享存儲區(qū)進行讀數(shù)據(jù)或?qū)憯?shù)據(jù)以實現(xiàn)通信。進程在通信之前,向系統(tǒng)申請共享存儲區(qū)中的一個分區(qū),并為它指定一個分區(qū)關(guān)鍵字。信息的交換稱為低級通信,而把進程間大批量數(shù)據(jù)的交換稱為高級通信。目前,計算機系統(tǒng)中用得比擬普遍的高級通信機制可分為3大類:共享存儲器系統(tǒng)、消息傳遞系統(tǒng)及管道通信系統(tǒng)。消息傳遞系統(tǒng)在消息傳遞系統(tǒng)中,進程間的數(shù)據(jù)交換以消息為單位,在計算機網(wǎng)絡(luò)中被稱為報文。消息傳遞系統(tǒng)的實現(xiàn)方式又可以分為以下兩種:(1)直接通信方式發(fā)送進程可將消息直接發(fā)送給接收進程,即將消息掛在接收進程的消息緩沖隊列上,而接收進程可從自己的消息緩沖隊列中取得消息。(2)間接通信方式發(fā)送進程將消息發(fā)送到指定的信箱中,而接收進程從信箱中取得消息。這種通信方式又稱信箱通信方式,被廣泛地應(yīng)用于計算機網(wǎng)絡(luò)中。相應(yīng)地,該消息傳遞系統(tǒng)被稱為電子郵件系統(tǒng)。管道通信系統(tǒng)向管道提供輸入的發(fā)送進程,以字符流方式將大量的數(shù)據(jù)送入管道,而接收進程從管道中接收數(shù)據(jù)。由于發(fā)送進程和接收進程是利用管道進行通信的,故稱為管道通信。為了協(xié)調(diào)發(fā)送和接收雙方的通信,管道通信機制必須提供以下3方面的協(xié)調(diào)功能?!?〕互斥當一個進程正在對pipe文件進行讀或?qū)懖僮鲿r,另一個進程必須等待?!?〕同步當寫進程把一定數(shù)量的數(shù)據(jù)寫入pipe文件后,便阻塞等待,直到讀進程取走數(shù)據(jù)后,再把寫進程喚醒?!?〕確認對方是否存在只有確定對方已存在時,才能進行管道通信,否那么會造成因?qū)Ψ讲淮嬖诙鵁o限制地等待。在這個問題當中,我們采用信號量機制進行進程之間的通信,設(shè)置兩個信號量,空的信號量和滿的信號量。在Linux系統(tǒng)中,一個或多個信號量構(gòu)成一個信號量集合。使用信號量機制可以實現(xiàn)進程之間的同步和互斥,允許并發(fā)進程一次對一組信號量進行相同或不同的操作。每個P、V操作不限于減1或加1,而是可以加減任何整數(shù)。在進程終止時,系統(tǒng)可根據(jù)需要自動消除所有被進程操作過的信號量的影響1.緩沖區(qū)采用循環(huán)隊列表示,利用頭、尾指針來存放、讀取數(shù)據(jù),以及判斷隊列是否為空。緩沖區(qū)中數(shù)組大小為10;2.利用隨機函數(shù)rand()得到A~Z的一個隨機字符,作為生產(chǎn)者每次生產(chǎn)的數(shù)據(jù),存放到緩沖區(qū)中;3.使用shmget()系統(tǒng)調(diào)用實現(xiàn)共享主存段的創(chuàng)立,shmget()返回共享內(nèi)存區(qū)的ID。對于已經(jīng)申請到的共享段,進程需把它附加到自己的虛擬空間中才能對其進行讀寫。4.信號量的建立采用semget()函數(shù),同時建立信號量的數(shù)量。在信號量建立后,調(diào)用semctl()對信號量進行初始化,例如本實習(xí)中,可以建立兩個信號量SEM_EMPTY、SEM_FULL,初始化時設(shè)置SEM_EMPTY為10,SEM_FULL為0。使用操作信號的函數(shù)semop()做排除式操作,使用這個函數(shù)防止對共享內(nèi)存的同時操作。對共享內(nèi)存操作完畢后采用shmctl()函數(shù)撤銷共享內(nèi)存段。5.使用循環(huán),創(chuàng)立2個生產(chǎn)者以及2個消費者,采用函數(shù)fork()創(chuàng)立一個新的進程。6.一個進程的一次操作完成后,采用函數(shù)fflush()刷新緩沖區(qū)。7.程序最后使用semctl()函數(shù)釋放內(nèi)存。模擬程序的程序流程圖如下所示:1.主程序流程圖:2.生產(chǎn)者進程流程圖3.消費者進程流程圖4.P操作流程圖5.V操作流程圖四、實現(xiàn)代碼為://exet5.cpp//#include"stdafx.h"#include<stdio.h>#include<stdlib.h>#definemSIZE3#definepSIZE20staticintmemery[mSIZE]={0};staticintprocess[pSIZE]={0};//staticintprocess[pSIZE]={2,3,2,1,5,2,4,5,3,2,5,2};//staticintprocess[pSIZE]={7,10,1,2,10,3,10,4,2,3,10,3,2,1,2,10,1,7,10,1};voidbuild();voidLRU();intmain(intargc,char*argv[]){printf("Randomsequenceisasfollows:\n");build();printf("\nInvokingLRUAlgorithn:\n");LRU();return0;}voidbuild(){inti=0;for(i=0;i<pSIZE;i++){process[i]=(int)(10.0*rand()/(RAND_MAX));printf("%d",process[i]);}printf("\n");}voidLRU(){intflag[mSIZE]={0};inti=0,j=0;intm=-1,n=-1;intmax=-1,maxflag=0;intcount=0;for(i=0;i<pSIZE;i++){//FindthefirstfreePhysicalBlockfor(j=0;j<mSIZE;j++){if(memery[j]==0){m=j;break;}}//Findiftherearesameprocessesfor(j=0;j<mSIZE;j++){if(memery[j]==process[i]){n=j;}}//FindfreePBfor(j=0;j<mSIZE;j++){if(flag[j]>maxflag){maxflag=flag[j];max=j;}}if(n==-1)//Findnosameprocess{if(m!=-1)//findfreePB{memery[m]=process[i];flag[m]=0;for(j=0;j<=m;j++){flag[j]++;}m=-1;}else//NOfindfreePB{memery[max]=process[i];flag[max]=0;for(j=0;j<mSIZE;j++){flag[j]++;}max=-1;maxflag=0;count++;}}else//Findsameprocess{memery[n]=process[i];flag[n]=0;if(m!=-1)//findfreePB{flag[m]=0;}for(j=0;j<mSIZE;j++){flag[j]++;}max=-1;maxflag=0;n=-1;}for(j=0;j<mSIZE;j++){printf("%d",memery[j]);}printf("\n");}printf("\nThetimesofpageconversionis:%d\n",count);}五、在虛擬機上的具體操作及結(jié)果執(zhí)行exe5.c文件選擇ApplicationsAcecessoriesTerminal,執(zhí)行文件:依次預(yù)處理編譯匯編連接執(zhí)行用文件,編譯通過之后-o執(zhí)行。報錯?。。?!錯誤顯示為很多頭文件沒有預(yù)定義。連續(xù)查找之后得知原因是鏈接不上pthread庫在執(zhí)行命令后面加上-pthread,即新命令格式為:gcc-oexe5exe5.c–lpthread,重新執(zhí)行后的結(jié)果顯示如下截圖:其中1表示緩沖區(qū)被生產(chǎn)者producer1或者二producer2寫入了Item,0表示沒有寫入數(shù)據(jù)或者被消費者consumer1或者consumer2消耗掉六、實驗總結(jié)及思考1、本次實驗是關(guān)于生產(chǎn)者與消費者之間互斥和同步的問題。問題的
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 會計學(xué)專項練習(xí)題及參考答案
- 基站建設(shè)項目可行性研究報告(案例模板)
- 中國IT冷卻系統(tǒng)行業(yè)市場調(diào)研分析及投資戰(zhàn)略規(guī)劃報告
- 2024年陶瓷閥芯行業(yè)市場深度調(diào)研分析及投資前景研究預(yù)測報告目錄
- 2025年脈沖點焊機行業(yè)深度研究分析報告
- 2024-2025學(xué)年高中歷史課時作業(yè)4古代中國的經(jīng)濟政策人民版必修2
- 2024-2025學(xué)年高中英語Unit4Sharing單元加餐練新人教版選修7
- 2025年可折疊電吹風(fēng)項目投資可行性研究分析報告
- 2024-2025學(xué)年高中數(shù)學(xué)第三章空間向量與立體幾何3.2.1用向量方法解決平行問題練習(xí)含解析新人教A版選修2-1
- 2024-2025學(xué)年高中地理第6章人類與地理環(huán)境的協(xié)調(diào)發(fā)展第2節(jié)中國的可持續(xù)發(fā)展實踐練習(xí)新人教版必修2
- 有限公司事業(yè)合伙人管理辦法
- 工余安健環(huán)管理制度
- 某學(xué)校食堂服務(wù)投標書
- 空調(diào)維保服務(wù)項目質(zhì)量保障措施
- 《馬克思主義與社會科學(xué)方法論》課后思考題答案全
- 急性心肌梗塞
- 八年級地理下期教學(xué)計劃(星球地圖版)
- 休閑農(nóng)業(yè)與鄉(xiāng)村旅游(課件)
- 藍色科技風(fēng)半導(dǎo)體產(chǎn)業(yè)PPT模板
- 院感手衛(wèi)生培訓(xùn)課件
- 鑄牢中華民族共同體意識學(xué)習(xí)PPT
評論
0/150
提交評論