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を返します;
}