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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  課程設(shè)計(jì)名稱:操作系統(tǒng)</p><p>  題目:頁式存儲管理中頁面置換(淘汰)的模擬程序</p><p><b>  目錄</b></p><p>  概述………………………………………………………………………………………………….3</p><p>  1.1目的…………………………………………

2、……………………………………………………3</p><p>  1.2主要完成的任務(wù)…………………………………………………………………………………3</p><p>  1.3使用的開發(fā)工具…………………………………………………………………………………3</p><p>  1.4解決的主要問題…………………………………………………………………………………4<

3、/p><p>  二、基本概念和原理……………………………………………………………………………………..4</p><p>  2.1概念………………………………………………………………………………………………4</p><p>  2.2原理………………………………………………………………………………………………4</p><p>  三、總體

4、設(shè)計(jì)……………………………………………………………………………………………..5</p><p>  四、詳細(xì)設(shè)計(jì)……………………………………………………………………………………………..6</p><p>  4.1 要利用的線程操作的函數(shù)………………………………………………………………………6</p><p>  4.2使用的函數(shù)變量及解釋……………………………

5、…………………………………………….7</p><p>  4.3 各個頁面置換算法………………………………………………………………………………8</p><p>  五、編碼設(shè)計(jì)……………………………………………………………………………………………..9</p><p>  5.1 開發(fā)環(huán)境的設(shè)置和建立…………………………………………………………………………9&l

6、t;/p><p>  5.2程序設(shè)計(jì)時(shí)需要注意的問題…………………………………………………………………….9</p><p>  5.3 主要程序的代碼設(shè)計(jì)及注釋…………………………………………………………………..10</p><p>  5.4 解決的技術(shù)難點(diǎn)、經(jīng)常犯的錯誤……………………………………………………………...22</p><p&g

7、t;  六、測試時(shí)出現(xiàn)的問題及解決方法……………………………………………………………………..22</p><p>  七、軟件使用說明………………………………………………………………………………………..22</p><p>  7.1 基本功能………………………………………………………………………………………...22</p><p>  7.2 需要運(yùn)行的環(huán)境

8、………………………………………………………………………………...23</p><p>  7.3 安裝……………………………………………………………………………………………...23</p><p>  7.4 運(yùn)行……………………………………………………………………………………………...23</p><p>  7.5 操作………………………………………………

9、……………………………………………...24</p><p>  八、總結(jié)…………………………………………………………………………………………………..25</p><p>  8.1完成的功能……………………………………………………………………………………….25</p><p>  8.2 自我評定……………………………………………………………………………………

10、…...25</p><p>  8.3 收獲、經(jīng)驗(yàn)、教訓(xùn)和感受………………………………………………………………………25</p><p>  九、參考文獻(xiàn)………………………………………………………………………………………………26</p><p>  頁式存儲管理中頁面置換(淘汰)的模擬程序</p><p><b>  一.概述&

11、lt;/b></p><p><b>  1.1目的</b></p><p> ?。?)通過模擬實(shí)現(xiàn)請求頁式存儲管理的幾種基本頁面置換算法,了解虛擬存儲技術(shù)的特點(diǎn)。</p><p> ?。?)通過創(chuàng)建線程以及初始化線程來掌握實(shí)現(xiàn)幾個線程同時(shí)進(jìn)行某種操作的方法。</p><p>  (3)重點(diǎn)掌握當(dāng)請求頁面不在內(nèi)存而

12、內(nèi)存塊已經(jīng)全部被占用時(shí)的替換算法,熟悉常見替換算法(如FIFO算法、LRU算法、LFU算法、OPT算法)的原理和實(shí)現(xiàn)過程。</p><p>  (4)掌握頁面置換時(shí)缺頁中斷與不缺頁中斷時(shí)每個頁面進(jìn)行存取時(shí)的時(shí)間的計(jì)算方法,包括一個頁面序列進(jìn)行存取的總時(shí)間與存取每個頁面的平均時(shí)間。</p><p> ?。?) 熟悉使用VC++ 6.0進(jìn)行有界面的編程的方法。</p><p

13、>  1.2.主要完成的任務(wù)</p><p>  通過使用程序設(shè)計(jì)語言設(shè)計(jì)一個程序,模擬頁式存儲管理中FIFO、LRU、LFU、OPT四頁面置換算法運(yùn)行的過程?;疽笕缦拢?lt;/p><p> ?。?)采用四個線程同時(shí)完成每個算法;</p><p>  (2)能夠設(shè)定駐留內(nèi)存頁面的個數(shù)、內(nèi)存的存取時(shí)間、缺頁中斷的時(shí)間、快表的時(shí)間,并提供省缺值;</p&g

14、t;<p> ?。?)能夠隨機(jī)輸入存取的邏輯頁面的頁號序列;</p><p>  (4)能夠隨機(jī)產(chǎn)生存取的邏輯頁面的頁號序列;</p><p>  (5)能夠設(shè)定頁號序列中頁面?zhèn)€數(shù)和范圍;</p><p>  (6)提供良好圖形界面,同時(shí)能夠展示四個算法運(yùn)行的結(jié)果。</p><p>  (7) 計(jì)算每種頁面置換算法每個頁面的存取

