⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 10.cpp

📁 实验要求:设计一个请求页式存储管理方案
💻 CPP
字号:
操作系统之存储管理 
作者:论文百事通  来源:lwbst.com    【2006-09-28】    编辑:Admin  
实验要求:设计一个请求页式存储管理方案,并编写模拟程序实现之。用随机数产生器生成一个指令系列。页面淘汰算法采用FIFO算法。

bst
设计思想:
产生一个需要访问的指令地址流,指定合适的页面大小,指定内存页表的最大长度,并对页表进行初始化。每访问一个地址,首先计算该地址所在的页号,然后查页表,判断该页是否在主存;如果该页在主存,则打印页表情况;如果该页不在主存且页表已满,则调入一页并打印页表情况;如果该页不在主存且页表已满,则按FIFO页面淘汰算法淘汰一页后调入所需的页,并打印页表情况。逐个地址访问,直到所有地址访问完毕
概要设计:
本次实验以c++builder为平台。随机产生一个需要访问的指令地址流,页面淘汰算法采用了FIFO和LRU两种 。整个程序大体分为3大模块:
1.生成地址流模块,程序自动算出该地址所在页面。
2.FIFO算法模块。 

运行界面和过程如下:
   

源程序如下:

 

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

 

void __fastcall TForm1::suiButton1Click(TObject *Sender)
{ //设置状态栏
String str;
str=Time();

StatusBar1->Panels->Items[0]->Text="指令条数: "+suiComboBox1->Text;
StatusBar1->Panels->Items[1]->Text="页面大小: "+suiComboBox2->Text;
StatusBar1->Panels->Items[2]->Text="页表大小: "+suiComboBox3->Text;
StatusBar1->Panels->Items[5]->Text="时间:"+str;

suiEdit1->Text="";
suiMemo1->Clear();
suiMemo2->Clear();

 

int i,j,num,page_Length,temp,check=0;
int fifotemp=0;
int lrutemp=0;

 

String buffer1,buffer2,buffer3;
buffer1="页表中命中指令地址: ";
buffer3="页表中插入指令地址:";

for(i=0;i<100;i++) e[i]=0; //初始化e数组
int tag=0;
for(i=0;i<=100;i++) { //初始化记录数组
a[i]=320;
b[i]=320;
c[i]=320;
d[i]=320;
}

page_Length=StrToInt(suiComboBox3->Text);
d[0]=1;

  

num=StrToInt(suiComboBox1->Text); //产生随机地址序列
temp=(num-1)/4+1;
randomize();
a[0]=random(319);
for( i=0;i<temp;i++)
{
a[i*4+1]=a[i*4]+1;
a[i*4+2]=random(a[i*4+1]);
a[i*4+3]=a[i*4+2]+1;
Randomize();
a[i*4+4]=RandomRange(a[i*4+2]+2,319);
}
a[num]=320;
for(i=0;i<num;i++) suiEdit1->Text=suiEdit1->Text+":"+IntToStr(a[i]);

 

for(i=0;i<num;i++) //求出随机数的页号
b[i]=a[i]/StrToInt(suiComboBox2->Text);

 

//FIFO算法
for(i=0;i<num;i++)
{for( j=0;j<page_Length;j++)
{if(b[i]==c[j]) { buffer2=IntToStr(a[i]);
suiMemo1->Lines->Add(buffer1+buffer2+" 命中");
check=1;
fifotemp++;
show(suiMemo1);
break;
}
}
if(check!=1)
{
check=0;
for(j=0;j<page_Length;j++)
{ if(d[j]==1) {
buffer2=IntToStr(a[i]);
suiMemo1->Lines->Add(buffer3+buffer2+" 插入");
c[j]=b[i];
show(suiMemo1);
if(j==page_Length-1) d[0]=1;

else d[j+1]=1;
d[j]=320;
if(page_Length==1) d[0]=1;
break;
}

}
}check=0;
}

 

FIFO_RATE=fifotemp*100/StrToInt(suiComboBox1->Text);

StatusBar1->Panels->Items[3]->Text="FIFO命中率:"+IntToStr(FIFO_RATE)+"%";

}
//---------------------------------------------------------------------------

void TForm1::show(TsuiMemo * memo)
{
//TODO: Add your source code here
int len;
String buffer;
len=StrToInt(suiComboBox3->Text);
memo->Lines->Add("内存页 页面号");
for(int i=0;i<len;i++)
{
if(c[i]==320) buffer="空" ;
else buffer=IntToStr(c[i]);
memo->Lines->Add(IntToStr(i)+" "+buffer) ;
}
memo->Lines->Add("======{=====================>>");
return;
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
StatusBar1->Panels->Items[0]->Text="指令条数: "+suiComboBox1->Text;
StatusBar1->Panels->Items[1]->Text="页面大小: "+suiComboBox2->Text;
StatusBar1->Panels->Items[2]->Text="页表大小: "+suiComboBox3->Text;
StatusBar1->Panels->Items[3]->Text="FIFO命中率: " ;

StatusBar1->Panels->Items[5]->Text="时间:"+Time();
}
//---------------------------------------------------------------------------
 
  本课程设计包含完整源程序、可执行程序、设计文档。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -