操作系統(tǒng)課程設計模擬頁式存儲_第1頁
操作系統(tǒng)課程設計模擬頁式存儲_第2頁
操作系統(tǒng)課程設計模擬頁式存儲_第3頁
操作系統(tǒng)課程設計模擬頁式存儲_第4頁
操作系統(tǒng)課程設計模擬頁式存儲_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 燕山大學課程設計說明書 課程設計名稱:操作系統(tǒng) 題目:模擬頁式存儲 班級:2010級應用3班 開發(fā)小組名稱:方小雨 課題負責人:方小雨 課題組成員:姓名 :方小雨 學號: 班級:2010級應用3班 自評成績:B 課題開發(fā)日期:目錄1. 概述1.1 目的·····························

2、;·········································31.2 主要完成的任務·······

3、;··················································

4、;···31.3 使用的開發(fā)工具·············································

5、;···············31.4 解決的束腰問題·································

6、;···························32 使用的基本概念和原理····················

7、3;···························33 總體設計3.1 基本技術路線的確定···················&#

8、183;····································43.2 軟件的總體結構、模塊關系、總體流程的確定·········&

9、#183;························43.3 創(chuàng)立的進程或線程的確定······················

10、83;·····························44 詳細設計4.1 利用線程操作的函數·················&

11、#183;······································44.2 模塊內部的流程和實現(xiàn)算法········&#

12、183;·········································54.3 設計的過程、構件、類、對象、函數及參數的確定和解釋···&#

13、183;····················65 編碼設計5.1 開發(fā)環(huán)境的設置和建立··························

14、;····························65.2 程序設計時要注意的事項···················&

15、#183;································75.3 關鍵構建/插件的特點和使用··············&

16、#183;··································75.4 主要程序的代碼設計及注釋············&#

17、183;·····································75.5 技術難點、經常犯的錯誤·········

18、3;·········································196 測試時經常出現(xiàn)的問題及其解決方法·····&#

19、183;·························197 軟件使用說明7.1 基本功能·····················&#

20、183;···········································197.2 需要運行的環(huán)境····&

21、#183;·················································&

22、#183;····197.3 操作············································

23、;·························198 總結························

24、;·············································209 參考文獻···

25、83;·················································

26、83;·········20 模擬頁式存儲1.概述1.1 目的通過使用程序設計語言設計一個程序,模擬頁式存儲管理中的FIFO、LRU、LFU、OPT四個頁面置換算法運行的過程,加深對頁面置換算法的理解。1.2主要完成的任務 通過使用程序設計語言設計一個程序,模擬頁式存儲管理中FIFO、LRU、LFU、OPT四頁面置換算法運行的過程?;疽笕缦拢海?)采用四個線程同時完成每個算法;(2)能夠設定駐留內存頁面的個數、內存的存取時間、缺頁中斷的時間、快表的時間,并提供省缺值;(3)能夠隨機輸入存取的邏輯頁面的

27、頁號序列;(4)能夠隨機產生存取的邏輯頁面的頁號序列;(5)能夠設定頁號序列中頁面?zhèn)€數和范圍;(6)提供良好圖形界面,同時能夠展示四個算法運行的結果。(7) 計算每種頁面置換算法每個頁面的存取時間。 (8) 能夠將每次的實驗輸入和實驗結果存儲起來,下次運行時或以后可查詢; (9) 完成多次不同設置的實驗,總結實驗數據,看看能得出什么結論。1.3使用的開發(fā)工具 使用的軟件為VC+6.0。1.4解決的主要問題用程序實現(xiàn)FIFO、LRU、LFU、OPT四個算法,模擬頁式存儲,并提供較好的設計界面。2 使用的基本概念和原理該程序主要用到線程,線程的基本概念為:線程是進程中的實體,一個進程可以擁有多個線

28、程,一個線程必須有一個父進程。線程基本不擁有系統(tǒng)資源,只有運行必須的一些數據結構;它與父進程的其它線程共享該進程所擁有的全部資源。同一個進程的線程可以并發(fā)執(zhí)行。原理:線程可以創(chuàng)建和撤消線程,從而實現(xiàn)序的并發(fā)執(zhí)行。一般,線程具有就緒、阻塞和運行三種基本狀態(tài)。在多中央處理器的系統(tǒng)里,不同線程可以同時在不同的中央處理器上運行,甚至當它們屬于同一個進程時也是如此。大多數支持多處理器的操作系統(tǒng)都提供編程接口來讓進程可以控制自己的線程與各處理器之間的關聯(lián)度。有時候,線程也稱作輕量級進程。就象進程一樣,線程在程序中是獨立的、并發(fā)的執(zhí)行路徑,每個線程有它自己的堆棧、自己的程序計數器和自己的局部變量。但是,與分