15、時(shí)間。 </p><p>  (8) 能夠?qū)⒚看蔚膶?shí)驗(yàn)輸入和實(shí)驗(yàn)結(jié)果存儲起來,下次運(yùn)行時(shí)或以后可查詢; </p><p>  (9) 完成多次不同設(shè)置的實(shí)驗(yàn),總結(jié)實(shí)驗(yàn)數(shù)據(jù),看看能得出什么結(jié)論。</p><p>  1.3 使用的開發(fā)工具</p><p> ?。?)使用系統(tǒng):Windows7</p><p> ?。?)使

16、用語言:C++</p><p>  (3)開發(fā)工具:Visual C++ 6.0</p><p>  1.4 解決的主要問題</p><p>  設(shè)計(jì)的結(jié)果程序能實(shí)現(xiàn)FIFO、OPT、LRU、LFU算法模擬頁式存儲管理缺頁中斷,主要能夠處理以下的問題:</p><p>  (1) 用戶能夠輸入給作業(yè)分配的內(nèi)存塊數(shù),頁面數(shù),以及進(jìn)行存取的頁面序

17、列;</p><p>  (2) 能夠隨機(jī)產(chǎn)生存取的內(nèi)存塊數(shù)、頁面數(shù)以及邏輯頁面的頁號序列;</p><p>  (3) 能夠設(shè)定頁號序列中頁面的個數(shù)和范圍。</p><p>  (4) 系統(tǒng)自動計(jì)算每個頁面的存取時(shí)間、所有頁面的總存取時(shí)間及每個頁面的平均存取時(shí)間。</p><p> ?。?)界面美觀大方,并且最終界面中能顯示出四種算法下的頁

18、面的中斷與否的存取過程。</p><p>  (6)能夠?qū)⒚看蔚膶?shí)驗(yàn)輸入和實(shí)驗(yàn)結(jié)果存儲起來,下次運(yùn)行時(shí)或以后可查詢。</p><p>  二 使用的基本概念和原理</p><p><b>  2.1概念</b></p><p>  多道程序:多道程序就是多道任務(wù),多道程序設(shè)計(jì)技術(shù)是在計(jì)算機(jī)內(nèi)存中同時(shí)存放幾道相互獨(dú)立的程序

19、,使它們在管理程序控制下,相互穿插運(yùn)行。</p><p>  線程:線程(thread)是"進(jìn)程"中某個單一順序的控制流。也被稱為輕量進(jìn)程(lightweight processes)。計(jì)算機(jī)科學(xué)術(shù)語,指運(yùn)行中的程序的調(diào)度單位</p><p>  同步:當(dāng)兩個設(shè)備一起工作并對時(shí)間有精確要求的時(shí)候,就需要在它們之間進(jìn)行同步。同步是基于在兩個設(shè)備之間規(guī)定一個共同的時(shí)間參考。

20、</p><p>  FIFO:即先進(jìn)先出頁面置換算法,該算法總是淘汰最先進(jìn)入內(nèi)存的頁面,即選擇在內(nèi)存中駐留時(shí)間最久的頁面予以淘汰。</p><p>  LRU:即最近最久未使用頁面置換算法,該算法選擇最近最久未使用的頁面予以淘汰。</p><p>  OPT:即最佳值換算法,其選擇淘汰的頁面是在最長時(shí)間內(nèi)不再被訪問的頁面。</p><p>

21、  LFU:即最近使用最少頁面置換算法,其淘汰的頁面是最近一段時(shí)間內(nèi)使用最少的頁面。</p><p>  缺頁中斷:存取頁面時(shí)頁面不在內(nèi)存中需從外存調(diào)入的現(xiàn)象。</p><p>  缺頁次數(shù):即在存取頁面過程中發(fā)生缺頁中斷的次數(shù)。</p><p>  每個頁面的存取時(shí)間:對每個頁面進(jìn)行存取時(shí)花費(fèi)的時(shí)間。</p><p>  總存取時(shí)間:即存取

22、所有頁面所消耗的總時(shí)間。</p><p>  存取平均時(shí)間:即存取一次頁面平均所用的時(shí)間。</p><p><b>  2.2原理</b></p><p>  分頁存儲管理將一個進(jìn)程的邏輯地址空間分成若干大小相等的片,稱為頁面或頁。</p><p>  在進(jìn)程運(yùn)行過程中,若其所要訪問的頁面不在內(nèi)存而需把它們調(diào)入內(nèi)存,但內(nèi)

