版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、青島理工大學(xué)操作系統(tǒng)課程設(shè)計(jì)報(bào)告院(系): _計(jì)算機(jī)工程學(xué)院 _專(zhuān)業(yè):_計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè) _學(xué) 生姓名: _班級(jí):_ 學(xué)號(hào):_題目:用多進(jìn)程同步方法演示 “生產(chǎn)者-消費(fèi)者”問(wèn)題 起迄日期:_設(shè)計(jì)地點(diǎn): _指導(dǎo)教師: _年度 第學(xué)期完成日期:年 月曰一、 課程設(shè)計(jì)目的本次進(jìn)行操作系統(tǒng)課程設(shè)計(jì)的主要任務(wù)是設(shè)計(jì)一個(gè)模擬生產(chǎn)者消費(fèi)者工作的系統(tǒng)。這個(gè)問(wèn)題中有一種生產(chǎn)者和一種消費(fèi)者,生產(chǎn)者和消費(fèi)者對(duì)同一個(gè)緩沖區(qū)進(jìn)行操作,互斥的訪(fǎng)問(wèn)緩沖區(qū)。本次課程設(shè)計(jì)的目的就是加深對(duì)多進(jìn)程如何正確訪(fǎng)問(wèn)資源的認(rèn)識(shí),同時(shí)掌握信號(hào)量在互斥訪(fǎng)問(wèn)時(shí)應(yīng)該如何正確有效地使用。掌握生產(chǎn)者消費(fèi)者問(wèn)題的解決流程和方法,提高編程能力、解決問(wèn)
2、題的能力和查閱文檔的能力。二、 課程設(shè)計(jì)內(nèi)容與要求1、設(shè)計(jì)目的:通過(guò)研究 Linux的進(jìn)程同步機(jī)制和信號(hào)量,實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問(wèn)題的并 發(fā)控制。2、 說(shuō)明:有界緩沖區(qū)內(nèi)設(shè)有 20個(gè)存儲(chǔ)單元,放入取出的產(chǎn)品設(shè)定為20個(gè)100以?xún)?nèi)的隨機(jī) 整數(shù)。3、設(shè)計(jì)要求:1)生產(chǎn)者與消費(fèi)者均有二個(gè)以上2)生產(chǎn)者和消費(fèi)者進(jìn)程的數(shù)目在程序界面上可調(diào),在運(yùn)行時(shí)可隨時(shí)單個(gè)增加與減少生 產(chǎn)者與消費(fèi)者3)生產(chǎn)者的生產(chǎn)速度與消費(fèi)者的消費(fèi)速度均可在程序界面調(diào)節(jié),在運(yùn)行中,該值調(diào)整 后立即生效4)生產(chǎn)者生產(chǎn)的產(chǎn)品由隨機(jī)函數(shù)決定5)多個(gè)生產(chǎn)者或多個(gè)消費(fèi)者之間必須有共享對(duì)緩沖區(qū)進(jìn)行操作的函數(shù)代碼6)每個(gè)生產(chǎn)者和消費(fèi)者對(duì)有界緩沖區(qū)進(jìn)行操
3、作后,即時(shí)顯示有界緩沖區(qū)的全部?jī)?nèi)容、當(dāng)前生產(chǎn)者與消費(fèi)者的指針位置,以及生產(chǎn)者和消費(fèi)者線(xiàn)程標(biāo)識(shí)符7)采用可視化界面,可在運(yùn)行過(guò)程中隨時(shí)暫停,查看當(dāng)前生產(chǎn)者、消費(fèi)者以及有界緩 沖區(qū)的狀態(tài)三、 系統(tǒng)分析與設(shè)計(jì)1系統(tǒng)分析 系統(tǒng)分析1此次課程設(shè)計(jì)的任務(wù)是生產(chǎn)者消費(fèi)者問(wèn)題的模擬演示,需要處理的數(shù)據(jù)有:生產(chǎn)者進(jìn) 程數(shù)目,消費(fèi)者進(jìn)程數(shù)目,生產(chǎn)者生產(chǎn)速度,消費(fèi)者消費(fèi)速度,緩沖區(qū)中產(chǎn)品的個(gè)數(shù),以及 生產(chǎn)、消費(fèi)產(chǎn)品的指針。2程序中需要緩沖區(qū)中的信息可以動(dòng)態(tài)演示,生產(chǎn)者、消費(fèi)者的個(gè)數(shù)以及生產(chǎn)、消費(fèi)時(shí) 的速度可以隨時(shí)調(diào)節(jié),同時(shí)為了使程序更加友好,應(yīng)該具有開(kāi)始、暫停、停止等相關(guān)可操作按鈕。3系統(tǒng)對(duì)外的界面如下:1)對(duì)進(jìn)程
4、個(gè)數(shù)的修改:點(diǎn)擊生產(chǎn)者、消費(fèi)者進(jìn)程數(shù)據(jù)文本框下的增加、減少按鈕2) 對(duì)速度的修改:速度值默認(rèn)為2000ms/個(gè),如需修改,則在速度文本框中輸入所修 改的值,點(diǎn)擊修改按鈕即可進(jìn)行修改。3)需要開(kāi)始模擬時(shí),點(diǎn)擊右上方的開(kāi)始按鈕。如需暫停模擬過(guò)程,可點(diǎn)擊暫停按鈕。 當(dāng)需要運(yùn)行完畢時(shí),點(diǎn)擊停止按鈕,進(jìn)程工作停止。主生界產(chǎn)面者控制消有費(fèi)界者緩控沖制區(qū)控制生 產(chǎn) 者 數(shù) 目 調(diào) 節(jié)消生費(fèi)產(chǎn)者者數(shù)速目度調(diào)調(diào)節(jié)節(jié)消 費(fèi) 者 速 度 調(diào) 節(jié)4此次使用java平臺(tái)實(shí)現(xiàn),保證了程序在各種機(jī)器的運(yùn)行,只需要事前建立java的運(yùn)行環(huán)境即可,便于程序的移植5系統(tǒng)界面如下:進(jìn)程工作情況動(dòng)態(tài)顯示區(qū)開(kāi)始、暫停、停止按鈕區(qū)進(jìn)程數(shù)
5、目調(diào)節(jié)區(qū)程序速度控制調(diào)節(jié)區(qū)2、系統(tǒng)設(shè)計(jì):2.1、模塊設(shè)計(jì):主界面系統(tǒng)主模塊2.2、數(shù)據(jù)結(jié)構(gòu)說(shuō)明:2.3、算法流程圖:生產(chǎn)者流程圖:消費(fèi)者流程圖:四、系統(tǒng)測(cè)試與調(diào)試分析1系統(tǒng)測(cè)試(1)因?yàn)楫?dāng)生產(chǎn)者在緩沖區(qū)滿(mǎn)了以后自動(dòng)阻塞,需要消費(fèi)者喚醒,所以需要測(cè)試喚醒的實(shí) 現(xiàn)是否正常。測(cè)試名稱(chēng)用多進(jìn)程冋步方法演示“生產(chǎn)者-消費(fèi)者”問(wèn)題:測(cè)試目的驗(yàn)證生產(chǎn)者能被消費(fèi)者喚醒測(cè)試技術(shù)單元測(cè)試測(cè) 試 說(shuō) 明 測(cè)試方法黑盒測(cè)試法測(cè)試內(nèi)容當(dāng)生產(chǎn)者生產(chǎn)滿(mǎn)緩沖區(qū)后,開(kāi)始增加消費(fèi)者,喚醒生產(chǎn)者測(cè)試步驟增加生產(chǎn)者等待緩沖區(qū)被用完增加消費(fèi)者測(cè)試數(shù)據(jù)增加生產(chǎn)者到2 緩沖區(qū)產(chǎn)品數(shù)量20緩沖區(qū)空閑位為0蘋(píng)果消費(fèi)者增加到 3預(yù)期結(jié)果緩沖區(qū)開(kāi)
6、始增加產(chǎn)品緩沖區(qū)滿(mǎn)生產(chǎn)者阻塞生產(chǎn)者被喚醒,緩沖區(qū) 中產(chǎn)品數(shù)量減少測(cè) 試 用 例測(cè)試結(jié)果與預(yù)期相符與預(yù)期相符與預(yù)期相符(2)因?yàn)楫?dāng)生產(chǎn)者在緩沖區(qū)滿(mǎn)了以后自動(dòng)阻塞,需要消費(fèi)者喚醒,所以需要測(cè)試 喚醒的實(shí)現(xiàn)是否正常。測(cè)試名稱(chēng)用多進(jìn)程冋步方法演示“生產(chǎn)者-消費(fèi)者”問(wèn)題:測(cè)試目的驗(yàn)證多個(gè)生產(chǎn)者和消費(fèi)者互斥操作緩沖區(qū)測(cè)試技術(shù)單元測(cè)試測(cè) 試 說(shuō) 明測(cè)試方法黑盒測(cè)試法測(cè)試內(nèi)容緩沖區(qū)為空,消費(fèi)者阻塞時(shí),生產(chǎn)者喚醒消費(fèi)者測(cè)試步驟開(kāi)始生產(chǎn)產(chǎn)品,緩沖區(qū) 為空空閑位20開(kāi)始消費(fèi)產(chǎn)品,終止生產(chǎn)線(xiàn) 程開(kāi)始增加生產(chǎn)者 減少消費(fèi)者測(cè)試數(shù)據(jù)生產(chǎn)者數(shù)量5生產(chǎn)者減少到0增加消費(fèi)者到5增加生產(chǎn)者到5減少消費(fèi)者到2預(yù)期結(jié)果緩沖區(qū)內(nèi)產(chǎn)品數(shù)
7、量每次 增加5個(gè)消費(fèi)完成產(chǎn)品,消費(fèi)者阻塞喚醒消費(fèi)者,緩沖區(qū)中 產(chǎn)品增加測(cè) 試 用 例:測(cè)試結(jié)果與預(yù)期相符與預(yù)期相符與預(yù)期相符3)測(cè)試生產(chǎn)者和消費(fèi)者的速度是否可以調(diào)節(jié)測(cè)試名稱(chēng)用多進(jìn)程冋步方法演示“生產(chǎn)者-消費(fèi)者”問(wèn)題:測(cè)試目的蘋(píng)果、橘子生產(chǎn)者和蘋(píng)果、橘子消費(fèi)者速度可以調(diào)節(jié)測(cè)試技術(shù)單元測(cè)試測(cè) 試 說(shuō) 明測(cè)試方法黑盒測(cè)試法測(cè)試內(nèi)容調(diào)節(jié)生產(chǎn)者和消費(fèi)者速度測(cè)試步驟開(kāi)始程序運(yùn)行輸入生產(chǎn)者、消費(fèi)者速度值點(diǎn)擊修改按鈕測(cè)試數(shù)據(jù)生產(chǎn)者速度2000消費(fèi)者速度2000生產(chǎn)者速度值 1000消費(fèi)者速度值1000點(diǎn)擊修改測(cè) 試 用 例預(yù)期結(jié)果緩沖區(qū)開(kāi)始被操作界面文本框中顯示速度值速度均變化到1000修改圖2:生產(chǎn)者速度調(diào)
8、節(jié)圖3 :消費(fèi)者速度調(diào)節(jié)測(cè)試結(jié)果與預(yù)期相符與預(yù)期相符與預(yù)期相符2、調(diào)試分析:1.在編寫(xiě)過(guò)程中,由于函數(shù)較多,開(kāi)始時(shí)由于名稱(chēng)不夠清晰,程序出現(xiàn)錯(cuò)誤。2.測(cè)試運(yùn)行過(guò)程中,由于函數(shù)名稱(chēng)的相似,出現(xiàn)引用混亂的情況,程序無(wú)法正常運(yùn)行。3.在制作界面時(shí),由于遺忘了 chuangkou.add(jp);chuangkou.setVisible(true);兩個(gè)語(yǔ)句,導(dǎo)致界面無(wú)法正常顯示。4.制作界面時(shí),對(duì)各個(gè)控件的坐標(biāo)和大小考慮不周,導(dǎo)致界面混亂,影響美觀。五、用戶(hù)手冊(cè)1.使用的語(yǔ)言和平臺(tái)本次實(shí)驗(yàn)使用的是 java語(yǔ)言的eclipse平臺(tái)2.對(duì)于程序運(yùn)行環(huán)境的注意事項(xiàng)需要安裝java運(yùn)行環(huán)境,eclipss
9、平臺(tái)不需要安裝,只需要下載完成就可以使用。3.程序使用步驟增加減少圖4 :生產(chǎn)者數(shù)量調(diào)節(jié)圖5:消費(fèi)者數(shù)量調(diào)節(jié)圖1 :系統(tǒng)登錄界面。圖6:控制界面圖7:動(dòng)態(tài)顯示緩沖區(qū)4.程序使用步驟:1)單擊開(kāi)始按鈕,程序開(kāi)始初始化執(zhí)行暫停停止2)點(diǎn)擊增加按鈕分別增加生產(chǎn)者和消費(fèi)者,可以看到可視化緩沖區(qū)開(kāi)始運(yùn)動(dòng)生產(chǎn)運(yùn)行魚(yú)廬唐四產(chǎn)品個(gè)教為1 匕11疋;(0)23;諸龍者數(shù):Thread. sleep ( speed );3)在速度調(diào)節(jié)部分調(diào)節(jié)生產(chǎn)者和消費(fèi)者的速度,可以看到緩沖區(qū)出現(xiàn)預(yù)期的產(chǎn)品種類(lèi)和數(shù) 量的變化。六、程序清單class Con sumer exte nds Threadprivatehuanchon
10、gquhcq ; /保存一個(gè)緩沖區(qū)類(lèi)的引用staticlong speed = 2000; /speed 表示消費(fèi)者線(xiàn)程的速度staticint cpause = 0; /cpause 變量用來(lái)控制消費(fèi)者線(xiàn)程的開(kāi)始與暫停boolean out = false ;/定義構(gòu)造方法,接收一個(gè)緩沖區(qū)類(lèi)型的變量public Con sumer(hua nchon gqu hcq)this . hcq = hcq;run()方法調(diào)用接收的緩沖區(qū)類(lèi)型的變量指向的decrease。方法,開(kāi)始消費(fèi)元素。Overridepublic void run()while (! out )if ( out )break
11、;if ( cpause = 1)try冃爭(zhēng)者 Thr e id.-3FlThmd-3 冃要者ThrEad-3 冃奧者Thr沁d-MI的頊寧亍藪為0倉(cāng)岸已空生產(chǎn)者麹: o生產(chǎn)淹蔭: |20002000Thread. sleep ( speed );catch (In terruptedExceptio n e) e.pri ntStackTrace();hcq .Consume();class Producerexte nds Threadprivatehuanchongquhcq ;/定義緩沖區(qū)類(lèi)的引用。staticlongspeed : =2000;/定義speed變量,表示線(xiàn)程速度boo
12、lea nout=false5publicstaticintppause=0; /ppause變量用來(lái)控制生產(chǎn)者線(xiàn)程的開(kāi)始與暫停/定義構(gòu)造方法,接收一個(gè)緩沖區(qū)類(lèi)型的變量publicProducer(hua ncho ngqu hcq)this . hcq = hcq;public void changeout()out = ! out ;/run()方法調(diào)用緩沖區(qū)類(lèi)型變量指向的對(duì)象的in crease()方法,開(kāi)始生產(chǎn)元素。Overridepublic void run()while (! out )if ( out )break ;if ( ppause = 1)tryThread. sle
13、ep ( speed );存儲(chǔ)生產(chǎn)的產(chǎn)品catch (In terruptedExceptio n e)e.pri ntStackTrace();hcq .Produce。;class hua nchon gqu/number表示動(dòng)態(tài)緩沖區(qū)中元素的數(shù)量static int nu mber = 0;staticboolean E_F = new boolean 20; / 緩沖區(qū)狀態(tài)控制staticint storage = new int 20;staticSemaphoreempty =new Semaphore(20);staticSemaphorefull =new Semaphore(
14、0);staticSemaphorecha npin=new Semaphore(0);staticSemaphoremutex =new Semaphore(l);staticint cpnum=0;staticint poin tcp=-1;publichua nchon gqu()E_Fi = false ;storage i =0public void Produce()empty .acquire();II信號(hào)量的p操作,申請(qǐng)空緩沖區(qū)mutex .acquire();II 互斥信號(hào)量if ( pointcp +1!= 20)poin tcp +;E_F pointcp = true
15、; II將生產(chǎn)了產(chǎn)品的標(biāo)志位設(shè)為滿(mǎn) cpnu m+;storage pointcp = ( int )(Math. random ()*99+0); IIfor (inti = 0 ;i 20 ;i+)Stri ng str2 = Thread.curre ntThread ().getName();pc. ta2 .append(生產(chǎn)者+ str2 +運(yùn)行 n);nu mber +;pc. ta1 .append(倉(cāng)庫(kù)中的產(chǎn)品個(gè)數(shù)為 ” + number + n);pc. ta1 .append(它們是:n);for ( int j = 0; j 20; j+)if (storage j !
16、=O)pc. ta1 .append( ( +j+ ) +storage j +);elsepc. ta1 .append();if ( number = 20)pc. ta1 .append( n 倉(cāng)庫(kù)已滿(mǎn)”);pc. ta1 .append( n);mutex .release(); / 釋放互斥鎖full .release(); /增加滿(mǎn)信號(hào)量的值chan pin .release(); II增加產(chǎn)品信號(hào)量的值 public void Consume()chanpin .acquire。;II 申請(qǐng)獲得產(chǎn)品full .acquire(); II申請(qǐng)滿(mǎn)緩沖區(qū) mutex .acquire(
17、); II互斥進(jìn)入臨界區(qū)Stri ng str2 = Thread.curre ntThread().getName();pc. ta2 .append(消費(fèi)者 ” + str2 +運(yùn)行 n);nu mber -;cpnu m_;E_F pointcp = false ; II 設(shè)置為空storage pointcp =O;pointcp -; II產(chǎn)品指針減一pc. tai .append(倉(cāng)庫(kù)中的數(shù)字個(gè)數(shù)為 ” + number + n);pc. tai .append(它們是:n);for ( int j = 0; j 20; j+)if ( storage j !=O)pc. tai
18、.append( ( +j+ ) +storage j +);elsepc. tai .append(II II);if ( number = 0)pc. ta1 .append( pc. ta1 .append( mutex .release。; empty .release();n倉(cāng)庫(kù)已空”);n/);退出臨界區(qū)空緩沖區(qū)信號(hào)量加一class Semaphoreint value ;public Semaphore( int v)this . value = v;/定義P、V原語(yǔ)操作,原語(yǔ)操作就是執(zhí)行時(shí)不能中斷,所以/獲取synchroni zed修飾publicsynchroni zedv
19、oid acquire()value -;if (value 0)try this .wait(); / 等待 catch (In terruptedExceptio n e) e.pri ntStackTrace();publicsynchroni zedvoid release()/釋放/喚醒java語(yǔ)言進(jìn)行程序編制。因?yàn)橄鄬?duì)于mfc等,java語(yǔ)言java 了解不深,掌握程序會(huì)value +;if (value =0) this .notify();七、體會(huì)與自我評(píng)價(jià)對(duì)于本次課程設(shè)計(jì),我采用了更輕便簡(jiǎn)潔,在繪制可視化圖形界面時(shí)也相對(duì)容易很多。可是由于對(duì)的也不是很好,所以編制的程序并不算完美。比如在按了暫停按鈕或停止按鈕之后, 出現(xiàn)延遲等現(xiàn)象。本次實(shí)驗(yàn)并沒(méi)有特別困難的算法。其實(shí)主要的算法只有兩種, 一種是生產(chǎn)者的生產(chǎn)過(guò)程,一種是消費(fèi)者的消費(fèi)過(guò)程。在設(shè)計(jì)過(guò)程中,由于生產(chǎn)者與消費(fèi)者需要互斥的訪(fǎng)問(wèn)緩沖區(qū),將產(chǎn)品放進(jìn)去或從里面取出,所以最后決定使用指針的方法,通過(guò)指針前后移動(dòng)來(lái)表現(xiàn)產(chǎn)品被放入緩沖池或取出緩沖池的過(guò)程。剛開(kāi)始時(shí),我將指針的初值設(shè)置為0,但是出現(xiàn)的產(chǎn)品只有19個(gè),不符合20個(gè)緩沖池的要求。后來(lái)我發(fā)現(xiàn)是我對(duì)指針存在理解錯(cuò)誤并將初值設(shè)置 改為-1之后,運(yùn)行程
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣西中國(guó)舞培訓(xùn)教程課件
- 七年級(jí)道德與法治上冊(cè)第三單元師長(zhǎng)情誼第六課師生之間第1課時(shí)走近老師教案新人教版
- 三年級(jí)科學(xué)下冊(cè)第四單元關(guān)心天氣4今天刮什么風(fēng)教案蘇教版1
- 《讀書(shū)考試法》課件
- 小學(xué)生語(yǔ)法精講課件
- 工藝基礎(chǔ)培訓(xùn)課件
- 《陳列無(wú)聲的語(yǔ)言》課件
- 培訓(xùn)專(zhuān)員課件
- 小學(xué)生語(yǔ)文作文冬天課件
- 人教版七年級(jí)上冊(cè)數(shù)學(xué)有理數(shù)計(jì)算題分類(lèi)及混合運(yùn)算練習(xí)題(200題)
- 工行人工智能風(fēng)控
- 簡(jiǎn)易呼吸器使用及檢測(cè)評(píng)分表
- 康復(fù)科進(jìn)修匯報(bào)
- 2024-2030年中國(guó)水培蔬菜行業(yè)發(fā)展分析及投資前景預(yù)測(cè)研究報(bào)告
- 2023風(fēng)電機(jī)組預(yù)應(yīng)力混凝土塔筒與基礎(chǔ)結(jié)構(gòu)設(shè)計(jì)標(biāo)準(zhǔn)
- 3D打印技術(shù)在醫(yī)療領(lǐng)域的應(yīng)用
- 人員招聘的程序與信息發(fā)布
- 倉(cāng)庫(kù)班長(zhǎng)年終總結(jié)
- 血脂康膠囊的經(jīng)濟(jì)學(xué)評(píng)估
- 組織協(xié)調(diào)方案及措施
- 2024-2029年中國(guó)IP授權(quán)行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展研究報(bào)告
評(píng)論
0/150
提交評(píng)論