29、隔的進程相比,進程中的線程之間的隔離程度要小。它們共享內存、文件句柄和其它每個進程應有的狀態(tài)。3 總體設計3.1 基本技術路線的確定 采用C+面向對象設計。3.2 軟件的總體結構、模塊關系、總體流程的確定軟件總共分為5塊,第一塊為過程演示,第二塊為參數設置,第三塊為開始、停止功能,第四塊為實驗結果,第五塊為保存、清空、打開功能。第二個模塊的參數的設置以后,通過第三個模塊的開始功能執(zhí)行,然后在第一個模塊進行過程演示和在第四個模塊輸出實驗結果,第五個模塊把實驗結果存儲起來??傮w流程圖如下: 開始 參數設置 過程演示 實驗結果顯示 清空保存 N Y 結束 圖一3.3 創(chuàng)立的線程的確定 該程序要創(chuàng)立四

30、個線程:threadFIFO、threadLRU、threadLFU、threadOPT,來同時完成每個算法,同時將執(zhí)行過程顯示出來。4 詳細設計4.1 利用線程操作的函數CreateThread(NULL,0,threadFIFO,(LPVOID)&param1,0,&TreadeFIFO);(創(chuàng)建FIFO線程)CreateThread(NULL,0,threadLRU,(LPVOID)&param1,0,&TreadeLRU);(創(chuàng)建LRU線程)CreateThread(NULL,0,threadLFU,(LPVOID)&param1,0,&

31、TreadeLFU);(創(chuàng)建LFU線程)CreateThread(NULL,0,threadOPT,(LPVOID)&param1,0,&TreadeOPT);(創(chuàng)建OPT線程)DWORD WINAPI threadFIFO(LPVOID lparam);(FIFO線程的定義)DWORD WINAPI threadLRU(LPVOID lparam);(LRU線程的定義)DWORD WINAPI threadLFU(LPVOID lparam);(LFU線程的定義)DWORD WINAPI threadOPT(LPVOID lparam);(OPT線程的定義)4.2 模塊內部的

32、流程和實現(xiàn)算法參數設定模塊:該模塊主要分為內存數、頁面數、頁號范圍、頁面序列、內存存取時間、缺頁中斷時間、快表時間的設定。其代碼形式如下:CEdit * m_edit;m_edit=(CEdit *)GetDlgItem(IDC_EDIT1);m_edit->GetWindowText(m_RAMPAGE);這幾個編輯框要建立相應的類向導,然后在隨機生成的按鈕下添加隨機生成數函數。其代碼形式如下:m_PAGELIST.Empty();int i ;i=atoi(m_PAGE);if(i<10|i>20)MessageBox("進程頁面數必須是10-20!"

33、);return;for(int j =0;j<i;j+) int a=atoi(m_PAGE1);int b=atoi(m_PAGE2); int k=rand()%(b-a+1)+a;char buffer1;itoa(k,buffer,10);CString buffer2;buffer2=buffer;m_PAGELIST+=buffer2;CEdit * m_edit=(CEdit *)GetDlgItem(IDC_EDIT5);m_edit->SetWindowText(m_PAGELIST);各個參數設定好之后要開始執(zhí)行,在開始執(zhí)行按鈕下添加四個創(chuàng)建線程函數,將執(zhí)行過

34、程(駐留內存進程號)及每個頁面的存取時間顯示到ListBox中,其代碼形式如下:g_list->InsertString(0,inttoCString(RAM)+" "+"時間:"+str3)將頁面置換次數顯示到Static中。另外還要在程序中加入四個頁面置換算法函數。其代碼形式如下CString str;str.Format("%s%d%s","中斷",num,"次");g_static->SetWindowText(str); 在保存、清空、打開功能是在相應的按鈕下添加函數。4.

35、3 設計的過程、構件、類、對象、函數及參數的確定和解釋界面的設計:首先需要設定內存數、頁面數、頁面序列、內存存取時間、缺頁中斷時間、快表時間,這些都用編輯控件,并建立類向導,執(zhí)行過程的演示要用ListBox控件,置換次數要用Static控件。在程序開始進行四個線程函數的聲明,然后創(chuàng)建一個結構體,然后再聲明四個結構體的對象。缺省值的設定:CEdit * edit1=(CEdit * )GetDlgItem(IDC_EDIT1);edit1->SetWindowText("3");CEdit * edit2=(CEdit * )GetDlgItem(IDC_EDIT2);

