實驗四、LRU算法模擬


實驗原理:

其基本原理為:如果某一個頁面被訪問了,它很可能還要被訪問;相反,如果它長時間不被訪問,再最近未來是不大可能被訪問的。

 

程序源代碼:

#define MAXSIZE    20
#include <iostream.h>

void main()
{
    int input=0;                                   //用於輸入作業號
    int worknum=0;                                 //輸入的作業個數
    int storesize=0;                               //系統分配的存儲區塊數
    int interrupt=0;                               //缺頁中斷次數
    int stack[MAXSIZE];                            //棧,LRU算法的主要數據結構
    int workstep[MAXSIZE];                         //記錄作業走向
    /*初始化*/
    for(int i=0;i<MAXSIZE;i++)
    {
        stack[i]=0;
        workstep[i]=0;
    }
    cout<<"請輸入存儲區塊數:";
    cin>>storesize;
    cout<<"請輸入作業的頁面走向(輸入0結束):\n";
    for(int j=0;j<MAXSIZE;j++)
    {
        cout<<"頁面號 "<<j+1;
        cin>>input;        
        workstep[j]=input;
        if(input==0)
        {
            cout<<"輸入結束!\n";
            break;
        }
        worknum++;
    }
    if(workstep[0]==0)
    {
        cout<<"未輸入任何作業,系統將退出!\n";
        return;
    }
    cout<<"置換情況如下:\n";
    for(int k=0;k<worknum;k++)
    {
        /*在棧中找相等的頁號或空位置*/
        for(int l=0;l<storesize;l++)
        {
            /*是否有相等的頁號*/
            if(stack[l]==workstep[k])
            {
                cout<<"內存中有"<<workstep[k]<<"號頁面,無須中斷!\n"; 
                goto step1;
            }
            /*找棧中是否有空位置*/
            if(stack[l]==0)
            {
                stack[l]=workstep[k];
                cout<<"發生中斷,但內存中有空閑區,"<<workstep[k]<<"號頁面直接調入!\n";
                interrupt++;
                goto step1;
            }
        }
        /*上述情況都不成立則調出棧頂,將調入頁面插入棧頂*/
        cout<<"發生中斷,將"<<stack[0]<<"號頁面調出,"<<workstep[k]<<"號裝入!\n";
        interrupt++;
        /*新掉入的頁面放棧頂*/
step1:    for(int m=0;m<storesize;m++)
        {
            stack[m]=stack[m+1];
        }
        stack[storesize-1]=workstep[k];

    }
    cout<<"作業"<<worknum<<"個,"<<"中斷"<<interrupt<<"次,"<<"缺頁率:"<<float(interrupt)/float(worknum)*100<<"%\n";
}

 

程序調試:

 

調試一:

 

請輸入存儲區塊數:3

請輸入作業走向(輸入0結束):

頁面號1:4

頁面號2:3

頁面號3:2

頁面號4:1

頁面號5:4

頁面號6:3

頁面號7:5

頁面號8:4

頁面號9:3

頁面號10:2

頁面號11:1

頁面號12:5

頁面號13:0

輸入結束!

置換情況如下:

發生中斷,但內存中有空閑區,4號頁面直接調入!

發生中斷,但內存中有空閑區,3號頁面直接調入!

發生中斷,但內存中有空閑區,2號頁面直接調入!

發生中斷,將4號頁面調出,1號裝入!

發生中斷,將3號頁面調出,4號裝入!

發生中斷,將2號頁面調出,3號裝入!

發生中斷,將1號頁面調出,5號裝入!

內存中有4號頁面,無須中斷!

內存中有3號頁面,無須中斷!

發生中斷,將5號頁面調出,2號裝入!

發生中斷,將4號頁面調出,1號裝入!

發生中斷,將3號頁面調出,5號裝入!

作業12個,中斷10次,缺頁率:83.3333%

Press any key to continue

 

 

調試二:

 

請輸入存儲區塊數:4

請輸入作業走向(輸入0結束):

頁面號1:4

頁面號2:3

頁面號3:2

頁面號4:1

頁面號5:4

頁面號6:3

頁面號7:5

頁面號8:4

頁面號9:3

頁面號10:2

頁面號11:1

頁面號12:5

頁面號13:0

輸入結束!

置換情況如下:

發生中斷,但內存中有空閑區,4號頁面直接調入!

發生中斷,但內存中有空閑區,3號頁面直接調入!

發生中斷,但內存中有空閑區,2號頁面直接調入!

發生中斷,但內存中有空閑區,1號頁面直接調入!

內存中有4號頁面,無須中斷!

內存中有3號頁面,無須中斷!

發生中斷,將2號頁面調出,5號裝入!

內存中有4號頁面,無須中斷!

內存中有3號頁面,無須中斷!

發生中斷,將3號頁面調出,2號裝入!

發生中斷,將5號頁面調出,1號裝入!

發生中斷,將4號頁面調出,5號裝入!

作業12個,中斷8次,缺頁率:66.6667%


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM