2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論