




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
慶交通大綜合性設計性實驗報告實驗項目名稱:進程調度(先來先服務)實驗項目性質:JAVA多線程實驗所屬課程:JAVA程序設計實驗室(中心):語音大樓8樓801班 級:軟件專業2012級2班姓 名:尚亞*學 號:631206050216指導教師:_楊 實驗完成時間:2014年11月25日一、 實驗目的1、 理解程序、線程和進程的概念;2、 理解多線程的概念;3、 掌握線程的各種狀態;4、 熟練使用Thread類創建線程;5、 熟練使用線程各種方法;6、 掌握線程的調度及線程同步的實現原理。二、 實驗內容及要求進程調度是處理機管理的核心內容。本實驗要求采用最高優先數優先的調度算法(即把處理機分配給優先數最高的進程)和先來先服務算法編寫和調試一個簡單的進程調度程序。通過本實驗可以加深理解有關進程控制塊、進程隊列的概念。并體會了優先數和先來先服務調度算法的具體實施辦法。用JAVA語言編寫和調試一個進程調度程序,以加深對進程的概念及進程調度算法的理解。做一個能夠直觀體現多個進程時,CPU是怎樣調度就緒隊列中的進程(按照先來先服務的原則)。三、實驗設備PC機,windows?,eclipse。四、設計方案㈠設計主要思想(1) 要模擬進程的調度算法,必須先體現處進程及系統資源。(2) 要體現先來先服務的算法,就必須表現出當有一個進程進入CPU時其他進程不能進入,并在就緒隊列中排隊。本實驗建立了四個圓移動的線程表示作業調度,用圓在表示就緒隊列的方框中停留表示進程在就緒隊列中排隊。(3)當有一個圓移動到表示CPU的范圍內時,讓其它線程在就緒隊列中排隊,當CPU內無進程時,先來的圓先移動,以表示CPU對進程的調度。㈡設計的主要步驟(1) 建立四個不同顏色的圓移動的線程,表示對四個進程的調度。(2) 當有一個表示進程的圓到達表示CPU范圍內時,通過讓其它幾個圓停留在表示就緒隊列的方框范圍內,表示進程在就緒隊列中排成隊列。(3) 當第一個先到達的進程釋放CPU,在排成隊列的幾個圓中選擇先到達的圓,使其移動表示對先來的進程進行調度,直到所有的圓移動完畢。五、主要代碼importjava.awt.Font;importjava.awt.event.*;importjava.awt.*;importjavax.swing.*;publicclassDoubleBufferextendsFrame//主類繼承Frame類{privateJButtonbutton1;privateImageiBuffer,iBuffer1;privateGraphicsgBuffer1,gBuffer2,gBuffer3,gBuffer4,gBuffer5,gBuffer6;publicpaintThreadpT1;//繪圖線程publicpaintThreadpT2;//繪圖線程publicpaintThreadpT3;//繪圖線程publicpaintThreadpT4;//繪圖線程publicintx1=100,y1=100;//小圓橫、縱坐標publicintx2=100,y2=170;//小圓橫、縱坐標publicintx3=100,y3=240;//小圓橫、縱坐標publicintx4=100,y4=310;//小圓橫、縱坐標publicinta=1;publicintb=2;publicintc=3;publicintd=4;publicDoubleBuffer()//構造函數{super("Java實現調度模擬");this.setResizable(false);//窗體不可最大化this.setSize(750,470);//設置窗口的首選大小this.setVisible(true);//顯示窗口button1=newJButton("運行");pT1=newpaintThread(this,1);pT2=newpaintThread(this,2);pT3=newpaintThread(this,3);pT4=newpaintThread(this,4);button1.setLocation(100,415);button1.setSize(90,40);add(button1);button1.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubx1=100;y1=100;//小圓橫、縱坐標x2=100;y2=170;//小圓橫、縱坐標x3=100;y3=240;//小圓橫、縱坐標x4=100;y4=310;//小圓橫、縱坐標a=1;b=2;c=3;d=4;pT1.start();//繪圖線程啟動pT2.start();//繪圖線程啟動pT3.start();//繪圖線程啟動pT4.start();//繪圖線程啟動}});}publicvoidpaint(Graphicsscr)//重載繪圖函數{scr.setColor(Color.RED);//設置小圓顏色Fontfont1=newFont("宋體",Font.BOLD,30);scr.setFont(font1);scr.drawString("CPU",580,235);Fontfont=newFont("宋體",Font.BOLD,20);scr.setFont(font);scr.drawString("線程一",250,135);scr.fillOval(x1,y1,60,60);//繪制小圓scr.setColor(Color.BLUE);//設置小圓顏色//Fontfont=newFont("宋體",Font.BOLD,20);//scr.setFont(font);scr.drawString("線程二",250,205);scr.fillOval(x2,y2,60,60);//繪制小圓scr.setColor(Color.YELLOW);//設置小圓顏色//Fontfont=newFont("宋體",Font.BOLD,20);//scr.setFont(font);scr.drawString("線程三",250,275);scr.fillOval(x3,y3,60,60);//繪制小圓scr.setColor(Color.PINK);//設置小圓顏色//Fontfont=newFont("宋體",Font.BOLD,20);//scr.setFont(font);scr.drawString("線程四",250,345);scr.fillOval(x4,y4,60,60);//繪制小圓//button1.repaint();}publicvoidupdate(Graphicsscr){if(iBuffer1==null){iBuffer1=createImage(670,400);gBuffer1=iBuffer1.getGraphics();}gBuffer1.setColor(Color.BLACK);gBuffer1.fillRect(100,100,340,60);gBuffer1.setColor(Color.BLACK);gBuffer1.fillRect(100,170,340,60);gBuffer1.setColor(Color.BLACK);gBuffer1.fillRect(100,240,340,60);gBuffer1.setColor(Color.BLACK);gBuffer1.fillRect(100,310,340,60);gBuffer1.setColor(Color.MAGENTA);gBuffer1.fillRect(440,100,60,270);gBufferl.setColor(Color.GREEN);gBuffer1.fillRect(500,205,170,60);paint(gBuffer1);scr.drawImage(iBuffer1,0,0,this);}publicstaticvoidmain(String[]args){DoubleBufferDB=newDoubleBuffer();//創建主類的對象DB.addWindowListener(newWindowAdapter() 〃添加窗口關閉處理函數{publicvoidwindowClosing(WindowEvente){System.exit(0);}});}}classpaintThreadextendsThread//繪圖線程類{DoubleBufferDB;ints;publicpaintThread(DoubleBufferDB,ints)〃構造函數{this.DB=DB;this.s=s;}publicvoidrun()//重載run()函數{while(true)//線程中的無限循環{DB.repaint();//窗口重繪if(s==1){if(DB.x1<440){DB.x1++;//修改小圓的橫坐標try{sleep(20);//線程休眠20ms}catch(InterruptedExceptione){}}elseif(DB.a==1&&DB.b==0&&DB.x1<670){DB.y1=205;if(DB.x1==440)DB.x1=DB.x1+40;DB.x1++;//修改小圓的橫坐標try{sleep(15);//線程休眠15ms}catch(InterruptedExceptione){}}}if(s==2){if(DB.x2<440){DB.x2++;//修改小圓的橫坐標try{sleep(13);//線程休眠13ms}catch(InterruptedExceptione){}}elseif(DB.a==1&&DB.b==2&&DB.c==3&&DB.d==0&&DB.x2<670){DB.y2=205;if(DB.x2==340)DB.x2=DB.x2+40;DB.x2++;//修改小圓的橫坐標try{sleep(15);//線程休眠15ms}catch(InterruptedExceptione){}}elseif(DB.d==0)DB.c=0;}if(s==3){if(DB.x3<440){DB.x3++;//修改小圓的橫坐標try{sleep(16);〃線程休眠16ms}catch(InterruptedExceptione){}}elseif(DB.a==1&&DB.b==2&&DB.c==0&&DB.x3<670){DB.y3=205;if(DB.x3==340)DB.x3=DB.x3+40;DB.x3++;//修改小圓的橫坐標try{sleep(15);//線程休眠15ms}catch(InterruptedExceptione){}}elseif(DB.d==0&&DB.c==0)DB.b=0;}if(s==4){if(DB.x4<440){DB.x4++;//修改小圓的橫坐標try{sleep(8);//線程休眠8ms}catch(InterruptedExceptione){}}elseif(DB.a==1&&DB.b==2&&DB.c==3&&DB.d==4&&DB.x4<670){DB.y4=205;if(DB.x4==340)DB.x4=DB.x4+40;DB.x4++;//修改小圓的橫坐標try{sleep(15);//線程休眠15ms}catch(InterruptedExceptione){}}elseDB.d=0;}//DB.repaint();//窗口重繪}}}六、測試結果及說明1、四個圓表示四個線程:2、當有一個進程進入CPU時,其他進程在就緒隊列中排隊:
3、當一個進程不在獨占CPU時,先到達的進程先得到CPU資源:國Java國Java實現調度模擬I口I七、實驗體會通過這次實驗,我對多線程有了更進一步的理解,對調度的算法的實現有了更深一步的認識,了解了調度算法的原理及使用調度算法的意義,同時明白了調度算法對于整個操作系統資源的利用及系統的吞吐量都有很大影響,對操作系統的性能也有很大的影響。本設計使用當今較為流行的可視化編程工具Eclipse設計應用程序創建,應用Java程序可做一個理想的界面,應用所學知識,實現進程調度的算法。通過本次課程設計,我了解到了我們平時的課程理論和做一個課程設計差的實在太遠,我們平時的Java實驗和上課理論知識固然很重要,這是我們對基本知識點的一次次的鞏固,這是為我們做課程設計的基礎工作,是必不可少的一個環節。但是課程設計可以讓我們對課本上的內容有更深的了解還可以考慮到各種意外情況的出現。我們往往所認為的編代碼在課程設計里面所占的比例其實很小,真正要做的東西其實遠遠不止敲代碼。這也是我們的專業所要做的,這如我們的老師所說,敲代碼的學生不僅僅是計算機專業的,我們計算機專業的會的不僅僅是敲代碼,我們要做的是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國加密貨幣ATM行業市場全景分析及前景機遇研判報告
- 設計現金管理管理制度
- 評估機構業務管理制度
- 診所污水污物管理制度
- 試劑供應應急管理制度
- 財務管理薪金管理制度
- 財政加強日常管理制度
- 賬戶開銷風險管理制度
- 貨源倉庫現場管理制度
- 貨車進廠閉環管理制度
- 2024年山西省中考歷史試題卷(含答案解析)
- 2024年中考地理模擬試題(共6套有答案)
- 江蘇省蘇州市2024-2025學年高一歷史下學期期末考試試題含解析
- 安徽省馬鞍山市2024-2025學年高一生物下學期期末考試試題
- 蔬菜農藥殘留檢測合同
- YY 0117.1-2024外科植入物骨關節假體鍛、鑄件第1部分:Ti6Al4V鈦合金鍛件
- 勞務施工合同協議書范本(2024版)
- 任務6.4 IBP盤認知與操作課件講解
- 2024年首屆全國“紅旗杯”班組長大賽考試題庫800題(含答案)
- JT-T-891-2014道路車輛清障救援操作規范
- 基于3D打印技術的個性化正畸矯治器設計
評論
0/150
提交評論