23、存已無空閑空間時(shí),為了保證該進(jìn)程能正常運(yùn)行,系統(tǒng)必須從內(nèi)存中調(diào)出一頁程序或數(shù)據(jù),送磁盤的對換區(qū)中。但應(yīng)將哪 個頁面調(diào)出,須根據(jù)一定的算法來確定。通常,把選擇換出頁面的算法稱為頁面置換算法(Page_Replacement Algorithms)。 </p><p>  一個好的頁面置換算法,應(yīng)具有較低的頁面更換頻率。從理論上講,應(yīng)將那些以后不再會訪問的頁面換出,或?qū)⒛切┰谳^長時(shí)間內(nèi)不會再訪問的頁面調(diào)出。</

24、p><p>  1、最佳置換算法OPT(Optimal)</p><p>  它是由Belady于1966年提出的一種理論上的算法。其所選擇的被淘汰頁面,將是以后永不使用的或許是在最長(未來)時(shí)間內(nèi)不再被訪問的頁面。采用最佳置換算法,通??杀WC獲得最低的缺頁率。但由于人目前還無法預(yù)知一個進(jìn)程在內(nèi)存的若干個頁面中,哪一個頁面是未來最長時(shí)間內(nèi)不再被訪問的,因而該算法是無法實(shí)現(xiàn)的,便可以利用此算法來

25、評價(jià)其它算法。 </p><p>  2、先進(jìn)先出(FIFO)頁面置換算法 </p><p>  這是最早出現(xiàn)的置換算法。該算法總是淘汰最先進(jìn)入內(nèi)存的頁面,即選擇在內(nèi)存中駐留時(shí)間最久的頁面予以淘汰。該算法實(shí)現(xiàn)簡單只需把一個進(jìn)程已調(diào)入內(nèi)存的頁面,按先后次序鏈接成一個隊(duì)列,并設(shè)置一個指針,稱為替換指針,使它總是指向最老的頁面。</p><p>  3、最近最久未使用置換

26、算法 </p><p>  FIFO置換算法性能之所以較差,是因?yàn)樗罁?jù)的條件是各個頁面調(diào)入內(nèi)存的時(shí)間,而頁面調(diào)入的先后并不能反映頁面的使用情況。最近最久未使用(LRU)置換算法,是根據(jù)頁面調(diào)入內(nèi)存后的使用情況進(jìn)行決策的。由于無法預(yù)測各頁面將來的使用情況,只能利用“最近的過去”作為“最近的將來”的近似,因此,LRU置換算法是選擇最近最久未使用的頁面予以淘汰。該算法賦予每個頁面一個訪問字段,用來記錄一個頁面自上次

27、被訪問以來所經(jīng)歷的時(shí)間t,,當(dāng)須淘汰一個頁面時(shí),選擇現(xiàn)有頁面中其t值最大的,即最近最久未使用的頁面予以淘汰。 </p><p>  4、最近最少使用算法</p><p>  LFU(Least Frequently Used)算法根據(jù)數(shù)據(jù)的歷史訪問頻率來淘汰數(shù)據(jù),其核心思想是“數(shù)據(jù)過去被訪問多次,那么將來被訪問的頻率也更高”。</p><p>&

28、lt;b>  三.總體設(shè)計(jì)</b></p><p>  通過對所解決的問題的實(shí)質(zhì)的分析,即使用不同的算法對頁表進(jìn)行查詢,分查到和查不到兩種情況進(jìn)行處理,主要是采用面向?qū)ο蟮募夹g(shù)路線,把解決問題的方法進(jìn)行分步處理。</p><p>  在程序處理過程中,分別定義四個頁面置換算法,軟件整個程序的主要流程就是先輸入問題中需要用到的各種數(shù)據(jù),如頁面序列,實(shí)際頁數(shù),內(nèi)存中的頁數(shù)和內(nèi)

29、存中的存取時(shí)間,快表中的存取時(shí)間以及缺頁中斷的時(shí)間等等。</p><p>  本程序通過創(chuàng)立四個線程來實(shí)現(xiàn)四種頁面置換算法的同時(shí)進(jìn)行,界面上顯示每種頁面置換算法的結(jié)果以及每種算法中每個頁面進(jìn)行存取所需要的時(shí)間,還會顯示中斷次數(shù)、頁面序列存取所需要的總時(shí)間和每個頁面進(jìn)行存取的平均時(shí)間。</p><p>  然后我們可以選擇相應(yīng)的替換算法進(jìn)行分析替換,得到相應(yīng)的存取時(shí)間和缺頁情況。具體的總的流

30、程圖如下:</p><p><b>  圖1</b></p><p>  本程序?qū)崿F(xiàn)頁面置換模擬的過程中需要創(chuàng)建四個線程,分別如下:</p><p>  DWORD WINAPI threadFIFO(LPVOID lparam);先進(jìn)先出線程</p><p>  DWORD WINAPI threadLRU(LPVOI

31、D lparam);最近最久未使用線程</p><p>  DWORD WINAPI threadLFU(LPVOID lparam);最少使用次數(shù)線程</p><p>  DWORD WINAPI threadOPT(LPVOID lparam);最佳置換算法線程</p><p><b>  詳細(xì)設(shè)計(jì)</b></p><p

