版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 專業(yè)課程設(shè)計(jì)I</b></p><p> 題 目:《Java語(yǔ)言課程設(shè)計(jì)》和《操作系統(tǒng)課程設(shè)計(jì)》</p><p> 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) </p><p> 學(xué) 生 姓 名 </p><p> 班 級(jí) 學(xué) 號(hào)
2、 </p><p> 指 導(dǎo) 教 師 </p><p> 指 導(dǎo) 單 位 </p><p> 日 期 2013/06/27 </p><p><b> 題目1數(shù)字式定時(shí)器</b></
3、p><p><b> 課題內(nèi)容和要求</b></p><p> 計(jì)時(shí)器操作是周期性像實(shí)際生活中的秒表。創(chuàng)建一個(gè)計(jì)時(shí)器,確定計(jì)時(shí)器每隔幾毫秒“震鈴”一次,創(chuàng)建一個(gè)監(jiān)視器,計(jì)時(shí)器發(fā)生的震鈴事件是actionEvent類型的事件。當(dāng)震鈴事件發(fā)生時(shí),監(jiān)視器就會(huì)監(jiān)視到這個(gè)事件,就會(huì)執(zhí)行ActionListner中的方法actionPerformed。</p>&l
4、t;p> 計(jì)時(shí)器創(chuàng)建后,但觸發(fā)事件時(shí)調(diào)用到觸發(fā)事件的函數(shù),然后調(diào)用thread線程中的start()方法后,一旦輪到它共享cpu資源,目標(biāo)對(duì)象就會(huì)自動(dòng)調(diào)用run()方法就是接口回調(diào)。</p><p> 需要用SWING設(shè)計(jì)簡(jiǎn)單界面用于設(shè)定定時(shí)時(shí)間、開始、結(jié)束和暫停功能。單擊“開始”按鈕啟動(dòng)計(jì)時(shí)器,時(shí)間開始計(jì)時(shí)。單擊“暫停”按鈕計(jì)時(shí)器停止計(jì)時(shí),單擊“繼續(xù)”按鈕繼續(xù)計(jì)時(shí)。單擊“重設(shè)”按鈕時(shí)間清零。</
5、p><p> 首先要完成程序外觀界面的設(shè)計(jì),其中包括創(chuàng)建窗體,在窗體中添加菜單、工具欄及多種GUI組件,設(shè)置各類組件的大小、位置、顏色等屬性。這個(gè)層次的工作可以認(rèn)為是對(duì)程序靜態(tài)特征的設(shè)置。其次要為各種組件對(duì)象提供響應(yīng)與處理不同事件的功能支持,從而使程序具備與用戶或外界事物交互的能力,使得程序“活”了起來(lái)。這個(gè)層次的工作可以認(rèn)為是對(duì)程序動(dòng)態(tài)特征的處理。</p><p><b> 概
6、要設(shè)計(jì) </b></p><p> 1.程序設(shè)計(jì)的基本思想</p><p> 單擊“開始”按鈕啟動(dòng)計(jì)時(shí)器,時(shí)間開始計(jì)時(shí)。單擊“暫?!卑粹o計(jì)時(shí)器停止計(jì)時(shí),單擊“繼續(xù)”按鈕繼續(xù)計(jì)時(shí)。單擊“重設(shè)”按鈕時(shí)間清零。</p><p><b> 圖表 1</b></p><p> 2. 應(yīng)為用SWING設(shè)計(jì)簡(jiǎn)單界
7、面用于設(shè)定定時(shí)時(shí)間、開始、結(jié)束和暫停功能。Swing 的三個(gè)基本構(gòu)造塊:標(biāo)簽、按鈕和文本字段;但是現(xiàn)在需要個(gè)地方安放它們,并希望用戶知道如何處理它們。所以JFrame 類就是解決這個(gè)問(wèn)題的——它是一個(gè)容器,允許 把其他組件添加到它里面,把它們組織起來(lái),并把它們呈現(xiàn)給用戶。</p><p> 在此實(shí)驗(yàn)中用到Jframe用到的主件有Button是按鈕,Label是標(biāo)簽,用setLayout來(lái)設(shè)置標(biāo)題,用setBou
8、nds()來(lái)設(shè)定按鈕的位置。</p><p><b> 圖表 2</b></p><p><b> 代碼段實(shí)現(xiàn):</b></p><p> start=new Button("開始");</p><p> stop=new Button("停止")
9、;</p><p> reset=new Button("重置");</p><p> jixu=new Button("繼續(xù)");</p><p> desplay=new Label();</p><p> this.setLayout(null);//默認(rèn)布局</p>
10、;<p> this.setTitle("計(jì)時(shí)器");//設(shè)置標(biāo)題</p><p> desplay.setBounds(0,30,200,50);</p><p> start.setBounds(0,80,50,50);</p><p> stop.setBounds(60,80,50,50);</p&
11、gt;<p> jixu.setBounds(120,80,50,50);</p><p> reset.setBounds(180,80,50,50);</p><p> refresh();//刷新</p><p> add(desplay);//條件主件按鈕</p><p> add(start);&l
12、t;/p><p> add(stop);</p><p> add(reset);</p><p> add(jixu);</p><p> setSize(300,200);//設(shè)置窗口的大小</p><p> setVisible(true); //窗口可見</p><p>
13、 3.實(shí)驗(yàn)中運(yùn)用到線程,有時(shí)被稱為輕量級(jí)進(jìn)程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。一個(gè)標(biāo)準(zhǔn)的線程由線程ID,當(dāng)前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源,但它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤消另一個(gè)線程,同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。
14、由于線程之間的相互制約,致使線程在運(yùn)行中呈現(xiàn)出間斷性。線程也有就緒、阻塞和運(yùn)行三種基本狀態(tài)。每一個(gè)程序都至少有一個(gè)線程,若程序只有一個(gè)線程,那就是程序本身。下面是狀態(tài)的關(guān)系:</p><p><b> 圖表 3</b></p><p><b> 4.事件的監(jiān)聽</b></p><p> 事件表達(dá)了系統(tǒng)、應(yīng)用程序及用戶
15、之間的動(dòng)作和響應(yīng)。利用事件機(jī)制實(shí)現(xiàn)用戶與程序之間的交互。java.awt.event包中定義了11個(gè)監(jiān)聽者接口,每個(gè)接口內(nèi)部包含了若干處理相關(guān)事件的抽象方法。一般說(shuō)來(lái),每個(gè)事件類都有一個(gè)監(jiān)聽者接口與之相對(duì)應(yīng),而事件類中的每個(gè)具體事件類型都有一個(gè)具體的抽象方法與之相對(duì)應(yīng),當(dāng)具體事件發(fā)生時(shí),這個(gè)事件將被封裝成一個(gè)事件類的對(duì)象作為實(shí)際參數(shù)傳遞給與之對(duì)應(yīng)的具體方法,由這個(gè)具體方法負(fù)責(zé)響應(yīng)并處理發(fā)生的事件。ActionEvent類事件對(duì)應(yīng)的接口是
16、ActionListener。處理ActionEvent事件的類都必須實(shí)現(xiàn)ActionListener接口,實(shí)現(xiàn)ActionListener接口就必須重載上述的actionPerformed()方法,在重載的方法體中,通常需要調(diào)用參數(shù)e的有關(guān)方法。</p><p><b> 代碼段:</b></p><p> public class d extends JFra
17、me implements Runnable,ActionListener{</p><p> start.addActionListener(this);</p><p> stop.addActionListener(this);</p><p> reset.addActionListener(this);</p><p>
18、; jixu.addActionListener(this);</p><p> this.addWindowListener(new WindowAdapter(){</p><p> public void windowClosing(WindowEvent e){</p><p> System.exit(0);}</p><
19、;p><b> });}</b></p><p> 事件產(chǎn)生和處理的流程如下:</p><p><b> 圖表 4</b></p><p><b> 詳細(xì)設(shè)計(jì) </b></p><p> public class d extends JFrame imple
20、ments Runnable,ActionListener{//實(shí)現(xiàn)Runnable,acitonListenr接口</p><p> private int minutes;</p><p> private static double seconds;</p><p> private Thread mb;</p><p> p
21、rivate boolean isRun;</p><p> private Button start,stop,reset,jixu;</p><p> private Label desplay; //成員變量的定義</p><p><b> d(){</b><
22、/p><p> start=new Button("開始");</p><p> stop=new Button("停止");</p><p> reset=new Button("重置"); </p><p> jixu=new Button("繼續(xù)"
23、;); </p><p> desplay=new Label(); //創(chuàng)建主件按鈕和標(biāo)簽</p><p> this.setLayout(null);</p><p> desplay.setBounds(0,30,200,50);</p><p
24、> start.setBounds(0,80,50,50);</p><p> stop.setBounds(60,80,50,50);</p><p> jixu.setBounds(120,80,50,50);</p><p> reset.setBounds(180,80,50,50);</p><p> re
25、fresh();</p><p> add(desplay);</p><p> add(start);</p><p> start.addActionListener(this);</p><p> stop.addActionListener(this);</p><p> reset.a
26、ddActionListener(this);</p><p> jixu.addActionListener(this); // 實(shí)現(xiàn)觸發(fā)事件的</p><p> add(stop);</p><p> add(reset);</p><p> add(jixu);</p><p>
27、 setSize(300,200);</p><p> setVisible(true); </p><p> this.addWindowListener(new WindowAdapter(){</p><p> public void windowClosing(WindowEvent e){</p><p> Sy
28、stem.exit(0);}</p><p><b> });</b></p><p><b> } </b></p><p> public static void main(String[] args) </p><p><b> { </b>
29、;</p><p> new d(); </p><p><b> } </b></p><p> public void run(){ </p><p> while(isRun){ </p><p><b> try{ </b><
30、/p><p> seconds+=0.001; </p><p> Thread.sleep(50); //睡眠50ms</p><p> if(seconds>59){ </p><p> seconds=0; </p><p> minutes=minutes+1; //改變
31、秒針</p><p> System.out.print(minutes); </p><p><b> } </b></p><p> refresh(); </p><p> }catch(Exception e){</p><p><b> } &l
32、t;/b></p><p><b> } </b></p><p><b> } </b></p><p> public void actionPerformed(ActionEvent e){ //事件的執(zhí)行</p><p> if(e.getActionC
33、ommand().equals("開始"))</p><p><b> { </b></p><p> startCount(); //調(diào)用此函數(shù)</p><p><b> } </b></p><p> else if(e.getAction
34、Command().equals("停止"))</p><p><b> { </b></p><p> stopCount(); //調(diào)用此函數(shù)</p><p><b> }</b></p><p> else if(e.getActionCommand
35、().equals("繼續(xù)"))</p><p><b> { </b></p><p> startCount(); / /調(diào)用此函數(shù) </p><p> } </p><p> else{ </p><p> rese
36、t(); //調(diào)用此函數(shù)</p><p><b> } </b></p><p><b> } </b></p><p> public void refresh(){ </p><p> desplay.setText(toString()); </p&g
37、t;<p><b> } </b></p><p> public void startCount(){ </p><p> if(!isRun){ </p><p> isRun=true; </p><p> mb=new Thread(this); <
38、;/p><p> mb.start(); //開始進(jìn)程</p><p><b> } </b></p><p><b> } </b></p><p> public void stopCount(){ </p><p> if(isRun
39、){ </p><p> isRun=false; </p><p><b> } </b></p><p><b> } </b></p><p> public void reset(){ </p><p> isRun=false; <
40、/p><p> minutes=0; </p><p> seconds=0; </p><p> refresh(); </p><p><b> } </b></p><p> public int getMinute(){ </p><p>
41、 return minutes; </p><p><b> } </b></p><p> public double getSecond()</p><p><b> { </b></p><p> return seconds; </p><p
42、><b> } </b></p><p> public int getTotalTime()</p><p><b> { </b></p><p> return minutes+(int)(seconds*100); </p><p><b> } <
43、;/b></p><p> public String toString(){ </p><p> return ""+minutes+":"+(int)seconds+":"+(int)((seconds-(int)seconds)*100); //顯示</p><p><b>
44、; }</b></p><p><b> }</b></p><p> 測(cè)試數(shù)據(jù)及其結(jié)果分析</p><p> 1.點(diǎn)擊開始按鈕開始計(jì)時(shí)</p><p> 圖表 5點(diǎn)擊開始按鈕</p><p> 2.點(diǎn)擊停止,暫停計(jì)時(shí)</p><p> 圖表 6點(diǎn)
45、擊停止按鈕</p><p> 3.點(diǎn)擊繼續(xù),繼續(xù)計(jì)時(shí)</p><p> 圖表 7點(diǎn)擊繼續(xù)按鈕</p><p><b> 4.點(diǎn)擊重置,清零</b></p><p> 圖表 8點(diǎn)擊重置按鈕</p><p><b> 五、課程設(shè)計(jì)總結(jié)</b></p>&l
46、t;p><b> 總結(jié)內(nèi)容包括:</b></p><p> 1)設(shè)計(jì)過(guò)程中的問(wèn)題</p><p> 關(guān)于計(jì)時(shí)器像秒表一樣增加,一開始是獲得的本機(jī)的時(shí)間來(lái)計(jì)時(shí)的,但是不符合條件。所以運(yùn)用本機(jī)時(shí)間來(lái)計(jì)算,所以時(shí)分秒之間的轉(zhuǎn)換倍數(shù)要十分的清昕。不懂監(jiān)聽事件時(shí)怎么點(diǎn)擊按鈕也不會(huì)運(yùn)行,每隔按鈕都要實(shí)現(xiàn)監(jiān)聽事件中的addActionListener事件。老師問(wèn)線程和進(jìn)
47、程的概念和區(qū)別沒(méi)回答出來(lái),現(xiàn)在回答一下:</p><p> 進(jìn)程是表示資源分配的基本單位,又是調(diào)度運(yùn)行的基本單位。進(jìn)程調(diào)度程序選中它,為它分配CPU以及其它有關(guān)資源,該進(jìn)程才真正運(yùn)行。所以,進(jìn)程是系統(tǒng)中的并發(fā)執(zhí)行的單位。線程是進(jìn)程中執(zhí)行運(yùn)算的最小單位,亦即執(zhí)行處理機(jī)調(diào)度的基本單位。如果把進(jìn)程理解為在邏輯上操作系統(tǒng)所完成的任務(wù),那么線程表示完成該任務(wù)的許多可能的子任務(wù)之一。線程可以在處理器上獨(dú)立調(diào)度執(zhí)行,這樣,在
48、多處理器環(huán)境下就允許幾個(gè)線程各自在單獨(dú)處理器上進(jìn)行。操作系統(tǒng)提供線程就是為了方便而有效地實(shí)現(xiàn)這種并發(fā)性 </p><p><b> 引入線程的好處 </b></p><p><b> (1)易于調(diào)度。 </b></p><p> (2)提高并發(fā)性。 </p><p><b> ?。?
49、)開銷少。 </b></p><p> ?。?)利于充分發(fā)揮多處理器的功能。 </p><p><b> 它們的主要區(qū)別是:</b></p><p> ?。?)一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程。 </p><p> ?。?)資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的所
50、有資源。 </p><p> ?。?)處理機(jī)分給線程,即真正在處理機(jī)上運(yùn)行的是線程。 </p><p> ?。?)線程在執(zhí)行過(guò)程中,需要協(xié)作同步。不同進(jìn)程的線程間要利用消息通信的辦法實(shí)現(xiàn)同步。</p><p> (2)課程設(shè)計(jì)過(guò)程的收獲和感受。</p><p> 課程設(shè)計(jì)經(jīng)過(guò)了兩個(gè)星期的不懈努力,終于交出了一份程序和文檔,在這里要深深的感
51、謝老師。雖然最后交上的程序不是很完美的,但是在這個(gè)過(guò)程中我通過(guò)用心的去學(xué)和去做,能夠把事件、事件源和事件監(jiān)聽器三者的關(guān)系形象的理解為某條娛樂(lè)新聞、明星與記者之間的關(guān)系,還明白了線程該如何創(chuàng)建、Java中一些常用類的使用方法等基礎(chǔ)內(nèi)容和一些難點(diǎn)。但是我最后答辯被老師批的很慘,我想說(shuō)的是java是我自己一個(gè)一個(gè)字母敲上去的。我覺得這次java課程設(shè)計(jì)學(xué)的東西還是蠻多的。再次謝謝老師的教訓(xùn),在此后我會(huì)銘記的。</p><p
52、> 題目2虛擬存儲(chǔ)中頁(yè)面調(diào)度算法LRU的模擬實(shí)現(xiàn)</p><p><b> 課題內(nèi)容和要求</b></p><p> 學(xué)習(xí)虛擬存儲(chǔ)機(jī)制中頁(yè)面調(diào)度算法,通過(guò)編程模擬實(shí)現(xiàn)頁(yè)面調(diào)度的LRU算法(最近最久未使用置換算法)。</p><p> 頁(yè)面置換算法是指在需要調(diào)入頁(yè)面且內(nèi)存已滿時(shí),確定將要換出頁(yè)面的算法。置換算法的好壞直接影響系統(tǒng)的性
53、能,不適當(dāng)?shù)盟惴赡軐?dǎo)致進(jìn)程發(fā)生“抖動(dòng)”,又稱“顛簸”。LRU算法就是過(guò)去一段時(shí)間內(nèi)不曾訪問(wèn)過(guò)的頁(yè)面,在最近的將來(lái)也不會(huì)再訪問(wèn)。該算法中必須記錄頁(yè)面使用時(shí)間的情況,所以算法賦予每個(gè)頁(yè)面一個(gè)訪問(wèn)的字段,用來(lái)記錄頁(yè)面自上次被訪問(wèn)以來(lái)經(jīng)歷的時(shí)間,實(shí)際使用中常采用移位寄存器或棧來(lái)幫助實(shí)現(xiàn)。如果采用移位寄存器,進(jìn)程訪問(wèn)頁(yè)面時(shí),該頁(yè)面上的移位寄存器左邊最高位置1,定期右移并在最高位補(bǔ)0,寄存器最小的頁(yè)面先淘汰。若采用棧來(lái)保存當(dāng)前使用的各個(gè)頁(yè)面的頁(yè)號(hào)
54、,則被訪問(wèn)的頁(yè)面從棧頂往下移動(dòng),棧底的頁(yè)面就是下一個(gè)將要淘汰的頁(yè)面。</p><p> LRU置換算法雖然是一種比較好的算法,但要求系統(tǒng)有較多的支持硬件。為了了解一個(gè)進(jìn)程在內(nèi)存中的各個(gè)頁(yè)面各有多少時(shí)間未被進(jìn)程訪問(wèn),以及如何快速地知道哪一頁(yè)是最近最久未使用的頁(yè)面,須有以下兩類硬件之一的支持:寄存器和棧。 </p><p><b> 二、概要設(shè)計(jì) </b></
55、p><p><b> 1、調(diào)頁(yè)策略 </b></p><p><b> 1)何時(shí)調(diào)入頁(yè)面 </b></p><p> 如果進(jìn)程的許多頁(yè)是存放在外存的一個(gè)連續(xù)區(qū)域中,則一次調(diào)入若干個(gè)相鄰的頁(yè),會(huì)比一次調(diào)入一頁(yè)的效率更高效一些。但如果調(diào)入的一批頁(yè)面中的大多數(shù)都未被訪問(wèn),則又是低效的??刹捎靡环N以預(yù)測(cè)為基礎(chǔ)的預(yù)調(diào)頁(yè)策略,將那些
56、預(yù)計(jì)在不久之后便會(huì)被訪問(wèn)的頁(yè)面,預(yù)先調(diào)入內(nèi)存。如果預(yù)測(cè)較準(zhǔn)確,那么,這種策略顯然是很有吸引力的。</p><p><b> 2)請(qǐng)求調(diào)頁(yè)策略 </b></p><p> 當(dāng)進(jìn)程在運(yùn)行中需要訪問(wèn)某部分程序和數(shù)據(jù)時(shí),若發(fā)現(xiàn)其所在的頁(yè)面不在內(nèi)存,便即提出請(qǐng)求,由OS將其所需頁(yè)面調(diào)入內(nèi)存。由請(qǐng)示調(diào)頁(yè)策略所確定調(diào)入的頁(yè),是一定會(huì)被訪問(wèn)的,再加之請(qǐng)求調(diào)頁(yè)策略比較易于實(shí)現(xiàn),故在
57、目前的虛擬存儲(chǔ)器中,大多采用此策略。</p><p> 2、從何處調(diào)入頁(yè)面 </p><p> 在請(qǐng)求分頁(yè)系統(tǒng)中的外存分為兩部分:用于存放文件的文件區(qū)和用于存放對(duì)換頁(yè)面的對(duì)換區(qū)。通常,由于對(duì)換區(qū)是采用連續(xù)分配方式,而事件是采用離散分配方式,故對(duì)換區(qū)的磁盤I/O速度比文件區(qū)的高。 </p><p><b> 3頁(yè)面調(diào)入過(guò)程 </b>
58、;</p><p> 每當(dāng)程序所要訪問(wèn)的頁(yè)面未在內(nèi)存時(shí), 便向CPU發(fā)出一缺頁(yè)中斷,中斷處理程序首先保留CPU環(huán)境,分析中斷原因后,轉(zhuǎn)入缺頁(yè)中斷處理程序。該程序通過(guò)查找頁(yè)表,得到該頁(yè)在外在原物理 塊后,如果此時(shí)內(nèi)存能容納新頁(yè),則啟動(dòng)磁盤I/O將所缺之頁(yè)調(diào)入內(nèi)存,然后修改頁(yè)表。如果內(nèi)存已滿,則須先按照某種置換算法從內(nèi)存中選出一頁(yè)準(zhǔn)備換出;如果該頁(yè)未被修改過(guò),可不必將該頁(yè)寫回磁盤;但如果此頁(yè)已被修改,則必須將它寫回
59、磁盤,然后再把所缺的頁(yè)調(diào)入內(nèi)存,并修改頁(yè)表中的相應(yīng)表項(xiàng),置其存在位“1”,并將此頁(yè)表項(xiàng)寫入快表中。在缺頁(yè)調(diào)入內(nèi)存后,利用修改后的頁(yè)表,去形成所要訪問(wèn)數(shù)據(jù)的物理地址,再去訪問(wèn)內(nèi)存數(shù)據(jù)。整個(gè)頁(yè)面的調(diào)入過(guò)程對(duì)用戶是透明的。 </p><p><b> 2流程圖</b></p><p> 1)LRU置換算法處理的流程圖</p><p><b&
60、gt; 圖表 9</b></p><p> 2)LRU置換內(nèi)部流程圖</p><p><b> 圖表 10</b></p><p> 3. 最近久未使用(LRU)置換算法的思路</p><p> 最近久未使用置換算法的替換規(guī)則,是根據(jù)頁(yè)面調(diào)入內(nèi)存后的使用情況來(lái)進(jìn)行決策的。該算法賦予每個(gè)頁(yè)面一個(gè)訪問(wèn)字
61、段,用來(lái)記錄一個(gè)頁(yè)面自上次被訪問(wèn)以來(lái)所經(jīng)歷的時(shí)間,當(dāng)需淘汰一個(gè)頁(yè)面的時(shí)候選擇現(xiàn)有頁(yè)面中其時(shí)間值最大的進(jìn)行淘汰。</p><p><b> 1)算法的事例:</b></p><p><b> 圖表 11</b></p><p><b> 2)代碼的實(shí)現(xiàn)是:</b></p><p
62、> if(memoryn==4)</p><p><b> {</b></p><p> for(i=3;i<pagen;i++)</p><p><b> {</b></p><p> if((pagememory[0]!=pagenumber[i])&&(p
63、agememory[1]!=pagenumber[i])</p><p> &&(pagememory[2]!=pagenumber[i]))</p><p><b> {</b></p><p> pagememory[3]=pagenumber[i];</p><p><b> no
64、w=i+1;</b></p><p><b> want=4;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> } </b></p><p>
65、; 通過(guò)memoryn數(shù)來(lái)對(duì)物理塊來(lái)賦值,用if語(yǔ)句來(lái)看數(shù)據(jù)是否重復(fù)。通過(guò)want來(lái)計(jì)算缺頁(yè)數(shù),now 來(lái)計(jì)算中斷。</p><p> for(j=now;j<pagen;j++)</p><p><b> {</b></p><p> if((pagenumber[j]!=pagememory[0])&&(pag
66、enumber[j]!=pagememory[1])</p><p> &&(pagenumber[j]!=pagememory[2])</p><p> &&(pagenumber[j]!=pagememory[3])</p><p> &&(pagenumber[j]!=pagememory[4]))<
67、/p><p><b> {</b></p><p> if(times[0]<=times[1])</p><p><b> {</b></p><p> max=times[1];</p><p><b> }</b></p>
68、<p><b> else </b></p><p><b> {</b></p><p> max=times[0];</p><p><b> }</b></p><p> if(max<=times[2])</p><p&g
69、t;<b> {</b></p><p> max=times[2];</p><p><b> }</b></p><p> if(max<=times[3])</p><p><b> {</b></p><p> max=time
70、s[3];</p><p><b> }</b></p><p> if(max<=times[4])</p><p><b> {</b></p><p> max=times[4];</p><p> } </p>&
71、lt;p> If語(yǔ)句中來(lái)判斷數(shù)是否是最近最近未置換time來(lái)計(jì)算數(shù)有多長(zhǎng)時(shí)間沒(méi)有使用,把最大的值置換掉。</p><p><b> 三、詳細(xì)設(shè)計(jì) </b></p><p> 實(shí)現(xiàn)課題主要功能的源程序:</p><p> #include <stdio.h> //頭文件</p><p
72、> #include <time.h> //</p><p> #include <stdlib.h> //產(chǎn)生隨機(jī)數(shù)所需要的頭文件</p><p><b> main()</b></p><p><b> {</b></p><p&
73、gt; int pagen;</p><p> int memoryn; //可用內(nèi)存塊數(shù)為memoryn,頁(yè)面長(zhǎng)度為pagen,</p><p> short times[5]={0,0,0,0,0}; //時(shí)間軸數(shù)組</p><p> short pagenumber[20]={0};
74、 //控制頁(yè)面走向數(shù)組</p><p> short pagememory[5]={0,0,0,0,0}; //物理塊數(shù)組</p><p> int i; //控制變量為i </p><p> int want=0; //want為缺頁(yè)數(shù)</p><p
75、> int now; //中斷數(shù) </p><p> printf("\n\n請(qǐng)輸入您要求的內(nèi)存塊數(shù)量(范圍為3至5):");</p><p> scanf("%d",&memoryn);</p><p> if(memoryn<3||memoryn&g
76、t;5)</p><p><b> {</b></p><p> printf("\n\n對(duì)不起,您的輸入有誤,請(qǐng)重新輸入:");</p><p> scanf("%d",&memoryn);</p><p><b> }</b></p&
77、gt;<p> printf("\n\n請(qǐng)輸入您要求的頁(yè)面長(zhǎng)度(范圍為10至20):");</p><p> scanf("%d",&pagen);</p><p> if(pagen<10||pagen>20)</p><p><b> {</b></p&
78、gt;<p> printf("\n\n對(duì)不起,您的輸入有誤,請(qǐng)重新輸入:");</p><p> scanf("%d",&pagen);</p><p><b> }</b></p><p> srand(time(NULL));</p><p>
79、 for(i=0;i<pagen;i++)</p><p><b> {</b></p><p> pagenumber[i]=rand()%9+1;</p><p> printf("%2d ",pagenumber[i]);</p><p><b> }</b>
80、</p><p> printf("\n"); </p><p> pagememory[0]=pagenumber[0];//對(duì)第一個(gè)物理塊進(jìn)行賦值</p><p> printf("第 %2d 步: ",i=1); </p><p> f
81、or(i=0;i<memoryn;i++)</p><p><b> {</b></p><p> printf(" %2d",pagememory[i]);</p><p><b> }</b></p><p> printf("\n");&
82、lt;/p><p> for(i=1;i<pagen;i++)</p><p><b> {</b></p><p> if(pagememory[0]!=pagenumber[i])</p><p><b> {</b></p><p> pagememory[
83、1]=pagenumber[i];</p><p><b> now=i+1;</b></p><p><b> break;</b></p><p><b> } </b></p><p> } //對(duì)第二個(gè)物理
84、塊進(jìn)行賦值</p><p> printf("第 %2d 步: ",now);</p><p> for(i=0;i<memoryn;i++)</p><p><b> {</b></p><p> printf(" %2d",pagememory[i]);<
85、;/p><p><b> }</b></p><p> printf("\n"); </p><p> for(i=2;i<pagen;i++)</p><p><b> {</b></p><p> if((pagememory[0]!=p
86、agenumber[i])&&(pagememory[1]!=pagenumber[i]))</p><p><b> {</b></p><p> pagememory[2]=pagenumber[i];</p><p><b> now=i+1;</b></p><p>&
87、lt;b> break;</b></p><p><b> }</b></p><p> } //對(duì)第三個(gè)物理塊進(jìn)行賦值</p><p> want=3; //此時(shí)可以將缺頁(yè)值暫定為3</p><p>
88、printf("第 %2d 步: ",now);</p><p> for(i=0;i<memoryn;i++)</p><p><b> {</b></p><p> printf(" %2d",pagememory[i]);</p><p><b>
89、 }</b></p><p> printf("\n");</p><p> if(memoryn==4)</p><p><b> {</b></p><p> for(i=3;i<pagen;i++)</p><p><b> {<
90、;/b></p><p> if((pagememory[0]!=pagenumber[i])&&(pagememory[1]!=pagenumber[i])</p><p> &&(pagememory[2]!=pagenumber[i]))</p><p><b> {</b></p>
91、<p> pagememory[3]=pagenumber[i];</p><p><b> now=i+1;</b></p><p><b> want=4;</b></p><p><b> break;</b></p><p><b>
92、}</b></p><p><b> } </b></p><p> printf("第 %2d 步: ",now);</p><p> for(i=0;i<memoryn;i++)</p><p><b> {</b></p><
93、p> printf(" %2d",pagememory[i]);</p><p><b> }</b></p><p> printf("\n");</p><p> } //如果為四個(gè)物理塊,則為第四個(gè)物理塊賦值</p>&l
94、t;p> if(memoryn==5)</p><p><b> {</b></p><p> for(i=3;i<pagen;i++)</p><p><b> {</b></p><p> if((pagememory[0]!=pagenumber[i])&&
95、;(pagememory[1]!=pagenumber[i])</p><p> &&(pagememory[2]!=pagenumber[i]))</p><p><b> {</b></p><p> pagememory[3]=pagenumber[i];</p><p><b>
96、 now=i+1;</b></p><p><b> want=4;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p&
97、gt; printf("第 %2d 步: ",now);</p><p> for(i=0;i<memoryn;i++)</p><p><b> {</b></p><p> printf(" %2d",pagememory[i]);</p><p><b
98、> }</b></p><p> printf("\n"); </p><p> for(i=4;i<pagen;i++)</p><p><b> {</b></p><p> if((pagememory[0]!=pagenumber[i])&&(
99、pagememory[1]!=pagenumber[i])</p><p> &&(pagememory[2]!=pagenumber[i])</p><p> &&(pagememory[3]!=pagenumber[i]))</p><p><b> {</b></p><p>
100、 pagememory[4]=pagenumber[i];</p><p><b> now=i+1;</b></p><p><b> want=5;</b></p><p><b> break;</b></p><p><b> }</b>
101、</p><p><b> } </b></p><p> //如果為五個(gè)物理塊,則為第四個(gè)物理塊賦值</p><p> printf("第 %2d 步: ",now);</p><p> for(i=0;i<memoryn;i++)</p><p>&
102、lt;b> {</b></p><p> printf(" %2d",pagememory[i]);</p><p><b> }</b></p><p> printf("\n"); </p><p><b> }</b><
103、;/p><p> int needchange; //頁(yè)面置換發(fā)生時(shí)要進(jìn)行置換的物理塊塊號(hào)</p><p> int mn=memoryn; //為時(shí)間軸賦初值所用到的物理塊數(shù)</p><p> int max; //最大的時(shí)間值</p><p> int j; //控制變量i.j</p>&
104、lt;p> for(i=0;i<memoryn;i++)</p><p><b> {</b></p><p><b> mn--;</b></p><p> times[i]=mn;</p><p> } //給時(shí)間軸數(shù)組設(shè)定初值</p>
105、;<p> for(j=now;j<pagen;j++)</p><p><b> {</b></p><p> if((pagenumber[j]!=pagememory[0])&&(pagenumber[j]!=pagememory[1])</p><p> &&(pagenumb
106、er[j]!=pagememory[2])</p><p> &&(pagenumber[j]!=pagememory[3])</p><p> &&(pagenumber[j]!=pagememory[4]))</p><p><b> {</b></p><p> if(tim
107、es[0]<=times[1])</p><p><b> {</b></p><p> max=times[1];</p><p><b> }</b></p><p><b> else </b></p><p><b>
108、{</b></p><p> max=times[0];</p><p><b> }</b></p><p> if(max<=times[2])</p><p><b> {</b></p><p> max=times[2];</p&g
109、t;<p><b> }</b></p><p> if(max<=times[3])</p><p><b> {</b></p><p> max=times[3];</p><p><b> }</b></p><p>
110、; if(max<=times[4])</p><p><b> {</b></p><p> max=times[4];</p><p> } //確定時(shí)間軸數(shù)組里儲(chǔ)存的最大時(shí)間</p><p> for(i=0;i<memoryn;i++)</p><p&g
111、t;<b> {</b></p><p> if(max==times[i])</p><p><b> {</b></p><p> needchange=i;</p><p><b> break;</b></p><p><b>
112、; }</b></p><p> } //提取出最大時(shí)間也就是先進(jìn)入的頁(yè)面所對(duì)應(yīng)的物理塊號(hào)</p><p> pagememory[needchange]=pagenumber[j];</p><p> for(i=0;i<memoryn;i++)</p><p><b> {</
113、b></p><p> if(i==needchange)</p><p><b> {</b></p><p> times[i]=0;</p><p><b> }</b></p><p><b> else</b></p>
114、;<p><b> {</b></p><p> times[i]++;</p><p><b> }</b></p><p> } //更新時(shí)間軸</p><p> want++; //缺頁(yè)數(shù)進(jìn)行自增運(yùn)算</p><p&g
115、t; printf("第 %2d 步: ",j+1);</p><p> for(i=0;i<memoryn;i++)</p><p><b> {</b></p><p> printf(" %2d",pagememory[i]);</p><p><b&
116、gt; }</b></p><p> printf("\n"); </p><p><b> } </b></p><p><b> else</b></p><p><b> {</b></p><p> f
117、or(i=0;i<memoryn;i++)</p><p><b> {</b></p><p> if(pagenumber[j]==pagememory[i])</p><p><b> {</b></p><p> times[i]=0;</p><p>
118、<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> times[i]++;</p><p><b> }</b></p><p><b>
119、}</b></p><p> } //出線相同頁(yè)面只把時(shí)間軸自增一,不做其他操作</p><p><b> } </b></p><p> printf("\n\n LRU頁(yè)面置換次數(shù)為: %d\n",want);</p><p><b>
120、 }</b></p><p> 測(cè)試數(shù)據(jù)及其結(jié)果分析</p><p> 1.當(dāng)內(nèi)存塊數(shù)量是3,頁(yè)面長(zhǎng)度是10</p><p><b> 圖表 12</b></p><p> 1.當(dāng)內(nèi)存塊數(shù)量是5,頁(yè)面長(zhǎng)度是15</p><p><b> 圖表 13</b>
121、;</p><p><b> 五、課程設(shè)計(jì)總結(jié)</b></p><p><b> 總結(jié)內(nèi)容包括:</b></p><p> ?。?)課程設(shè)計(jì)過(guò)程中的問(wèn)題</p><p> 因?yàn)轫?yè)面走向的數(shù)字不是遞增或遞減排序的,所以數(shù)據(jù)時(shí)混亂的。要對(duì)頁(yè)面走向的數(shù)據(jù)進(jìn)行比較,來(lái)判斷是否已經(jīng)使用過(guò)。要判斷,想要知
122、道這個(gè)數(shù)是否是最近最久未使用的數(shù),在程序中使用time數(shù)組來(lái)計(jì)算它有多長(zhǎng)時(shí)間沒(méi)有使用,把給max值來(lái)進(jìn)行比較。</p><p> (2)課程設(shè)計(jì)過(guò)程的收獲和感受。</p><p> 頁(yè)面置換算法的思想可以說(shuō)比較簡(jiǎn)單,易懂。但是在實(shí)現(xiàn)的時(shí)候,就沒(méi)那么容易了。 “實(shí)現(xiàn)算法”與“模擬算法”的區(qū)別,一開始我只是在“實(shí)現(xiàn)算法”,就是把數(shù)據(jù)給運(yùn)算出來(lái),顯示在界面上,但是后來(lái)發(fā)現(xiàn)這樣根本就不是“模擬
123、算法”,最重要的一個(gè)數(shù)據(jù)結(jié)構(gòu)——物理塊中保存的頁(yè),我卻沒(méi)有去定義它。于是我重新構(gòu)建數(shù)據(jù)結(jié)構(gòu),但是之前運(yùn)算的方法完全可以拿來(lái)使用,只是改改細(xì)節(jié)而已。進(jìn)程分得的內(nèi)存塊數(shù)多,則缺頁(yè)中斷率就低,反之,缺頁(yè)中斷率就高。頁(yè)面大小,如果劃分的頁(yè)面大,則缺頁(yè)中斷率就低,否則,缺頁(yè)中斷就高。頁(yè)面置換的算法的優(yōu)劣影響缺頁(yè)中斷次數(shù)。程序編制的方法不同,對(duì)缺頁(yè)中斷的次數(shù)有很大的影響,程序的局部性要好。我對(duì)頁(yè)面置換算法最近最久未置換算法方式有了進(jìn)一步的理解,同時(shí)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 頁(yè)面置換算法操作系統(tǒng)課程設(shè)計(jì)
- 頁(yè)面置換算法操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)常用頁(yè)面置換算法課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)-頁(yè)面置換算法c語(yǔ)言
- linux操作系統(tǒng)課程設(shè)計(jì)--頁(yè)面置換算法模擬
- 操作系統(tǒng)課程設(shè)計(jì)---頁(yè)面置換算法的模擬
- 操作系統(tǒng).課程設(shè)計(jì)--頁(yè)面置換算法模擬設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--頁(yè)面置換算法的模擬實(shí)現(xiàn)_
- 煙臺(tái)大學(xué)操作系統(tǒng)課程設(shè)計(jì)頁(yè)面置換算法
- 時(shí)鐘計(jì)時(shí)器課程設(shè)計(jì)
- 籃球計(jì)時(shí)器課程設(shè)計(jì)
- 匯編課程設(shè)計(jì)報(bào)告--- 計(jì)時(shí)器
- 課程設(shè)計(jì)---vhdl秒表計(jì)時(shí)器
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--頁(yè)面置換算法模擬程序設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--頁(yè)面置換算法模擬程序設(shè)計(jì)
- 匯編課程設(shè)計(jì)報(bào)告--計(jì)時(shí)器
- 微機(jī)原理課程設(shè)計(jì)-計(jì)時(shí)器
- 24秒計(jì)時(shí)器課程設(shè)計(jì)
- 多功能計(jì)時(shí)器課程設(shè)計(jì)
- 倒計(jì)時(shí)器課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論