シミュレーションLRUページ置換アルゴリズム

2986 ワード

実験二シミュレーションLRUページ置換アルゴリズム
 
一、実験目的
1)CまたはC++でLRUページ置換アルゴリズムをシミュレートする
2)LRUページ置換アルゴリズムのスケジューリングプロセスを把握する
二、実験内容
仮想ストレージシステムを設計し、プログラムシミュレーションLURページ置換アルゴリズムを作成し、プログラムによって淘汰されたページを出力し、ヒット率を計算する.
ページアクセス列をランダムに入力:
7 0 1 2 0 3 0 4 23 0 3 2 1 2 0 1
ランダム入力メモリ常駐セットサイズ:3(常駐セットの初期状態が空)
LRUアルゴリズムの実装:LRUアルゴリズムは、現在最も遠いページを最後に使用したため、この距離を記録する必要がある.記録方法は、カウンタを使用することができる:駐在セットの各ページフレームに設計数を増やす.1ページにアクセスするたびに、対応するページフレームのカウンタをクリアし、残りのページフレームの計算機に1を加算するので、カウンタの最大のページは、前回のアクセス距離が現在最も遠いページです.
  7      0    1     2      0    3    0     4      2      3     0     3    2     
0/7  1/7  2/7  0/2 1/2 2/2  3/2  0/4  1/4  2/4 0/0  1/0  2/0
        0/0  1/0  2/0  0/0  1/0 0/0 1/0  2/0   0/3  1/3 0/3 1/3
                0/1 1/1   2/1  0/3 1/3  2/3 0/2  1/2   2/2  3/2 0/2
欠けている命が欠けている命が欠けている命が欠けている
7 1 2 3 0 4淘汰ページ番号
出力淘汰ページ番号:7 1 2 3 0 4
ヒット率:4/13
#include 
#include 
using namespace std;
typedef struct waitBlock
{
    string pageNum;             //   
    int count;                  //   
}waitBlock;                     //      

typedef struct PageFrame
{
    string pageNum;             //      
    string hit;                 //         
}PageFrame;                     //    

void LRU(int n, int m, waitBlock *b, PageFrame *p)
{
    int i;              //  pageCount  
    int j;              //  pageFrame  
    int changNum;       //pageFrame      ,         
    int maxCount;       //pageFrame      ,       
    int flag = 0;       //    
    string temp = "";   //      
    cout< maxCount){ //      ,  count   
                changNum  =  j;
                maxCount  =  b[j].count;
            }
            b[j].count++;                       //      count 1
        }

        for(; j < m; j++)           //    ,        count 1
        {
            b[j].count++;
        }
        string before,after;           //before        ,after        
        before = b[changNum].pageNum;
        b[changNum].pageNum   =   p[i].pageNum;
        after = b[changNum].pageNum;
        b[changNum].count   =   0;                  //    count  

        if(before != after && before != "" && after != "")      //      
        {
            temp += before + " ";
        }

        cout<

>pageCount; int waitSpace; // cout<>waitSpace; PageFrame *visit = new PageFrame[pageCount]; // cout<>visit[i].pageNum; visit[i].hit = " "; } waitBlock *wB = new waitBlock[waitSpace]; // // for(int i = 0; i < waitSpace; i++) { wB[i].pageNum = ""; wB[i].count = 0; } LRU(pageCount,waitSpace,wB,visit); // LRU delete [] visit; delete [] wB; return 0; }