36、edit2->SetWindowText("10");CEdit * edit3=(CEdit * )GetDlgItem(IDC_EDIT3);edit3->SetWindowText("1"); CEdit * edit4=(CEdit * )GetDlgItem(IDC_EDIT4);edit4->SetWindowText("9");CEdit * edit5=(CEdit * )GetDlgItem(IDC_EDIT5);edit5->SetWindowText("2126314268&qu

37、ot;);CEdit * edit6=(CEdit * )GetDlgItem(IDC_EDIT6);edit6->SetWindowText("10"); CEdit * edit7=(CEdit * )GetDlgItem(IDC_EDIT7);edit7->SetWindowText("1000");CEdit * edit8=(CEdit * )GetDlgItem(IDC_EDIT8);edit8->SetWindowText("2");5 編碼設計5.1 開發(fā)環(huán)境的設置和建立開發(fā)環(huán)境為MFC AppWiz

38、ardexe,應用程序類型為基本對話框。5.2 程序設計時要注意的事項(1)、控件的名稱或ID要與程序中對應;(2)、控件傳值有時要用指針,也有的要通過成員函數傳值;(3)、數組的大小要足夠大,防止訪問沖突;5.3 關鍵構件/插件的特點和使用Listbox控件:列表框中的項目是通過程序插入到其中的,用戶無法向清單中輸入數據,當選擇其中的項目,并在用戶單擊一個按鈕或者執(zhí)行某個操作時,由應用程序完成對指定項目的具體操作。 CStatic控件:用于顯示文本,但不能夠接受用戶輸入,VC+中廣泛用于標識信息、顯示位圖、圖標等。CEdit控件:提供了窗口編輯的基本功能,用戶能在該控件中錄入文本。它提供給用

