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

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/saber_wtq/article/details/84068461

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

制限時間:1秒メモリ制限:128メガバイト
 

タイトル説明

まず、実験の目的
1、より深く理解FIFOページ置換アルゴリズムおよび関連する概念。
図2に示すように、変位マップ(P175教科書図5-3)説明ページ置換アルゴリズムを把握します。
図3は、ページフォルト率を算出します。

第二に、実験の原理は、
プロセスは、多くの場合、プロセス(物理ブロック)数、オペレーティングシステムに割り当てられたページ・フレームよりもはるかに大きい1ページの数は、従って、ページのしばしば一部のみがページ・フレームにロードすることができます。 
プロセスがページを呼び出すとき2は、ページは、ページのコールボックスに新しいページをロードするために、ページボックスのうち、どのページかを決定するためのアルゴリズムを必要とするページボックスを、発生する可能性はありません。 
3は、FIFOページ置換アルゴリズムがあることを理由に、メインメモリページで最長の外に滞在する:最初のページボックスにロードされ、最尤それはアクセスできなくなります。 

第三に、実験的な要件
C ++プログラミング言語、アナログFIFOページ置換アルゴリズムと1、。
2は、主な機能とあなたが書いたコードの一部は、あなただけの(唯一のFIFO機能の実装コードを提出する)機能のFIFOを書き、提出する必要があります。

#include <iostreamの>
する#include <iomanip>
の#include <ベクトル>
使用して名前空間STD;

/////////////////////////////// /////////////////////////////////////////////////
/ / FIFO関数宣言
//入力パラメータ:
// pageframeNum:プロセスのページ・フレーム番号に割り当てられたオペレーティングシステムと
// pageCallSequence:ページの呼び出しシーケンス、各シーケンスは、呼び出しページのページ番号です。
////////////////////////////////////////////////// //////////////////////////////
ボイドFIFO(INT pageframeNum、ベクトル<整数> pageCallSequence&);

int型のmain()
{
    int型I 、pageframeNum、N-;

    CIN >> pageframeNum; //(教科書として「ページ・フレーム」と呼ばれる物理ブロック)の処理の入力に割り当てられたページフレームの数
    CIN N - >>;プロセス・ページ呼び出しの入力シーケンスの//長さ
    ベクトル<整数> pageCallSequence(N) ; // ページシーケンスを定義するために呼び出す、シーケンスは、ページ番号のすべてのページで呼び出される
    (;私は<I = 0 //私は++; n)を構築するページ数Nページ呼び出しシーケンス
    {
        CIN >> pageCallSequence [I];
    }

    FIFO(pageframeNum、pageCallSequence); //アナログFIFOページ置換アルゴリズムの

    戻り0;


3、FIFO機能、実装において:各訪問ページ、ページによる。出力ページフレーム番号順のページフレーム番号、ページフォールト率を算出して出力します。 
図4に示すように、入力および出力フォーマットは、サンプルインプットサンプル出力を参照します。サンプル出力で:しかし、最後の行、すでにページフレーム、出力1にページをロードされていない場合は、各ラインは、出力ページボックスのページフレーム番号の順序に従ってページ番号であり、最後の行は、ページ・レートが欠落している、保持有効数字3桁。 
 

 

エントリー

3 12
4 3 2 1 4 3 5 4 3 2 1 5

 

輸出

4、-1、-1
4,3、-1
4,3,2
1,3,2
1,4,2
1,4,3
5,4,3
5,4,3
5,4,3
5、 2,3
5,2,1
5,2,1
0.750

 

サンプル入力

5 20 
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

 

サンプル出力

7、-1、-1、-1、-1、
7,0、-1、-1、-1 
7,0,1、-1、-1 
7,0,1,2、-1 
7,0、 1,2、-1、
7,0,1,2,3 
7,0,1,2,3 
4,0,1,2,3 
4,0,1,2,3 
4,0,1,2、 3 
4,0,1,2,3 
4,0,1,2,3 
4,0,1,2,3 
4,0,1,2,3 
4,0,1,2,3 
4,0、 1,2,3 
4,0,1,2,3 
4,7,1,2,3 
4,7,0,2,3 
4,7,0,1,3 
0.450が

より困難なもの、純粋なアナログではありません

コードは以下の通りです

書式#include <iostreamの>
の#include <ベクトル>
std名前空間を使用しました。

FIFOボイド(int型pageframeNum、ベクトル<整数>&pageCallSequence)
{
    int型I、J、K;
    のconst int型pageCallSequence.size M =();
    のconst int型N = pageframeNum;
    BOOL T = 0; //フラグ
    INT * A =新たINT [N]; //ダイナミックアレイ
    フロートS;
    のための(I = 0; Iは、Nを<; Iは++)
    {
        [I] = -1;
    }
    K = 0;
    のため(J = 0; J <M、J ++)
    {
        T = 0;デフォルトページは//新しいページをロードする前にメモリにない
        ため(I = 0; Iは、Nを<; I ++)は
            (pageCallSequence [J]が[I]を==)IF //ページが呼び出された場合そうでなければ0に設定されたメモリ位置1に記憶されたフラグ、
            {
                ; T = 1
                BREAK;
            }
        ページは、メモリ内に既にある場合(T == 1)//現在のメモリページ番号の出力ならば
        {
            ための(I = 0; Iは、Nを<; Iは++)
            {
                IF(== N-I 1)
                    のprintf( " Dの%」、[I]);
                他
                    のprintf( "%のD、"、[I]);
            }        
        }
        そう//ページがメモリにない場合、最長のページメモリに置き換え
        {
            [ k個%のN] = pageCallSequence [J ]; // FIFOはコード実装
            //ページ置換の数を記録し、++、Kの
            ための(I = 0; iがNを<++ I)の
            { 
                IF(IのN == - 1)
                    のprintf ( "%dの"、[ I])。
                他
                    printf( "%dを、" [I])。
            }
        }
        のprintf( "の\ n");
    }
    、S = 1.0×K / M。
    printf( "%0.3Fする\ n"、S);
    削除します。
}

INTのmain()
{
    int型I、pageframeNum、N。

    CIN >> pageframeNum; //(教科書として「ページ・フレーム」と呼ばれる物理ブロック)の処理の入力に割り当てられたページフレームの数
    CIN N - >>; //プロセスシーケンス長の入力ページを呼び出す
    ベクトル<整数> pageCallSequence (N); //ページ順序を定義するために呼び出す、シーケンスは、ページ番号のすべてのページで呼び出され
    (; iは<I = 0 N; iは++)// ページのn個のページ呼び出しシーケンスを構築する
    {
        CINをpageCallSequence >> [I];
    }
    FIFO(pageframeNum、pageCallSequence); //アナログFIFOページ置換アルゴリズム
    //システム( "PAUSE");
    0を返します;
}


 

おすすめ

転載: blog.csdn.net/saber_wtq/article/details/84068461