【実験】ページング記憶管理方式のシミュレーションを要求する

3595 ワード

実験の目的
本実験の目的は,要求ページ型ストレージ管理におけるページ置換アルゴリズムのシミュレーション設計により,仮想ストレージ技術の特徴を理解し,要求ページ型ストレージ管理のページ置換アルゴリズムを把握することである.
 
 
実験内容
(1)乱数により命令シーケンスを生成し,320個の命令を生成する.命令のアドレスは以下の原則に従って生成される.
a,50%の命令は順次実行される.
b、25%の指令は前アドレス部に均一に分布する
c,25%の命令は後アドレス部分に均一に分布する
 
具体的な実施方法は、
a、[0319]の命令アドレス間でランダムに起点mを選択する.
b、順次1つの命令を実行する、すなわち、実行アドレスがm+1の命令を実行する
c、前アドレス[0,m+1]にランダムに1つの命令を選択して実行し、この命令のアドレスはm’;
d、順番に1つの命令を実行し、そのアドレスはm’+1である.
e、後アドレス[m’+2319]でランダムに1つの命令を選択して実行する
f、320回指令が実行されるまで上記手順を繰り返す
 
(2)命令シーケンスをページアドレスストリームに変換する
設定:
a、ページサイズ1 K
b、ユーザーメモリ容量は4ページから32ページである
c、ユーザー虚存容量32 K
ユーザダミーメモリでは、Kごとに10個の命令を格納してダミーアドレスを配列する.すなわち、320個の命令をダミーメモリに格納する方法は、以下の通りである.
第0条から第9条までの命令は第0ページ(対応するダミーアドレスは[0,9])である.
第10条から第19条までの指令は第1ページ(対応するダミーアドレスは[10,19]である)である.
        ……………………
第310条から第319条までの命令は第31ページ(対応するダミーアドレスは[310319])である.
以上のように、ユーザコマンドは32ページ構成可能である.
 
(3)下記の各種アルゴリズムの異なるメモリ容量でのヒット率を算出し出力する.
a、先進先出置換アルゴリズム(FIFO)
b、最近の最低使用置換アルゴリズム(LRU)
c、最適置換アルゴリズム(OPT)
     
本実験では,ページアドレスストリーム長320,ページ失効回数は,対応する命令にアクセスするたびに,その命令に対応するページがメモリに存在しない回数である.
3.乱数発生方法
乱数生成方法については,Linuxシステムが関数srand()とrand()を提供し,それぞれ初期化と乱数生成を行う.
例:
srand();
文はランダム数を初期化します.
a[0]=10*rand()/32767*319+1;
a[1]=10*rand()/32767*a[0];
………………………
文は、a[0]およびa[1]の乱数を生成するために使用することができる.
 
 
1.各ページに10個の命令を格納できると仮定し、ジョブに割り当てられたメモリブロック数は4である.
2.ページ、ページ表、アドレス変換とページ置換プロセスのシミュレーションを通じて、要求ページングシステムの原理と実現プロセスの理解を深める
3.C言語でジョブの実行プロセスをシミュレートします.このジョブには320の命令があります.つまり、アドレス空間は32ページで、現在、すべてのページがメモリに転送されていません.シミュレーション中、アクセスしたコマンドがメモリに存在する場合は、その物理アドレスが表示され、次のコマンドに移行します.アクセスしたコマンドがメモリにロードされていない場合、ページが欠落し、ページが欠落した回数を記録し、対応するページをメモリに呼び出します.4つのメモリブロックがすべてジョブにロードされている場合は、ページ置換を行い、最後に物理アドレスを表示し、次のコマンドに移動します.すべての320命令の実行が完了したら、ジョブの実行中に発生した欠落率を計算して表示します.
4.置換アルゴリズム:最適置換(OPT)アルゴリズム.
 
 
実験の実行結果は次のとおりです.
アドレスストリームシーケンス:1 4 7 3 3 1 2 1 3 7 6
M=3時FIFOのヒット率:26.66667%M=3時LRUのヒット率:30%
M=4のFIFOヒット率:36.66667%M=4のLRUヒット率:36.66667%
M=5時FIFOのヒット率:50%M=3時LRUのヒット率:46.66667%
M=6のFIFOヒット率66.6667%M=6のLRUヒット率63.3333%
 
 
 
#include  

#include 

#include 

#include 

#define Bsize 4 

typedef struct BLOCK//       ——     

{    

   int pagenum;//    

   int accessed;//    ,          

}BLOCK;  

int pc;//     ,         

int n;//     ,           

static int temp[320];//    320    

BLOCK block[Bsize]; //      4      

//************************************************************* 

void init(); //       

int findExist(int curpage);//            

int findSpace();//          

int findReplace();//         

void display();//  

void suijishu();//  320    ,      temp[320] 

void pagestring();//         

void OPT();//OPT  

//------------------------------------------------------------- 

void init()  

{      

   for(int i=0;iblock[pos].accessed)          

    pos = i;//        ,  BLOCK       

   }  

   return pos; 

} 

//------------------------------------------------------------- 

void display() 

{    

  for(int i=0; i>pc;     

  cout<

 
 
潭浩強《C++プログラム設計》清華大学出版社2004
任満傑等《オペレーティングシステム原理実用教程》電子工業出版社2006
湯子瀛《コンピュータ操作システム》(改訂版)西安電子科学技術大学出版社2001