




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課程設(shè)計名稱:編程模擬多進程共享臨界資源專業(yè)班級:_學(xué)生姓名:_學(xué)號:_指導(dǎo)教師:_課程設(shè)計時間:軟件工程專業(yè)課程設(shè)計任務(wù)書學(xué)生姓名專業(yè)班級學(xué)號題目編程模擬多進程共享臨界資源課題性質(zhì)其它課題來源自擬課題指導(dǎo)教師劉於勛同組姓名主要內(nèi)容要求產(chǎn)生3個進程:1兩個進程模擬需要進入臨界區(qū)的用戶進程,當(dāng)需要進入臨界區(qū)時,顯示:進程X請求進入臨界區(qū),同時向管理進程提出申請;申請返回,表示進入了臨界區(qū)。在臨界區(qū)中等待一段隨機時間,并顯示:進程x正在臨界區(qū);當(dāng)時間結(jié)束,顯示:進程X退出臨界區(qū)同時向管理進程提出退出申請;當(dāng)申請返回,顯示:進程X已退出臨界區(qū)。2、一個進程作為原語的管理進程,接受其他進程的臨界區(qū)進入
2、請求:如果允許進入,則設(shè)置相應(yīng)變量,然后返回;如果不允許進入,則進入循環(huán)等待,直到允許為止;3、對臨界區(qū)的訪問應(yīng)遵循空閑讓進、忙則等待、有限等待、讓權(quán)等待的準(zhǔn)則。4、進程間通信可以采用信號、消息傳遞、管道或網(wǎng)絡(luò)通信方式。任務(wù)要求理解多進程共享臨界資源的原理,并編程實現(xiàn)參考文獻任滿杰等操作系統(tǒng)原理實用教程電子工業(yè)出版社湯子瀛計算機操作系統(tǒng)(修訂版)西安電子科技大學(xué)出版社張堯?qū)W史美林計算機操作系統(tǒng)教程實驗指導(dǎo)清華大學(xué)出版社羅宇等操作系統(tǒng)課程設(shè)計機械工業(yè)出版社2005審查意見指導(dǎo)教師簽字:教研室主任簽字:年7月6日信息科學(xué)與工程課程名稱:操作系統(tǒng)原理設(shè)計題目:編程模擬多進程共享臨界資源專業(yè):軟件工程
3、班級:姓名:學(xué)號:序號評審項目分數(shù)滿分標(biāo)準(zhǔn)說明1內(nèi)容思路清晰,語言表達準(zhǔn)確,概念清楚,論點正確;設(shè)計方法科學(xué),分析歸納合理;結(jié)論嚴(yán)謹,設(shè)計有應(yīng)用價值。任務(wù)飽滿,工作量適中2創(chuàng)新內(nèi)容新穎,設(shè)計能反映新技術(shù),對前人工作有改進或突破,或有獨特見解3完整性、實用性整體構(gòu)思后合理,理論依據(jù)充分,設(shè)計完整,實用性強4數(shù)據(jù)準(zhǔn)確、可靠數(shù)據(jù)準(zhǔn)確,算法設(shè)計合理5規(guī)范性設(shè)計格式、繪圖、實驗數(shù)據(jù)、標(biāo)準(zhǔn)的運用等符合有關(guān)標(biāo)準(zhǔn)和規(guī)定6紀(jì)律性遵守課程設(shè)計紀(jì)律,聽從指導(dǎo)教師安排,設(shè)計過程態(tài)度認真7答辯準(zhǔn)備充分,思路清晰、論點正確、對設(shè)計方案理解深入,問題回答有理有據(jù),簡明正確總分綜合意見指導(dǎo)教師2015年7月12日 # 1要求
4、產(chǎn)生3個進程:1、兩個進程模擬需要進入臨界區(qū)的用戶進程,當(dāng)需要進入臨界區(qū)時,顯示:“進程請求進入臨界區(qū)”,同時向管理進程提出申請;申請返回,表示進入了臨界區(qū)。在臨界區(qū)中等待一段隨機時間,并顯示:“進程正在臨界區(qū)”;當(dāng)時間結(jié)束,顯示:“進程退出臨界區(qū)”,同時向管理進程提出退出申請;當(dāng)申請返回,顯示:“進程已退出臨界區(qū)?!?、一個進程作為原語的管理進程,接受其他進程的臨界區(qū)進入請求:如果允許進入,則設(shè)置相應(yīng)變量,然后返回;如果不允許進入,則進入循環(huán)等待,直到允許為止;退3、對臨界區(qū)的訪問應(yīng)遵循空閑讓進、忙則等待、有限等待、讓權(quán)等待的準(zhǔn)則。退4、進程間通信可以采用信號、消息傳遞、管道或網(wǎng)絡(luò)通信方式。
5、退 2流程圖:資源是否為空1足是足結(jié)束進程進入臨界區(qū),等待一段隨機時間,顯示“正在等待進入臨界區(qū)和等待時間結(jié)束釋放資源,向管理進程由請返回,顯示“正在退出臨界區(qū)逍程獲得資源,向管理逍程申請逍入臨界區(qū),顯示正在等待進入臨界區(qū)作輸入兩個用戶進程和一個管理進程4進程申請資源,并顯示正在請求資源-3幻顯示“等待臨界區(qū)資源顯示已退出臨界區(qū)4幵始*繼續(xù)等待圖1 3運行環(huán)境運行環(huán)境:4開發(fā)工具和編程語言開發(fā)工具:,編程語言:5詳細設(shè)計5.1程序界面importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjavax.swing.*;imp
6、ortjavax.swing.border.LineBorder;publicclassMainFrameextendsJFrameimplementsFocusListenerJTextAreajta=newJTextArea();多行文本框staticJTextFieldjtf=newJTextField2;/單行文本框staticJButtonjb=newJButton2;按鈕ThreadShowts=newThreadShow();/界面設(shè)計publicMainFrame()super(“模擬多進程共享臨界資源”);題目命名JLabeljl=newJLabel2;for(inti=0;
7、ijtf.length;i+)jtfi=newJTextField(12);jtfi.addFocusListener(this);jl0=newJLabel(第一進程的名稱:”);設(shè)置標(biāo)簽名稱,顯示進程jll=newJLabel(第二進程的名稱:);jb0=newJButton(”模擬開始”);/設(shè)置按鈕名稱,控制程序的開始和結(jié)束jb1=newJButton(”模擬結(jié)束);JMenuBarmb=newJMenuBar();Containercont=this.getContentPane();初始化一個容器cont.setLayout(newBorderLayout();設(shè)置布局管理器JPa
8、neljp1=newJPanel();JPaneljp2=newJPanel();jp1.setLayout(newGridLayout(0,1);for(inti=0;ijtf.length;i+)/添加文本區(qū)JPaneltemp=newJPanel();temp.add(jli);temp.add(jtfi);jp1.add(temp);for(inti=0;ijb.length;i+)添加按鈕jp2.add(jbi);jp1.add(jp2);jp1.setBorder(newLineBorder(newColor(0,0,0),10);jp1.setBorder(newLineBord
9、er(newColor(238,238,238),10);cont.setLayout(newBorderLayout();cont.add(jp1,BorderLayout.NORTH);jta.setEnabled(true);JScrollPanejs=newJScrollPane(jta,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);jta.setBorder(newLineBorder(newColor(34,57,12),1);js.
10、setBorder(newLineBorder(newColor(238,238,238),10);cont.add(js,BorderLayout.CENTER);this.setSize(335,435);/定義界面大小this.setDefaultCloseOperation(3);/設(shè)置當(dāng)前界面顯示時相對屏幕的位置this.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/2-175,Toolkit.getDefaultToolkit().getScreenSize().height/2-200);this.se
11、tResizable(false);/窗口大小不可變this.setVisible(true);/顯示當(dāng)前窗口jb1.addActionListener(newActionListener()/jb1添加監(jiān)聽器publicvoidactionPerformed(ActionEventarg0)if(ts.tu1!=null&ts.tu1.isAlive()errupt();if(ts.tu2!=null&ts.tu2.isAlive()errupt();System.exit(0););jb0.addActionListener(newActionLis
12、tener()/jb0添加監(jiān)聽器publicvoidactionPerformed(ActionEventarg0)for(inti=0;ijtf.length;i+)jtfi.setEditable(false);MainFrame.jb0.setEnabled(false);jta.setText();ts.run(jtf0.getText().trim(),jtf1.getText().trim(),jta););publicstaticvoidmain(Stringares)newMainFrame();publicvoidfocusGained(FocusEventarg0)/當(dāng)用戶
13、點擊文本框時,文本框就把當(dāng)前內(nèi)容清空JTextFieldjtf=(JTextField)arg0.getSource();jtf.setText();publicvoidfocusLost(FocusEventarg0)5.2classThreadManagerimplementsRunnable/指向要管理得臨界資源ThingSomeobj;/記錄obj是否已有使用者booleanjud=false;Vectorvec=newVector();Stringname;publicThreadManager(ThingSomets)obj=ts;publicvoidrun()while(vec.
14、size()!=0)for(inti=0;ivec.size();i+)if(!(Thread)vec.get(i).isAlive()/如果進程執(zhí)行結(jié)束(Thread)vec.get(i).interrupt();/*使被阻塞的進程拋出一個中斷異常,從而使進程提前結(jié)束阻塞狀態(tài),退出堵塞代碼。*/vec.remove(i);tryThread.currentThread().sleep(100);catch(InterruptedExceptione)e.printStackTrace();JOptionPane.showMessageDialog(null,模擬結(jié)束,信息,/結(jié)束窗口JOpt
15、ionPane.INFORMATION_MESSAGE);for(inti=0;iMainFrame.jtf.length;i+)MainFrame.jtfi.setText();MainFrame.jtfi.setEditable(true);MainFrame.jb0.setEnabled(true);publicvoidaddThreadUser(ThreadUseruser)vec.add(user);publicvoidtake(Threaduser)/進程控制塊System.out.println(”進程+user.getName()+請求資源);obj.jta.append(”進
16、程+user.getName()+請求資源n);如果jud為true,表示有進程正在使用資源,jud為false,表示資源沒有被使用while(jud)trySystem.out.println(進程+user.getName()+等待資源);obj.jta.append(進程+user.getName()+等待資源n);synchronized(obj)/進入資源的等待池中,等待被喚醒obj.wait();catch(InterruptedExceptione)System.out.println(進程+user.getName()+進入臨界區(qū));obj.jta.append(進程+user
17、.getName()+進入臨界區(qū)n);jud=true;/使用資源obj.useing(user);jud=false;System.out.println(進程+user.getName()+已退出臨界區(qū));obj.jta.append(進程+user.getName()+已退出臨界區(qū)n);synchronized(obj)/把資源等待池中的進程喚醒obj.notifyAll();5.3臨界資源設(shè)計代碼classThingSomestaticJTextAreajta=newJTextArea();publicThingSome()publicThingSome(JTextAreajta)th
18、is.jta=jta;publicvoiduseing(Threaduser)System.out.println(”進程+user.getName()+正在臨界區(qū)”);jta.append(”進程+user.getName()+正在臨界區(qū)n);try/模擬使用者使用了該資源一段時間Thread.currentThread().sleep(500);catch(InterruptedExceptione)e.printStackTrace();System.out.println(進程+user.getName()+退出臨界區(qū));jta.append(進程+user.getName()+退出臨
19、界區(qū)n);5.4管理進程代碼設(shè)計classThreadUserextendsThread/管理進程,接受其他進程的臨界區(qū)進入請求并處理ThreadManagertm=null;/供構(gòu)造函數(shù)publicThreadUser(ThreadManagertm)this.tm=tm;publicvoidrun()for(inti=0;i30;i+)/進程請求使用資源tm.take(this);ThingSome.jta.append(進程+this.getName()+完成工作n);5.5通信模塊設(shè)計classThreadShowThreadUsertu1;ThreadUsertu2;publicvo
20、idrun(Stringname1,Stringname2,JTextAreajta)ThingSomets=newThingSome(jta);ThreadManagertm=newThreadManager(ts);Threadth=newThread(tm);tu1=newThreadUser(tm);tu1.setName(name1); 圖 tu2=newThreadUser(tm);tu2.setName(name2);tu1.start();tu2.start();tm.addThreadUser(tu1);tm.addThreadUser(tu2);ThreadmanagerT
21、hread=newThread(tm);managerThread.start();6測試數(shù)據(jù):第一個進程:第二個進程:6.程1序運行界面:圖輸2入進程名稱:圖3點擊模擬開始,顯示程序運行過程:輸4出程序結(jié)果:圖 # ,3148067任滿杰,操作系統(tǒng)原理實用教程電子工業(yè)出版社,63湯子瀛,計算機操作系統(tǒng)(第三版),西安電子科技大學(xué)出版社TOC o 1-5 h z張堯?qū)W,計算機操作系統(tǒng)教程實驗指導(dǎo),清華大學(xué)出版社,羅宇等,操作系統(tǒng)課程設(shè)計,機械工業(yè)出版社,94劉繼承,程序設(shè)計及實驗,清華大學(xué)出版社,198 #通過這次課程設(shè)計,我們更進一步的熟悉計算機操作系統(tǒng)的內(nèi)涵,同時也對語法和語言的面向?qū)ο筇?/p>
22、性有了一定的理解。我也更加深刻地理解面向?qū)ο蟮幕靖拍詈兔嫦驅(qū)ο蟪绦蛟O(shè)計的基本原理。這次課程設(shè)計也提高了我們的編程能力,培養(yǎng)了我們利用面向?qū)ο蟮拈_發(fā)方法進行系統(tǒng)開發(fā)的技巧和良好的程序設(shè)計風(fēng)格;使我們進一步學(xué)習(xí)和利用軟件工程思想進行軟件開發(fā)和軟件文檔的編制。操作系統(tǒng)是用戶和計算機硬件之間的橋梁,用戶通過軟件向操作系統(tǒng)提交作業(yè),每個作業(yè)有一個或多個進程組成。所以本設(shè)計的主要功能是實現(xiàn)計算機的模擬進程調(diào)度與共享臨界資源。本模擬操作系統(tǒng)由三個系統(tǒng)進程組成,由原語管理所有的子進程和總的內(nèi)存和資源分配,兩個進程對臨界區(qū)進行申請資源和占有。而管理進程(原語)和子進程都是一個類的對象,不同的是系統(tǒng)進程由程序自
23、動初始化和運行,而子進程須由模擬用戶提交。在這次編制中,我學(xué)會了很多東西,也找出了自己的一些不足。通過這次課程設(shè)計我又加深了對這些知識的記憶;其次是各個功能的算法,以前還是很模糊,現(xiàn)在總算有領(lǐng)悟啦;再次是整個工程的全局把握還不夠,有時遺漏忘點,不過最后在不斷地修改中完成了這次課程設(shè)計。 # 源程序importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjavax.swing.*;importjavax.swing.border.LineBorder;publicclassMainFrameextendsJFrameimpl
24、ementsFocusListenerJTextAreajta=newJTextArea();多行文本框staticJTextFieldjtf=newJTextField2;/單行文本框staticJButtonjb=newJButton2;按鈕ThreadShowts=newThreadShow();/界面設(shè)計publicMainFrame()super(“模擬多進程共享臨界資源”);題目命名JLabeljl=newJLabel2;for(inti=0;ijtf.length;i+)jtfi=newJTextField(12);jtfi.addFocusListener(this);jl0=
25、newJLabel(第一進程的名稱:”);設(shè)置標(biāo)簽名稱,顯示線程jll=newJLabel(第二進程的名稱:);jb0=newJButton(”模擬開始”);/設(shè)置按鈕名稱,控制程序的開始和結(jié)束jb1=newJButton(”模擬結(jié)束);JMenuBarmb=newJMenuBar();Containercont=this.getContentPane();初始化一個容器cont.setLayout(newBorderLayout();設(shè)置布局管理器JPaneljp1=newJPanel();JPaneljp2=newJPanel();jp1.setLayout(newGridLayout(0
26、,1);for(inti=0;ijtf.length;i+)/添加文本區(qū)JPaneltemp=newJPanel();temp.add(jli);temp.add(jtfi);jp1.add(temp);for(inti=0;ijb.length;i+)添加按鈕jp2.add(jbi);jp1.add(jp2);l4l4jp1.setBorder(newLineBorder(newColor(0,0,0),10);jp1.setBorder(newLineBorder(newColor(238,238,238),10);cont.setLayout(newBorderLayout();cont
27、.add(jp1,BorderLayout.NORTH);jta.setEnabled(true);JScrollPanejs=newJScrollPane(jta,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);jta.setBorder(newLineBorder(newColor(34,57,12),1);js.setBorder(newLineBorder(newColor(238,238,238),10);cont.add(js,Bord
28、erLayout.CENTER);this.setSize(335,435);/定義界面大小this.setDefaultCloseOperation(3);/設(shè)置當(dāng)前界面顯示時相對屏幕的位置this.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/2-175,Toolkit.getDefaultToolkit().getScreenSize().height/2-200);this.setResizable(false);/窗口大小不可變this.setVisible(true);/顯示當(dāng)前窗口jbl.addActi
29、onListener(newActionListener()/jb1添加監(jiān)聽器publicvoidactionPerformed(ActionEventarg0)if(ts.tul!=null&ts.tul.isAlive()errupt();if(ts.tu2!=null&ts.tu2.isAlive()errupt();System.exit(0););jb0.addActionListener(newActionListener()/jb0添加監(jiān)聽器publicvoidactionPerformed(ActionEventarg0)for(inti
30、=0;ijtf.length;i+)jtfi.setEditable(false);MainFrame.jb0.setEnabled(false);jta.setText();ts.run(jtf0.getText().trim(),jtfl.getText().trim(),jta););publicstaticvoidmain(Stringares)newMainFrame(); publicvoidfocusGained(FocusEventarg0)/*當(dāng)用戶點擊文本框時,文本框就把當(dāng)前內(nèi)容清空*/JTextFieldjtf=(JTextField)arg0.getSource();j
31、tf.setText();publicvoidfocusLost(FocusEventarg0)/臨界區(qū)classThreadManagerimplementsRunnable/指向要管理得臨界資源ThingSomeobj;/記錄obj是否已有使用者booleanjud=false;Vectorvec=newVector();Stringname;publicThreadManager(ThingSomets)obj=ts;publicvoidrun()while(vec.size()!=0)for(inti=0;ivec.size();i+)if(!(Thread)vec.get(i).is
32、Alive()/如果進程執(zhí)行結(jié)束(Thread)vec.get(i).interrupt();/*使被阻塞的進程拋出一個中斷異常,從而使進程提前結(jié)束阻塞狀態(tài),退出堵塞代碼。*/vec.remove(i);tryThread.currentThread().sleep(100);catch(InterruptedExceptione)e.printStackTrace();JOptionPane.showMessageDialog(null,模擬結(jié)束,信息,/結(jié)束窗口JOptionPane.INFORMATION_MESSAGE);for(inti=0;iMainFrame.jtf.length
33、;i+)MainFrame.jtfi.setText();MainFrame.jtfi.setEditable(true);MainFrame.jb0.setEnabled(true);publicvoidaddThreadUser(ThreadUseruser)vec.add(user);publicvoidtake(Threaduser)/進程控制塊System.out.println(”進程+user.getName()+請求資源);obj.jta.append(”進程+user.getName()+請求資源n);如果jud為true,表示有進程正在使用資源,jud為false,表示資源
34、沒有被使用while(jud)trySystem.out.println(進程+user.getName()+等待資源);obj.jta.append(進程+user.getName()+等待資源n);synchronized(obj)/進入資源的等待池中,等待被喚醒obj.wait();catch(InterruptedExceptione)System.out.println(進程+user.getName()+進入臨界區(qū));obj.jta.append(進程+user.getName()+進入臨界區(qū)n);jud=true;/使用資源obj.useing(user);jud=false;System.out.print
溫馨提示
- 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 造口護理簡單方法
- 探討DeepSeek對家庭健身計劃的優(yōu)化路徑
- 質(zhì)量管理體系常見問題
- 配電室日常管理和維護交流
- 法學(xué)畢業(yè)論文 網(wǎng)絡(luò)購物中消費者權(quán)益保護研究
- 中職學(xué)校教務(wù)述職報告【12篇】
- 酒店服務(wù)員崗位說明書(3篇)
- 六盤水窗臺補漏施工方案
- 透水磚改瀝青施工方案
- 清華大學(xué)《大數(shù)據(jù)應(yīng)用綜合實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- (2024年)量子計算機課件(精)
- 任務(wù) 離心式壓縮機的性能曲線
- 2024年人教版小學(xué)語文五年級下冊第三單元測試卷(含答案解析)【可編輯打印】
- 港口航運運營管理專業(yè)總復(fù)習(xí)試題(四)及答案
- 風(fēng)力發(fā)電塔筒防腐施工方案樣本樣本
- 電氣設(shè)備試驗、檢驗、調(diào)試記錄
- 《燭之武退秦師》挖空翻譯訓(xùn)練+重點知識歸類+古代文化常識
- 綜合實踐活動課《美麗的麥稈畫》課件
- 【5A文】大型國有電力集團風(fēng)電技術(shù)監(jiān)督導(dǎo)則及實施細則
- 校園防暴力欺凌巡查記錄
- 2024年云南銅業(yè)股份有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論