39、戶編輯或修改單行或多行文本,也可以根據需要,將編輯框中的文本設置為只讀,使用戶不可修改。CButton控件:經常使用按鈕控件進行命令操作。5.4 主要程序的代碼設計及注釋創(chuàng)建一個線程:param1.g_list=m_listfifo;param1.PAGE=atoi(m_PAGE);param1.RAMPAGE=atoi(m_RAMPAGE);param1.g_static=(CStatic *)GetDlgItem(IDC_STATIC_FIFO);memset(param1.PAGELIST,0,sizeof(param1.PAGELIST);param1.NTIME=atoi(m_NTI

40、ME); param1.QTIME=atoi(m_QTIME);for( int i =0;i<param1.PAGE;i+)switch (m_PAGELISTi)case '1':param1.PAGELISTi=1;break;case '2':param1.PAGELISTi=2;break;case '3':param1.PAGELISTi=3;break;case '4':param1.PAGELISTi=4;break;case '5':param1.PAGELISTi=5;break;case

41、 '6':param1.PAGELISTi=6;break;case '7':param1.PAGELISTi=7;break;case '8':param1.PAGELISTi=8;break;case '9':param1.PAGELISTi=9;break;DWORD TreadeFIFO;HANDLE Threadfifo=CreateThread(NULL,0,threadFIFO,(LPVOID)&param1,0,&TreadeFIFO);其他三個線程的創(chuàng)建與此類似。FIFO算法:DWORD WINA

42、PI threadFIFO(LPVOID lparam)int num=0;para * buffer = (para*)lparam;int rampage = buffer->RAMPAGE;intpage = buffer->PAGE;int * pagelist = buffer->PAGELIST;CListBox * g_list = buffer->g_list;CStatic * g_static = buffer->g_static; int ntime=buffer->NTIME;int qtime=buffer->QTIME;in

43、t time=3*ntime+qtime;CString str3;str3.Format("%d",time);int RAM10;memset(RAM,0,sizeof(RAM);int ram_num=1;RAM0=pagelist0;Sleep(SLEEP);g_list->InsertString(0,inttoCString(RAM)+" "+"時間:"+str3 );num+;int list_num=1;while(ram_num<rampage)int norn=0;for(int i=ram_num;i

44、>=0;i-)if(pagelistlist_num=RAMi)norn=1;list_num+;break;if(norn=0)RAMram_num=pagelistlist_num;g_list->InsertString(0,inttoCString(RAM)+" "+"時間:"+str3);num+;Sleep(SLEEP);ram_num+;list_num+;int index =0;while(list_num<page)int norn2=0;for(int i=rampage-1;i>=0;i-)if(pagel

45、istlist_num=RAMi)norn2=1;list_num+;break;if(norn2=0)RAM(index)%(rampage)=pagelistlist_num;list_num+;index+;g_list->InsertString(0,inttoCString(RAM)+" "+"時間:"+str3);num+;Sleep(SLEEP);CString str;str.Format("%s%d%s","中斷",num,"次");g_static->SetWin

46、dowText(str);return 1;LRU算法:DWORD WINAPI threadLRU(LPVOID lparam)int num=0;para * buffer = (para*)lparam;int rampage = buffer->RAMPAGE;intpage = buffer->PAGE;int * pagelist = buffer->PAGELIST;CListBox * g_list = buffer->g_list;CStatic * g_static = buffer->g_static; int ntime=buffer-&g

47、t;NTIME;int qtime=buffer->QTIME;int time=3*ntime+qtime;CString str3;str3.Format("%d",time);int RAM10;memset(RAM,0,sizeof(RAM);int ram_num=1;RAM0=pagelist0;Sleep(SLEEP);g_list->InsertString(0,inttoCString(RAM)+" "+"時間:"+str3);num+;int list_num=1;while(ram_num<ra

48、mpage)int norn=0;for(int i=ram_num;i>=0;i-)if(pagelistlist_num=RAMi)norn=1;list_num+;break;if(norn=0)RAMram_num=pagelistlist_num;g_list->InsertString(0,inttoCString(RAM)+" "+"時間:"+str3);num+;Sleep(SLEEP);ram_num+;list_num+;while(list_num<page)int norn2=0;for(int i=rampag

49、e-1;i>=0;i-)if(pagelistlist_num=RAMi)int temp = RAMi;for(int j = i+1 ;j<rampage;j+)RAMj-1 =RAMj;RAMrampage-1=temp;norn2=1;list_num+;break;if(norn2=0)for(int k = 0;k<rampage-1;k+)RAMk=RAMk+1;RAMrampage-1=pagelistlist_num;list_num+;g_list->InsertString(0,inttoCString(RAM)+" "+&qu

50、ot;時間:"+str3);num+;Sleep(SLEEP);CString str;str.Format("%s%d%s","中斷",num,"次");g_static->SetWindowText(str);return 1;LFU算法:DWORD WINAPI threadLFU(LPVOID lparam)int num=0;para * buffer = (para*)lparam;int rampage = buffer->RAMPAGE;intpage = buffer->PAGE;int

51、* pagelist = buffer->PAGELIST;CListBox * g_list = buffer->g_list;CStatic * g_static = buffer->g_static; int ntime=buffer->NTIME;int qtime=buffer->QTIME;int time=3*ntime+qtime;CString str3;str3.Format("%d",time);int RAM10;memset(RAM,0,sizeof(RAM);int ram_num=1;RAM0=pagelist0;

52、Sleep(SLEEP);g_list->InsertString(0,inttoCString(RAM)+" "+"時間:"+str3);num+;int list_num=1;while(ram_num<rampage)int norn=0;for(int i=ram_num;i>=0;i-)if(pagelistlist_num=RAMi)norn=1;list_num+;break;if(norn=0)RAMram_num=pagelistlist_num;g_list->InsertString(0,inttoCStri

53、ng(RAM)+" "+"時間:"+str3);num+;Sleep(SLEEP);ram_num+;list_num+;while(list_num<page)int index10;memset(index,0,sizeof(index);memset(index,1,rampage);int norn2=0;for(int i=rampage-1;i>=0;i-)if(pagelistlist_num=RAMi)indexi+;norn2=1;list_num+;break;if(norn2=0)int miniindex;int te

54、mpindex=255;for(int k =0;k<rampage;k+)if(indexk<tempindex)miniindex=k;tempindex=indexk;RAMminiindex=pagelistlist_num;list_num+;g_list->InsertString(0,inttoCString(RAM)+" "+"時間:"+str3);num+;Sleep(SLEEP);CString str;str.Format("%s%d%s","中斷",num,"次&

55、quot;);g_static->SetWindowText(str);return 1;OPT算法:DWORD WINAPI threadOPT(LPVOID lparam)int num=0;para * buffer = (para*)lparam;int rampage = buffer->RAMPAGE;intpage = buffer->PAGE;int * pagelist = buffer->PAGELIST;CListBox * g_list = buffer->g_list;CStatic * g_static = buffer->g_static; int ntime=buffer->NTIME;int qtime=buffer->QTIME;int time=3*ntime+qtime;CString str3;str3.Format("%d",time);int RAM10;memset(RAM,0,sizeof(RAM);int ram_num=1;RAM0=pagelist0;Sleep(SLEEP

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論