版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 課程設(shè)計名稱:操作系統(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è)計……………………………………………………………………………………………..5</p><p> 四、詳細設(shè)計……………………………………………………………………………………………..6</p><p> 4.1 要利用的線程操作的函數(shù)………………………………………………………………………6</p><p> 4.2使用的函數(shù)變量及解釋……………………………
5、…………………………………………….7</p><p> 4.3 各個頁面置換算法………………………………………………………………………………8</p><p> 五、編碼設(shè)計……………………………………………………………………………………………..9</p><p> 5.1 開發(fā)環(huán)境的設(shè)置和建立…………………………………………………………………………9&l
6、t;/p><p> 5.2程序設(shè)計時需要注意的問題…………………………………………………………………….9</p><p> 5.3 主要程序的代碼設(shè)計及注釋…………………………………………………………………..10</p><p> 5.4 解決的技術(shù)難點、經(jīng)常犯的錯誤……………………………………………………………...22</p><p&g
7、t; 六、測試時出現(xiàn)的問題及解決方法……………………………………………………………………..22</p><p> 七、軟件使用說明………………………………………………………………………………………..22</p><p> 7.1 基本功能………………………………………………………………………………………...22</p><p> 7.2 需要運行的環(huán)境
8、………………………………………………………………………………...23</p><p> 7.3 安裝……………………………………………………………………………………………...23</p><p> 7.4 運行……………………………………………………………………………………………...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)驗、教訓(xùn)和感受………………………………………………………………………25</p><p> 九、參考文獻………………………………………………………………………………………………26</p><p> 頁式存儲管理中頁面置換(淘汰)的模擬程序</p><p><b> 一.概述&
11、lt;/b></p><p><b> 1.1目的</b></p><p> ?。?)通過模擬實現(xiàn)請求頁式存儲管理的幾種基本頁面置換算法,了解虛擬存儲技術(shù)的特點。</p><p> ?。?)通過創(chuàng)建線程以及初始化線程來掌握實現(xiàn)幾個線程同時進行某種操作的方法。</p><p> (3)重點掌握當(dāng)請求頁面不在內(nèi)存而
12、內(nèi)存塊已經(jīng)全部被占用時的替換算法,熟悉常見替換算法(如FIFO算法、LRU算法、LFU算法、OPT算法)的原理和實現(xiàn)過程。</p><p> ?。?)掌握頁面置換時缺頁中斷與不缺頁中斷時每個頁面進行存取時的時間的計算方法,包括一個頁面序列進行存取的總時間與存取每個頁面的平均時間。</p><p> ?。?) 熟悉使用VC++ 6.0進行有界面的編程的方法。</p><p
13、> 1.2.主要完成的任務(wù)</p><p> 通過使用程序設(shè)計語言設(shè)計一個程序,模擬頁式存儲管理中FIFO、LRU、LFU、OPT四頁面置換算法運行的過程?;疽笕缦拢?lt;/p><p> ?。?)采用四個線程同時完成每個算法;</p><p> ?。?)能夠設(shè)定駐留內(nèi)存頁面的個數(shù)、內(nèi)存的存取時間、缺頁中斷的時間、快表的時間,并提供省缺值;</p&g
14、t;<p> (3)能夠隨機輸入存取的邏輯頁面的頁號序列;</p><p> ?。?)能夠隨機產(chǎn)生存取的邏輯頁面的頁號序列;</p><p> (5)能夠設(shè)定頁號序列中頁面?zhèn)€數(shù)和范圍;</p><p> ?。?)提供良好圖形界面,同時能夠展示四個算法運行的結(jié)果。</p><p> (7) 計算每種頁面置換算法每個頁面的存取
15、時間。 </p><p> (8) 能夠?qū)⒚看蔚膶嶒炤斎牒蛯嶒灲Y(jié)果存儲起來,下次運行時或以后可查詢; </p><p> (9) 完成多次不同設(shè)置的實驗,總結(jié)實驗數(shù)據(jù),看看能得出什么結(jié)論。</p><p> 1.3 使用的開發(fā)工具</p><p> ?。?)使用系統(tǒng):Windows7</p><p> ?。?)使
16、用語言:C++</p><p> ?。?)開發(fā)工具:Visual C++ 6.0</p><p> 1.4 解決的主要問題</p><p> 設(shè)計的結(jié)果程序能實現(xiàn)FIFO、OPT、LRU、LFU算法模擬頁式存儲管理缺頁中斷,主要能夠處理以下的問題:</p><p> (1) 用戶能夠輸入給作業(yè)分配的內(nèi)存塊數(shù),頁面數(shù),以及進行存取的頁面序
17、列;</p><p> (2) 能夠隨機產(chǎn)生存取的內(nèi)存塊數(shù)、頁面數(shù)以及邏輯頁面的頁號序列;</p><p> (3) 能夠設(shè)定頁號序列中頁面的個數(shù)和范圍。</p><p> (4) 系統(tǒng)自動計算每個頁面的存取時間、所有頁面的總存取時間及每個頁面的平均存取時間。</p><p> ?。?)界面美觀大方,并且最終界面中能顯示出四種算法下的頁
18、面的中斷與否的存取過程。</p><p> ?。?)能夠?qū)⒚看蔚膶嶒炤斎牒蛯嶒灲Y(jié)果存儲起來,下次運行時或以后可查詢。</p><p> 二 使用的基本概念和原理</p><p><b> 2.1概念</b></p><p> 多道程序:多道程序就是多道任務(wù),多道程序設(shè)計技術(shù)是在計算機內(nèi)存中同時存放幾道相互獨立的程序
19、,使它們在管理程序控制下,相互穿插運行。</p><p> 線程:線程(thread)是"進程"中某個單一順序的控制流。也被稱為輕量進程(lightweight processes)。計算機科學(xué)術(shù)語,指運行中的程序的調(diào)度單位</p><p> 同步:當(dāng)兩個設(shè)備一起工作并對時間有精確要求的時候,就需要在它們之間進行同步。同步是基于在兩個設(shè)備之間規(guī)定一個共同的時間參考。
20、</p><p> FIFO:即先進先出頁面置換算法,該算法總是淘汰最先進入內(nèi)存的頁面,即選擇在內(nèi)存中駐留時間最久的頁面予以淘汰。</p><p> LRU:即最近最久未使用頁面置換算法,該算法選擇最近最久未使用的頁面予以淘汰。</p><p> OPT:即最佳值換算法,其選擇淘汰的頁面是在最長時間內(nèi)不再被訪問的頁面。</p><p>
21、 LFU:即最近使用最少頁面置換算法,其淘汰的頁面是最近一段時間內(nèi)使用最少的頁面。</p><p> 缺頁中斷:存取頁面時頁面不在內(nèi)存中需從外存調(diào)入的現(xiàn)象。</p><p> 缺頁次數(shù):即在存取頁面過程中發(fā)生缺頁中斷的次數(shù)。</p><p> 每個頁面的存取時間:對每個頁面進行存取時花費的時間。</p><p> 總存取時間:即存取
22、所有頁面所消耗的總時間。</p><p> 存取平均時間:即存取一次頁面平均所用的時間。</p><p><b> 2.2原理</b></p><p> 分頁存儲管理將一個進程的邏輯地址空間分成若干大小相等的片,稱為頁面或頁。</p><p> 在進程運行過程中,若其所要訪問的頁面不在內(nèi)存而需把它們調(diào)入內(nèi)存,但內(nèi)
23、存已無空閑空間時,為了保證該進程能正常運行,系統(tǒng)必須從內(nèi)存中調(diào)出一頁程序或數(shù)據(jù),送磁盤的對換區(qū)中。但應(yīng)將哪 個頁面調(diào)出,須根據(jù)一定的算法來確定。通常,把選擇換出頁面的算法稱為頁面置換算法(Page_Replacement Algorithms)。 </p><p> 一個好的頁面置換算法,應(yīng)具有較低的頁面更換頻率。從理論上講,應(yīng)將那些以后不再會訪問的頁面換出,或?qū)⒛切┰谳^長時間內(nèi)不會再訪問的頁面調(diào)出。</
24、p><p> 1、最佳置換算法OPT(Optimal)</p><p> 它是由Belady于1966年提出的一種理論上的算法。其所選擇的被淘汰頁面,將是以后永不使用的或許是在最長(未來)時間內(nèi)不再被訪問的頁面。采用最佳置換算法,通??杀WC獲得最低的缺頁率。但由于人目前還無法預(yù)知一個進程在內(nèi)存的若干個頁面中,哪一個頁面是未來最長時間內(nèi)不再被訪問的,因而該算法是無法實現(xiàn)的,便可以利用此算法來
25、評價其它算法。 </p><p> 2、先進先出(FIFO)頁面置換算法 </p><p> 這是最早出現(xiàn)的置換算法。該算法總是淘汰最先進入內(nèi)存的頁面,即選擇在內(nèi)存中駐留時間最久的頁面予以淘汰。該算法實現(xiàn)簡單只需把一個進程已調(diào)入內(nèi)存的頁面,按先后次序鏈接成一個隊列,并設(shè)置一個指針,稱為替換指針,使它總是指向最老的頁面。</p><p> 3、最近最久未使用置換
26、算法 </p><p> FIFO置換算法性能之所以較差,是因為它所依據(jù)的條件是各個頁面調(diào)入內(nèi)存的時間,而頁面調(diào)入的先后并不能反映頁面的使用情況。最近最久未使用(LRU)置換算法,是根據(jù)頁面調(diào)入內(nèi)存后的使用情況進行決策的。由于無法預(yù)測各頁面將來的使用情況,只能利用“最近的過去”作為“最近的將來”的近似,因此,LRU置換算法是選擇最近最久未使用的頁面予以淘汰。該算法賦予每個頁面一個訪問字段,用來記錄一個頁面自上次
27、被訪問以來所經(jīng)歷的時間t,,當(dāng)須淘汰一個頁面時,選擇現(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è)計</b></p><p> 通過對所解決的問題的實質(zhì)的分析,即使用不同的算法對頁表進行查詢,分查到和查不到兩種情況進行處理,主要是采用面向?qū)ο蟮募夹g(shù)路線,把解決問題的方法進行分步處理。</p><p> 在程序處理過程中,分別定義四個頁面置換算法,軟件整個程序的主要流程就是先輸入問題中需要用到的各種數(shù)據(jù),如頁面序列,實際頁數(shù),內(nèi)存中的頁數(shù)和內(nèi)
29、存中的存取時間,快表中的存取時間以及缺頁中斷的時間等等。</p><p> 本程序通過創(chuàng)立四個線程來實現(xiàn)四種頁面置換算法的同時進行,界面上顯示每種頁面置換算法的結(jié)果以及每種算法中每個頁面進行存取所需要的時間,還會顯示中斷次數(shù)、頁面序列存取所需要的總時間和每個頁面進行存取的平均時間。</p><p> 然后我們可以選擇相應(yīng)的替換算法進行分析替換,得到相應(yīng)的存取時間和缺頁情況。具體的總的流
30、程圖如下:</p><p><b> 圖1</b></p><p> 本程序?qū)崿F(xiàn)頁面置換模擬的過程中需要創(chuàng)建四個線程,分別如下:</p><p> DWORD WINAPI threadFIFO(LPVOID lparam);先進先出線程</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> 詳細設(shè)計</b></p><p
32、> 4.1要利用的線程操作的函數(shù)</p><p> 本程序中要創(chuàng)建四個線程,分別用到的函數(shù)為四個函數(shù)來創(chuàng)建線程,還有四個線程的初始化操作。聲明線程的函數(shù)具體如下所示:</p><p> DWORD WINAPI threadFIFO(LPVOID lparam);先進先出線程</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)存存取時間
35、,</p><p> m_zhongduan為中斷時間,</p><p> m_tbltime為快表存取時間,</p><p> param、param2、param3、param4是四個結(jié)構(gòu)體,</p><p> CListBox * g_list;是指針,它指向界面上演示的進程數(shù)的四個listbox控件,</p>&
36、lt;p> CListBox * g_listtime;是指針,指向界面上演示的每個頁面存取時間的四個listbox控件,</p><p> CStatic * g_statictime;指向界面上輸出總時間的四個控件,</p><p> CStatic * g_static;指向界面上輸出中斷次數(shù)的四個控件</p><p> CStatic * g_
37、statictimep;指向界面上輸出每個頁面平均時間的四個控件,</p><p> Threadfifo;先進先出線程</p><p> Threadlru;最近最久未使用進程</p><p> Threadlfu;使用次數(shù)最少進程</p><p> Threadopt;最佳使用算法進程</p><p>
38、 void CYankesheDlg::OnPaint()在界面上插入圖片用到的函數(shù)</p><p> void CYankesheDlg::OnButton2() 隨機產(chǎn)生頁面數(shù)</p><p> void CYankesheDlg::OnButton1() 隨機生成內(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)存存取時間</p><p> m_edit=(CEdit *)GetDlgItem(IDC_
40、EDIT5); 得到界面上控件中的中斷時間</p><p> m_edit=(CEdit *)GetDlgItem(IDC_EDIT5); 得到界面上控件中的快表存取時間</p><p> m_listfifo->ResetContent();單擊執(zhí)行時讓前一次的結(jié)果清除</p><p> param.ramtime=atoi(m_ramtime);類型
41、轉(zhuǎn)換,將字符型轉(zhuǎn)換成整型</p><p> Threadlru=CreateThread(NULL,0,threadLRU,(LPVOID)¶m2,0,&TreadeLRU);創(chuàng)建線程</p><p> int k =rand()%8+1;隨機產(chǎn)生頁面序列,頁面號為1—9</p><p> DWORD WINAPI threadFIFO
42、(LPVOID lparam),先進先出頁面置換算法</p><p> g_list->InsertString(0,inttoCString(memory));將駐留內(nèi)存的頁面輸出到界面上</p><p> g_listtime->InsertString(0,inttoCString1(3*ramtime+zhongduan));將存取每個頁面的時間輸出到界面上的控件中
43、</p><p> a=inttruptNum*(3*ramtime+zhongduan)+(page-inttruptNum)*(tbltime+ramtime);求總時間</p><p> bb.Format("%s%d%s","平均時間",b,"ns");求平均時間</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--),在文件中顯示各頁面時間</p><p> CStatic * st
46、aticnum=(CStatic *)GetDlgItem(IDC_STATIC_FIFO);在文件中顯示發(fā)生中斷的次數(shù)</p><p> CStatic * cishu=(CStatic *)GetDlgItem(IDC_STATIC_FIFOTIME);在文件中顯示發(fā)生總時間</p><p> CStatic * cishu1=(CStatic *)GetDlgItem(IDC_S
47、TATIC_FIFO1);在文件中顯示平均時間</p><p> void CYankesheDlg::OnButton7() ;清空文件</p><p> ShellExecute(this->m_hWnd,"open",".\\詳細過程.txt",NULL,NULL,SW_SHOWMAXIMIZED);打開文件</p>&
48、lt;p> GetExitCodeThread(Threadfifo,&j);</p><p> ::TerminateThread(Threadfifo,j);</p><p> CloseHandle(Threadfifo);使在界面上顯示的駐留進程數(shù)停止. </p><p> 4.3各個頁面置換算法</p><p
49、> 先進先出頁面置換算法的程序流程圖如下,其他頁面置換算法的設(shè)計理念都大同小異。</p><p> 圖2 先進先出流程圖</p><p><b> 編碼設(shè)計</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è)計使用MFC。</p><p> 5.2程序設(shè)計時需要注意的問題</p><p> 程序設(shè)計時需要注意線程的創(chuàng)建和初始化,各種替換算法中變量的賦值以及替換的位置確認,還有就是利用文件保存實驗顯示的結(jié)果,可以對多次的結(jié)果進行對比。</p><p> 5.3主要程序的代碼設(shè)計及注
51、釋</p><p> 創(chuàng)建線程的函數(shù)后要初始化四個線程,具體函數(shù)類似,下面只列出初始化先進先出線程的代碼,具體如下:</p><p><b> 初始化線程:</b></p><p> void CYankesheDlg::OnButton4() </p><p><b> {</b><
52、;/p><p> m_listfifo->ResetContent();//單擊執(zhí)行時讓前一次的結(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)¶m,0,&TreadeFIFO);</p><p>
65、 先進先出頁面置換算法:</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);//求總時間</p><p> aa.Format("%s%d%s","總時間",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","平均時間",b,"ns");//求平均時間</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)存塊依次前移,此時為不缺頁中斷</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);//求總時間</p><p> aa.Format("%s%d%s","總時間",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","平均時間",b,"ns");//求平均時間</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);//求總時間</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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計報告--頁面置換算法模擬程序設(shè)計
- 操作系統(tǒng)課程設(shè)計報告--頁面置換算法模擬程序設(shè)計
- 操作系統(tǒng)課程設(shè)計---請求頁式存儲管理的頁面置換算法
- 頁面置換算法模擬程序課程設(shè)計
- 模擬頁式存儲管理-操作系統(tǒng)課程設(shè)計
- 模擬頁式存儲管理 操作系統(tǒng)課程設(shè)計
- 頁面置換算法模擬程序課程設(shè)計報告
- 模擬頁式存儲管理-操作系統(tǒng)課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計--模擬請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計---頁面置換算法的模擬
- 操作系統(tǒng)課程設(shè)計--請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計--請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計--請求頁式存儲管理
- linux操作系統(tǒng)課程設(shè)計--頁面置換算法模擬
- 操作系統(tǒng)課程設(shè)計--頁面置換算法的模擬實現(xiàn)_
- 操作系統(tǒng).課程設(shè)計--頁面置換算法模擬設(shè)計
- 頁面置換算法操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計報告---信號燈模擬程序
- 頁面置換算法操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)常用頁面置換算法課程設(shè)計
評論
0/150
提交評論