版權(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)¶m2,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)¶m,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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--頁面置換算法模擬程序設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--頁面置換算法模擬程序設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---請求頁式存儲管理的頁面置換算法
- 頁面置換算法模擬程序課程設(shè)計(jì)
- 模擬頁式存儲管理-操作系統(tǒng)課程設(shè)計(jì)
- 模擬頁式存儲管理 操作系統(tǒng)課程設(shè)計(jì)
- 頁面置換算法模擬程序課程設(shè)計(jì)報(bào)告
- 模擬頁式存儲管理-操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--模擬請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計(jì)---頁面置換算法的模擬
- 操作系統(tǒng)課程設(shè)計(jì)--請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計(jì)--請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計(jì)--請求頁式存儲管理
- linux操作系統(tǒng)課程設(shè)計(jì)--頁面置換算法模擬
- 操作系統(tǒng)課程設(shè)計(jì)--頁面置換算法的模擬實(shí)現(xiàn)_
- 操作系統(tǒng).課程設(shè)計(jì)--頁面置換算法模擬設(shè)計(jì)
- 頁面置換算法操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告---信號燈模擬程序
- 頁面置換算法操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)常用頁面置換算法課程設(shè)計(jì)
評論
0/150
提交評論