32、>  4.1要利用的線程操作的函數(shù)</p><p>  本程序中要創(chuàng)建四個線程,分別用到的函數(shù)為四個函數(shù)來創(chuàng)建線程,還有四個線程的初始化操作。聲明線程的函數(shù)具體如下所示:</p><p>  DWORD WINAPI threadFIFO(LPVOID lparam);先進(jìn)先出線程</p><p>  DWORD WINAPI threadLRU(LPVOID

33、 lparam);最近最久未使用線程</p><p>  DWORD WINAPI threadLFU(LPVOID lparam);最少使用次數(shù)線程</p><p>  DWORD WINAPI threadOPT(LPVOID lparam);最佳置換算法線程</p><p>  4.2使用的函數(shù)變量及解釋</p><p>  使用的參數(shù)

34、有m_listfifo、 m_listlru、m_listlfu、m_listopt、m_listfifotime、m_listlrutime、m_listlfutime、m_listopttime為八個成員變量。</p><p>  m_page是內(nèi)存塊數(shù),</p><p>  m_rampage為內(nèi)存頁數(shù),</p><p>  m_ramtime為內(nèi)存存取時(shí)間

35、,</p><p>  m_zhongduan為中斷時(shí)間,</p><p>  m_tbltime為快表存取時(shí)間,</p><p>  param、param2、param3、param4是四個結(jié)構(gòu)體,</p><p>  CListBox * g_list;是指針,它指向界面上演示的進(jìn)程數(shù)的四個listbox控件,</p>&

36、lt;p>  CListBox * g_listtime;是指針,指向界面上演示的每個頁面存取時(shí)間的四個listbox控件,</p><p>  CStatic * g_statictime;指向界面上輸出總時(shí)間的四個控件,</p><p>  CStatic * g_static;指向界面上輸出中斷次數(shù)的四個控件</p><p>  CStatic * g_

37、statictimep;指向界面上輸出每個頁面平均時(shí)間的四個控件,</p><p>  Threadfifo;先進(jìn)先出線程</p><p>  Threadlru;最近最久未使用進(jìn)程</p><p>  Threadlfu;使用次數(shù)最少進(jìn)程</p><p>  Threadopt;最佳使用算法進(jìn)程</p><p> 

38、 void CYankesheDlg::OnPaint()在界面上插入圖片用到的函數(shù)</p><p>  void CYankesheDlg::OnButton2() 隨機(jī)產(chǎn)生頁面數(shù)</p><p>  void CYankesheDlg::OnButton1() 隨機(jī)生成內(nèi)存塊數(shù)</p><p>  void CYankesheDlg::OnChangeEdit1

39、()得到界面上控件中的內(nèi)存塊數(shù)</p><p>  m_edit=(CEdit *)GetDlgItem(IDC_EDIT2); 得到界面上控件中的頁面數(shù)</p><p>  m_edit=(CEdit *)GetDlgItem(IDC_EDIT5); 得到界面上控件中的內(nèi)存存取時(shí)間</p><p>  m_edit=(CEdit *)GetDlgItem(IDC_

40、EDIT5); 得到界面上控件中的中斷時(shí)間</p><p>  m_edit=(CEdit *)GetDlgItem(IDC_EDIT5); 得到界面上控件中的快表存取時(shí)間</p><p>  m_listfifo->ResetContent();單擊執(zhí)行時(shí)讓前一次的結(jié)果清除</p><p>  param.ramtime=atoi(m_ramtime);類型

41、轉(zhuǎn)換,將字符型轉(zhuǎn)換成整型</p><p>  Threadlru=CreateThread(NULL,0,threadLRU,(LPVOID)&param2,0,&TreadeLRU);創(chuàng)建線程</p><p>  int k =rand()%8+1;隨機(jī)產(chǎn)生頁面序列,頁面號為1—9</p><p>  DWORD WINAPI threadFIFO

42、(LPVOID lparam),先進(jìn)先出頁面置換算法</p><p>  g_list->InsertString(0,inttoCString(memory));將駐留內(nèi)存的頁面輸出到界面上</p><p>  g_listtime->InsertString(0,inttoCString1(3*ramtime+zhongduan));將存取每個頁面的時(shí)間輸出到界面上的控件中

43、</p><p>  a=inttruptNum*(3*ramtime+zhongduan)+(page-inttruptNum)*(tbltime+ramtime);求總時(shí)間</p><p>  bb.Format("%s%d%s","平均時(shí)間",b,"ns");求平均時(shí)間</p><p>  st.Fo

44、rmat("%s%d%s","中斷",inttruptNum,"次");求中斷次數(shù)</p><p>  DWORD WINAPI threadLRU(LPVOID lparam)最近最久未使用算法</p><p>  DWORD WINAPI threadLFU(LPVOID lparam)使用次數(shù)最少算法</p>

