頁面置換算法的實(shí)現(xiàn)_第1頁
頁面置換算法的實(shí)現(xiàn)_第2頁
頁面置換算法的實(shí)現(xiàn)_第3頁
頁面置換算法的實(shí)現(xiàn)_第4頁
頁面置換算法的實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

OS實(shí)驗(yàn)五(軟件0967020050)2010.11.27OS實(shí)驗(yàn)五(軟件)今日DATE\@"M/d/yyyy"1/18/2011頁面置換算法的實(shí)現(xiàn)實(shí)驗(yàn)要求請用LRU和FIFO模擬教材P150頁面序列,并打印出置換頁面。作業(yè)序列能夠動(dòng)態(tài)輸入內(nèi)存物理塊數(shù)可以動(dòng)態(tài)的修改,且初始狀態(tài)均為空總結(jié)收獲體會(huì)及對該題解的改進(jìn)意見和見解 (一)分析題意得模型(一)分析題意得模型利用數(shù)組相關(guān)知識LRU:(最近最久未使用置換算法)數(shù)組A[]數(shù)組A[],記錄頁面順序70120304230321201701內(nèi)存塊7772

2

4440

1

1

1

000

0

0033

3

0

0

11

3

3222

2

2

7

缺頁否√√√√

√√√√

M=3時(shí):123423453數(shù)組C[],記錄頁面最近出現(xiàn)的位置數(shù)組C[],記錄頁面最近出現(xiàn)的位置701201201數(shù)組數(shù)組B[],記錄內(nèi)存塊的頁面每次找C[]值最小的頁面置換FIFO(先進(jìn)先出頁面置換算法)與LRU相似,不過,不必設(shè)數(shù)組C來記錄經(jīng)歷的時(shí)間,只需循環(huán)地置換第1個(gè)到第m個(gè)頁面(二)寫主要算法(二)寫主要算法思路(三)調(diào)試運(yùn)行(多種情況都要運(yùn)行)(三)調(diào)試運(yùn)行(多種情況都要運(yùn)行)詳見源程序及注釋分類(四(四)體會(huì)及不足1.先找到問題思路,然后運(yùn)用所學(xué)知識,用數(shù)組實(shí)現(xiàn)就1.先找到問題思路,然后運(yùn)用所學(xué)知識,用數(shù)組實(shí)現(xiàn)就較為簡單,問題不大。2.但同時(shí)也要注意如何使運(yùn)行結(jié)果的界面更為美觀。我也不知為什么,老是前兩個(gè)”是否缺頁”的Y與后面的Y對不齊(四)體會(huì)及不足LUR源代碼:#include<stdio.h>voidmain(){ intm,i=0,j=0,j0,min,n=0,s,page,k=0,A[100],B[100],C[100],count=0; printf("請輸入頁框(物理塊)數(shù):"); scanf("%d",&m); printf("請輸入頁面順序(以-999結(jié)束):\n"); scanf("%d",&page); while(page!=-999) { A[i]=page; i++;n++; scanf("%d",&page); } printf("\n最近最久未被使用(LRU)頁面置換算法\n"); printf("\t頁面順序\t內(nèi)存塊\t\t是否缺頁(Y/N)\n"); i=0; while(i<n) { printf("\t%d\t\t",A[i]); /*一.若內(nèi)存塊B[]未滿,直接將頁面A[]裝入,C[]為所對應(yīng)B[]的出現(xiàn)位置*/ if(i<m) { B[j]=A[i];i++; C[j]=i; j++; for(j0=0;j0<j;j0++) printf("%3d",B[j0]); printf("\t\tY\n"); count++; } /*二.若內(nèi)存塊B已滿,分兩種情況*/ else { for(j=0;j<m;j++) { if(A[i]!=B[j])k++; else break; } //1.原內(nèi)存塊B無此頁面,找C值最小(即最近最久未使用),換出頁面A// if(k==m) { min=C[0]; s=0; for(j0=0;j0<m;j0++) { if(C[j0]<min) { min=C[j0]; s=j0; } } B[s]=A[i];i++; C[s]=i; j++; for(j0=0;j0<m;j0++) printf("%3d",B[j0]); printf("\t\tY\n"); count++; } //2.原內(nèi)存塊B有此頁面,改變B所對應(yīng)的C所出現(xiàn)的位置,再讀下一頁面// else { i++;C[k]=i; printf("\n"); } k=0; } } printf("\n缺頁中斷數(shù)為%d總頁數(shù)為%d缺頁率為%.2f\n\n",count,i,(float)count/i);}FIFO源代碼:#include<stdio.h>voidmain(){ intm,i=0,j=0,page,n=0,k=0,j0,j1=0,A[100],B[100],count=0; printf("請輸入頁框(物理塊)數(shù):"); scanf("%d",&m); printf("請輸入頁面順序(以-999結(jié)束):\n"); scanf("%d",&page); while(page!=-999) { A[i]=page; i++;n++; scanf("%d",&page); } printf("\n先進(jìn)先出(FIFO)頁面置換算法\n"); printf("\t頁面順序\t內(nèi)存塊\t\t是否缺頁(Y/N)\n"); i=0; while(i<n) { printf("\t%d\t\t",A[i]); /*一.若內(nèi)存塊B[]未滿,直接將頁面A[]裝入*/ if(i<m) { B[j]=A[i];j++; for(j0=0;j0<j;j0++) printf("%3d",B[j0]); printf("\t\tY\n"); count++;i++; } /*二.若內(nèi)存塊B已滿,分兩種情況*/ else { for(j=0;j<m;j++) { if(A[i]!=B[j])k++; } //1.原內(nèi)存塊B無此頁面,依次置換出頁面A// if(k==m) { B[j1]=A[i];i++;j1++; for(j0=0;j0<m;j0++) printf("%3d",B[j0]); printf("\t\tY\n"); count++; if(j1==m)j1=0; }

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論