45、<p>  DWORD WINAPI threadOPT(LPVOID lparam)最佳置換算法</p><p>  for(;topindex>0;topindex--),在文件中顯示各頁面號</p><p>  for(;topindex1>0;topindex1--),在文件中顯示各頁面時(shí)間</p><p>  CStatic * st

46、aticnum=(CStatic *)GetDlgItem(IDC_STATIC_FIFO);在文件中顯示發(fā)生中斷的次數(shù)</p><p>  CStatic * cishu=(CStatic *)GetDlgItem(IDC_STATIC_FIFOTIME);在文件中顯示發(fā)生總時(shí)間</p><p>  CStatic * cishu1=(CStatic *)GetDlgItem(IDC_S

47、TATIC_FIFO1);在文件中顯示平均時(shí)間</p><p>  void CYankesheDlg::OnButton7() ;清空文件</p><p>  ShellExecute(this->m_hWnd,"open",".\\詳細(xì)過程.txt",NULL,NULL,SW_SHOWMAXIMIZED);打開文件</p>&

48、lt;p>  GetExitCodeThread(Threadfifo,&j);</p><p>  ::TerminateThread(Threadfifo,j);</p><p>  CloseHandle(Threadfifo);使在界面上顯示的駐留進(jìn)程數(shù)停止. </p><p>  4.3各個頁面置換算法</p><p

49、>  先進(jìn)先出頁面置換算法的程序流程圖如下,其他頁面置換算法的設(shè)計(jì)理念都大同小異。</p><p>  圖2 先進(jìn)先出流程圖</p><p><b>  編碼設(shè)計(jì)</b></p><p>  5.1開發(fā)環(huán)境的設(shè)置和建立</p><p>  本程序所使用的開發(fā)環(huán)境為Visual C++ 6.0,在Windows7系統(tǒng)

50、中建立一個MFC AppWizard[exe]的工程,然后創(chuàng)建一個基本對話框,界面設(shè)計(jì)使用MFC。</p><p>  5.2程序設(shè)計(jì)時(shí)需要注意的問題</p><p>  程序設(shè)計(jì)時(shí)需要注意線程的創(chuàng)建和初始化,各種替換算法中變量的賦值以及替換的位置確認(rèn),還有就是利用文件保存實(shí)驗(yàn)顯示的結(jié)果,可以對多次的結(jié)果進(jìn)行對比。</p><p>  5.3主要程序的代碼設(shè)計(jì)及注

51、釋</p><p>  創(chuàng)建線程的函數(shù)后要初始化四個線程,具體函數(shù)類似,下面只列出初始化先進(jìn)先出線程的代碼,具體如下:</p><p><b>  初始化線程:</b></p><p>  void CYankesheDlg::OnButton4() </p><p><b>  {</b><

52、;/p><p>  m_listfifo->ResetContent();//單擊執(zhí)行時(shí)讓前一次的結(jié)果清除</p><p>  m_listlru->ResetContent();</p><p>  m_listlfu->ResetContent();</p><p>  m_listopt->ResetContent(

53、);</p><p>  m_listfifotime->ResetContent();</p><p>  m_listlrutime->ResetContent();</p><p>  m_listlfutime->ResetContent();</p><p>  m_listopttime->ResetCon

54、tent(</p><p>  param.g_list=m_listfifo;</p><p>  param.PAGE=atoi(m_page);</p><p>  param.RAMPAGE=atoi(m_rampage);</p><p>  param.g_listtime=m_listfifotime;//類型轉(zhuǎn)換</p&

55、gt;<p>  param.ramtime=atoi(m_ramtime);</p><p>  param.zhongduan=atoi(m_zhongduan);</p><p>  param.tbltime=atoi(m_tbltime);</p><p>  param.g_static=(CStatic *)GetDlgItem(IDC_

56、STATIC_FIFO);</p><p>  param.g_statictime=(CStatic *)GetDlgItem(IDC_STATIC_FIFOTIME);</p><p>  param.g_statictimep=(CStatic *)GetDlgItem(IDC_STATIC_FIFO1);</p><p>  memset(param.PAG

57、ELIST,0,sizeof(param.PAGELIST));</p><p>  for( int i =0;i<param.PAGE;i++)</p><p><b>  {</b></p><p>  switch (m_pagelist[i])</p><p>  {case '1':&

58、lt;/p><p>  param.PAGELIST[i]=1;</p><p><b>  break;</b></p><p><b>  case '2':</b></p><p>  param.PAGELIST[i]=2;</p><p><b&g

59、t;  break;</b></p><p><b>  case '3':</b></p><p>  param.PAGELIST[i]=3;</p><p><b>  break;</b></p><p><b>  case '4':&

60、lt;/b></p><p>  param.PAGELIST[i]=4;</p><p><b>  break;</b></p><p><b>  case '5':</b></p><p>  param.PAGELIST[i]=5;</p><p&

61、gt;<b>  break;</b></p><p><b>  case '6':</b></p><p>  param.PAGELIST[i]=6;</p><p><b>  break;</b></p><p><b>  case 

62、9;7':</b></p><p>  param.PAGELIST[i]=7;</p><p><b>  break;</b></p><p><b>  case '8':</b></p><p>  param.PAGELIST[i]=8;</p&g

63、t;<p><b>  break;</b></p><p><b>  case '9':</b></p><p>  param.PAGELIST[i]=9;</p><p><b>  break;</b></p><p><b>

64、  }</b></p><p><b>  }</b></p><p>  DWORD TreadeFIFO;</p><p>  Threadfifo=CreateThread(NULL,0,threadFIFO,(LPVOID)&param,0,&TreadeFIFO);</p><p>

65、  先進(jìn)先出頁面置換算法:</p><p>  DWORD WINAPI threadFIFO(LPVOID lparam) </p><p><b>  {</b></p><p>  int inttruptNum=0;</p><p><b>  int a=0;</b></p>

66、<p><b>  int b;</b></p><p>  para * buff= (para*)lparam;</p><p>  int rampage = buff->RAMPAGE;</p><p>  int ramtime=buff->ramtime;</p><p>  int

67、 zhongduan=buff->zhongduan;</p><p>  int tbltime=buff->tbltime;</p><p>  intpage = buff->PAGE;</p><p>  int * pagelist = buff->PAGELIST;</p><p>  CListBox

68、* g_listtime=buff->g_listtime;</p><p>  CStatic * g_static = buff->g_static;</p><p>  CStatic * g_statictime = buff->g_statictime;</p><p>  CStatic * g_statictimep = buff-&

69、gt;g_statictimep;</p><p>  CListBox * g_list = buff->g_list;</p><p>  int memory[10]={0,0,0,0,0,0,0,0,0,0};</p><p>  int ram_num=1;</p><p>  memory[0]=pagelist[0];&l

70、t;/p><p>  Sleep(SLEEP+zhongduan);</p><p>  g_list->InsertString(0,inttoCString(memory));</p><p>  g_listtime->InsertString(0,inttoCString1(3*ramtime+zhongduan));</p><

71、p>  //第一個頁面一定是產(chǎn)生缺頁中斷的</p><p>  inttruptNum++;</p><p>  int list_num=1;</p><p>  while(ram_num<rampage)//內(nèi)存頁面未滿</p><p><b>  {</b></p><p>

72、<b>  int n=0;</b></p><p>  for(int i=ram_num;i>=0;i--)//不缺頁中斷</p><p><b>  {</b></p><p>  if(pagelist[list_num]==memory[i])</p><p><b>  

73、{</b></p><p><b>  n=1;</b></p><p>  g_listtime->InsertString(0,inttoCString1(ramtime+tbltime));</p><p>  list_num++;</p><p><b>  break;</b

74、></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(n==0)//缺頁中斷</p><p><b>  {</b></p><p>  memory[ram_num]=pagelist[li

75、st_num];//將序列中的頁面存到內(nèi)存中</p><p>  g_list->InsertString(0,inttoCString(memory));</p><p>  g_listtime->InsertString(0,inttoCString1(3*ramtime+zhongduan));</p><p>  inttruptNum++;&

76、lt;/p><p>  Sleep(SLEEP+zhongduan);</p><p>  ram_num++;list_num++;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  int m =0;&

77、lt;/b></p><p>  while(list_num<page)//內(nèi)存頁面已滿</p><p><b>  {</b></p><p><b>  int n2=0;</b></p><p>  for(int i=rampage-1;i>=0;i--)//調(diào)入頁面在內(nèi)

78、存中,即不缺頁中斷</p><p><b>  {</b></p><p>  if(pagelist[list_num]==memory[i])</p><p><b>  {</b></p><p><b>  n2=1;</b></p><p>

79、  g_listtime->InsertString(0,inttoCString1(ramtime+tbltime));</p><p>  list_num++;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b> 

80、 }</b></p><p>  if(n2==0)//調(diào)入的頁面不在內(nèi)存中,即產(chǎn)生缺頁中斷</p><p><b>  {</b></p><p>  memory[(m)%(rampage)]=pagelist[list_num];</p><p>  list_num++; m++;<

81、;/p><p>  g_list->InsertString(0,inttoCString(memory));</p><p>  g_listtime->InsertString(0,inttoCString1(3*ramtime+zhongduan));</p><p>  inttruptNum++;</p><p>  Sle

82、ep(SLEEP+zhongduan);</p><p><b>  }</b></p><p><b>  }</b></p><p>  CString aa;</p><p>  a=inttruptNum*(3*ramtime+zhongduan)+(page-inttruptNum)*(t

83、bltime+ramtime);//求總時(shí)間</p><p>  aa.Format("%s%d%s","總時(shí)間",a,"ns");</p><p>  g_statictime->SetWindowText(aa);</p><p>  CString bb;</p><p>

84、;<b>  b=a/page;</b></p><p>  bb.Format("%s%d%s","平均時(shí)間",b,"ns");//求平均時(shí)間</p><p>  g_statictimep->SetWindowText(bb);</p><p>  CString st;&l

85、t;/p><p>  st.Format("%s%d%s","中斷",inttruptNum,"次");//求中斷次數(shù)</p><p>  g_static->SetWindowText(st);</p><p>  return 1;</p><p><b>  }&

86、lt;/b></p><p>  最近最久未使用算法:</p><p>  DWORD WINAPI threadLRU(LPVOID lparam)</p><p><b>  {</b></p><p>  int inttruptNum=0;</p><p><b>  i

87、nt a;</b></p><p><b>  int b;</b></p><p>  para * buff = (para*)lparam;</p><p>  int rampage = buff->RAMPAGE;</p><p>  int * pagelist = buff->PA

88、GELIST;</p><p>  int ramtime=buff->ramtime;</p><p>  intpage = buff->PAGE;</p><p>  int zhongduan=buff->zhongduan;</p><p>  int tbltime=buff->tbltime;</

89、p><p>  CListBox * g_list = buff->g_list;</p><p>  CListBox * g_listtime = buff->g_listtime;</p><p>  CStatic * g_static = buff->g_static;</p><p>  CStatic * g_st

90、atictime = buff->g_statictime;</p><p>  CStatic * g_statictimep = buff->g_statictimep;</p><p>  int memory[10]={0,0,0,0,0,0,0,0,0,0};</p><p>  int ram_num=1;</p><p&

91、gt;  memory[0]=pagelist[0];</p><p>  Sleep(SLEEP+zhongduan);</p><p>  g_list->InsertString(0,inttoCString(memory));</p><p>  g_listtime->InsertString(0,inttoCString1(3*ramtime

92、+zhongduan));</p><p>  inttruptNum++;//第一個頁面缺頁中斷</p><p>  int list_num=1;</p><p>  while(ram_num<rampage)//內(nèi)存塊沒有被填滿</p><p><b>  {</b></p><p&g

93、t;<b>  int n=0;</b></p><p>  for(int i=ram_num;i>=0;i--)//檢查內(nèi)存中的頁面有沒有和剛調(diào)入的頁面相等的</p><p><b>  {</b></p><p>  if(pagelist[list_num]==memory[i])</p>&l

94、t;p><b>  {</b></p><p>  n=1; //若有相等的,n為1</p><p>  g_listtime->InsertString(0,inttoCString1(ramtime+tbltime));</p><p>  list_num++;</p><p><b>  

95、break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(n==0)//不相等</p><p><b>  {</b></p><p>  memory[ram_num]=

96、pagelist[list_num];</p><p>  g_list->InsertString(0,inttoCString(memory));</p><p>  g_listtime->InsertString(0,inttoCString1(3*ramtime+zhongduan));</p><p>  inttruptNum++;//中斷

97、次數(shù)加1</p><p>  Sleep(SLEEP+zhongduan);</p><p>  ram_num++; list_num++;</p><p><b>  }</b></p><p><b>  }</b></p><p>  while(list_num

98、<page)</p><p><b>  {</b></p><p><b>  int n2=0;</b></p><p>  for(int i=rampage-1;i>=0;i--)</p><p><b>  {</b></p><p

99、>  if(pagelist[list_num]==memory[i])</p><p>  //調(diào)入的新頁面在內(nèi)存中有相等的,將內(nèi)存中的那個頁面放在最后位置,</p><p>  { //另外的內(nèi)存塊依次前移,此時(shí)為不缺頁中斷</p><p>  int t = memory[i];</p>

100、;<p>  for(int j = i+1 ;j<rampage;j++)</p><p><b>  {</b></p><p>  memory[j-1] =memory[j];</p><p><b>  }</b></p><p>  memory[rampage-1]

101、=t;</p><p><b>  n2=1;</b></p><p>  g_listtime->InsertString(0,inttoCString1(ramtime+tbltime));</p><p>  list_num++;</p><p><b>  break;</b><

102、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(n2==0)</b></p><p><b>  {</b></p><p>  for(int k = 0;k<

103、rampage-1;k++)//缺頁中斷</p><p><b>  {</b></p><p>  memory[k]=memory[k+1];//內(nèi)存中的頁面依次前移</p><p><b>  }</b></p><p>  memory[rampage-1]=pagelist[list_nu

104、m];//新頁面插入內(nèi)存中最后位置</p><p>  list_num++;</p><p>  g_list->InsertString(0,inttoCString(memory));</p><p>  g_listtime->InsertString(0,inttoCString1(3*ramtime+zhongduan));</p

105、><p>  inttruptNum++;</p><p>  Sleep(SLEEP+zhongduan);</p><p><b>  }</b></p><p><b>  }</b></p><p>  CString aa;</p><p>  

106、a=inttruptNum*(3*ramtime+zhongduan)+(page-inttruptNum)*(tbltime+ramtime);//求總時(shí)間</p><p>  aa.Format("%s%d%s","總時(shí)間",a,"ns");</p><p>  g_statictime->SetWindowText(a

107、a);</p><p>  CString bb;</p><p><b>  b=a/page;</b></p><p>  bb.Format("%s%d%s","平均時(shí)間",b,"ns");//求平均時(shí)間</p><p>  g_statictimep-&

108、gt;SetWindowText(bb);</p><p>  CString st;</p><p>  st.Format("%s%d%s","中斷",inttruptNum,"次");//求中斷次數(shù)</p><p>  g_static->SetWindowText(st);</p>

109、<p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  使用次數(shù)最少算法:</b></p><p>  DWORD WINAPI threadLFU(LPVOID lparam)</p><p><

110、b>  {</b></p><p>  int inttruptNum=0;</p><p><b>  int a;</b></p><p><b>  int b;</b></p><p>  para * buf = (para*)lparam;</p><

111、;p>  int rampage = buf->RAMPAGE;</p><p>  int ramtime=buf->ramtime;</p><p>  int zhongduan=buf->zhongduan;</p><p>  intpage = buf->PAGE;</p><p>  int t

112、bltime=buf->tbltime;</p><p>  int * pagelist = buf->PAGELIST;</p><p>  CListBox * g_list = buf->g_list;</p><p>  CListBox * g_listtime = buf->g_listtime;</p><

113、p>  CStatic * g_static = buf->g_static;</p><p>  CStatic * g_statictime = buf->g_statictime;</p><p>  CStatic * g_statictimep = buf->g_statictimep;</p><p>  int memory[1

114、0]={0,0,0,0,0,0,0,0,0,0};</p><p>  int ram_num=1;</p><p>  memory[0]=pagelist[0];</p><p>  Sleep(SLEEP+zhongduan);</p><p>  g_list->InsertString(0,inttoCString(memor

115、y));</p><p>  g_listtime->InsertString(0,inttoCString1(3*ramtime+zhongduan));</p><p>  inttruptNum++;</p><p>  int list_num=1;</p><p>  while(ram_num<rampage)//內(nèi)存

116、塊未滿</p><p><b>  {</b></p><p><b>  int n1=0;</b></p><p>  for(int i=ram_num;i>=0;i--)//與內(nèi)存塊中頁面依次比較</p><p><b>  {</b></p>&

117、lt;p>  if(pagelist[list_num]==memory[i])</p><p><b>  {</b></p><p><b>  n1=1;</b></p><p>  g_listtime->InsertString(0,inttoCString1(ramtime+tbltime));//

118、不缺頁中斷</p><p>  list_num++;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(n1==0)//缺頁中斷</p>

119、;<p><b>  {</b></p><p>  memory[ram_num]=pagelist[list_num];</p><p>  g_list->InsertString(0,inttoCString(memory));</p><p>  g_listtime->InsertString(0,intt

120、oCString1(3*ramtime+zhongduan));</p><p>  inttruptNum++;</p><p>  Sleep(SLEEP+zhongduan);</p><p>  ram_num++;</p><p>  list_num++;</p><p><b>  }</

121、b></p><p><b>  }</b></p><p>  while(list_num<page)//內(nèi)存塊已滿,需要置換出頁面</p><p><b>  {</b></p><p>  int index[10]={0,0,0,0,0,0,0,0,0,0};</p>

122、;<p>  memset(index,1,rampage);</p><p><b>  int n2=0;</b></p><p>  for(int i=rampage-1;i>=0;i--)</p><p><b>  {</b></p><p>  if(pageli

123、st[list_num]==memory[i])//不缺頁中斷</p><p><b>  {</b></p><p>  index[i]++;</p><p><b>  n2=1;</b></p><p>  g_listtime->InsertString(0,inttoCString

124、1(ramtime+tbltime));</p><p>  list_num++;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(n2==0)

125、//缺頁中斷,找出使用次數(shù)最少的頁面置換出內(nèi)存</p><p><b>  {</b></p><p>  int miniindex;</p><p>  int tempindex=255;</p><p>  for(int k =0;k<rampage;k++)</p><p>&

126、lt;b>  {</b></p><p>  if(index[k]<tempindex)</p><p><b>  {</b></p><p>  miniindex=k;</p><p>  tempindex=index[k];</p><p><b>

127、  }</b></p><p><b>  }</b></p><p>  memory[miniindex]=pagelist[list_num];//置換掉使用次數(shù)最少的頁面</p><p>  list_num++;</p><p>  g_list->InsertString(0,intt

128、oCString(memory));</p><p>  g_listtime->InsertString(0,inttoCString1(3*ramtime+zhongduan));</p><p>  inttruptNum++;</p><p>  Sleep(SLEEP+zhongduan);</p><p><b>

129、  }</b></p><p><b>  }</b></p><p>  CString aa;</p><p>  a=inttruptNum*(3*ramtime+zhongduan)+(page-inttruptNum)*(tbltime+ramtime);//求總時(shí)間</p><p>  aa.Fo

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論