计算机系统结构试验一.docx
《计算机系统结构试验一.docx》由会员分享,可在线阅读,更多相关《计算机系统结构试验一.docx(16页珍藏版)》请在冰豆网上搜索。
计算机系统结构试验一
计算机系统结构课程
实验指导书
2014——2015学年
第1学期
学生班级:
学生学号:
学生姓名:
指导教师:
教研室:
计算机系统结构教研室
实验:
存贮层次模拟器1
学时:
4学时
实验类型:
(综合/设计):
设计
一、实验目的与要求
使学生清楚认识虚拟存贮层次结构,熟练掌握常用的几种存储地址映像与变换方法,以及FIFO、LRU等替换算法的工作全过程。
要求用程序实现任意地址流在存储层次上的命中情况,实验结束后提交源程序和实验说明书。
二、实验内容
在模拟器上实现在任意地址流下求出在Cache—主存两层存贮层次上的命中率。
三、实验步骤
1.Cache—主存:
映像方式要实现全相联、直接映象、组相联方式三种方式,并选择每一种映像方式下输出结果;替换算法一般使用LRU算法。
2.要求主存容量、Cache大小、块大小以及组数等可以输入修改。
3.求出命中率;显示替换的全过程;任选一种高级语言来做。
4.要设计简洁、易于操作的界面。
四、实验代码:
privatevoidbutton1_Click(objectsender,EventArgse)//全相联
{if(textBox1.Text==""||textBox2.Text==""||textBox3.Text==""||textBox4.Text==""||textBox5.Text=="")
MessageBox.Show("请输入数据!
");
else
{stringstate="";
stringstr=textBox5.Text;
introw=str.Length;
intmzcs=0,index=0;
floatmzl=0.0f;
intcolumn=Convert.ToInt32(textBox2.Text);
inti=0,j=0,t=0;
int[]iResult;
iResult=newint[column];
int[]imax;
imax=newint[column];
for(i=0;iimax[i]=0;
if(comboBox1.Text=="装入")
{intiSeed=Convert.ToInt32(textBox1.Text);
Randomro=newRandom(iSeed);
longtick=DateTime.Now.Ticks;
Randomran=newRandom((int)(tick&0xffffffffL)|(int)(tick>>32));
intiUp=iSeed;
intiDown=0;
for(i=0;i{for(;t==0;)
{t=1;
iResult[i]=ro.Next(iDown,iUp);
for(j=1;j
if(iResult[i]==iResult[i-j])
{
t=0;
break;
}}}
for(i=0;idataGridView1.Columns.Add("first","第"+i.ToString()+"块Cache");
dataGridView1.Columns.Add("first","状态");
index=this.dataGridView1.Rows.Add();
for(i=0;i{this.dataGridView1.Rows[index].Cells[i].Value=iResult[i].ToString();
}
this.dataGridView1.Rows[index].Cells[column].Value="Cache初态";
for(j=0;j{index=this.dataGridView1.Rows.Add();
for(intk=0;kimax[k]++;
for(i=0;i{if(iResult[i]==(Convert.ToInt32(str[j])-48))
{
mzcs++;
imax[i]=0;
state="命中";
break;
}}
if(i>=column)
{intk=0;
for(k=0;k{if(iResult[k]==-1)
{
iResult[k]=Convert.ToInt32(str[j])-48;
state="装入";
break;
}
}
if(k>=column)
{iUp=imax[0];
iDown=0;
for(t=1;tif(iUp{
iUp=imax[t];
iDown=t;
}
iResult[iDown]=Convert.ToInt32(str[j])-48;
state="命中";
imax[iDown]=0;
}}
for(i=0;ithis.dataGridView1.Rows[index].Cells[i].Value=iResult[i].ToString();
}
this.dataGridView1.Rows[index].Cells[column].Value=state;
}
mzl=1000000*mzcs/row;
textBox6.Text="0."+Convert.ToString(mzl);
}
else
{
for(i=0;iiResult[i]=-1;
intiUp=0,iDown=0;
for(i=0;idataGridView1.Columns.Add("first","第"+i.ToString()+"块Cache");
dataGridView1.Columns.Add("first","状态");
if(row<=column)
{iResult=newint[row];
for(i=0;i{iResult[i]=Convert.ToInt32(str[i])-48;
}
for(i=0;i{index=this.dataGridView1.Rows.Add();
for(j=0;j<=i;j++)
{
this.dataGridView1.Rows[index].Cells[j].Value=iResult[j].ToString();
}
this.dataGridView1.Rows[index].Cells[column].Value="装入";
}
mzl=1000000*mzcs/row;
textBox6.Text="0."+Convert.ToString(mzl);
}
else
{for(j=0;j{
index=this.dataGridView1.Rows.Add();
for(intk=0;kimax[k]++;
for(i=0;i{
if(iResult[i]==(Convert.ToInt32(str[j])-48))
{
mzcs++;
imax[i]=0;
state="命中";
break;
}}
if(i>=column)
{intk=0;
for(k=0;k{
if(iResult[k]==-1)
{
iResult[k]=Convert.ToInt32(str[j])-48;
state="装入";
break;
}}
if(k>=column)
{iUp=imax[0];
iDown=0;
for(t=1;tif(iUp{
iUp=imax[t];
iDown=t;
}
iResult[iDown]=Convert.ToInt32(str[j])-48;
state="命中";
imax[iDown]=0;
}}
for(i=0;i{this.dataGridView1.Rows[index].Cells[i].Value=iResult[i].ToString();
}
this.dataGridView1.Rows[index].Cells[column].Value=state;
}
mzl=1000000*mzcs/row;
textBox6.Text="0."+Convert.ToString(mzl);
}}}}
privatevoidbutton2_Click(objectsender,EventArgse)//直接相联
{
if(textBox1.Text==""||textBox2.Text==""||textBox3.Text==""||textBox4.Text==""||textBox5.Text=="")
MessageBox.Show("请输入数据!
");
else
{inti=0,j=0,m=0,n=0,row=0,k=0,index=0;
boolstate=false;
m=Convert.ToInt32(textBox1.Text);
n=Convert.ToInt32(textBox2.Text);
stringstr=textBox5.Text;
floatmzl=0.00f;
int[]iResult;
iResult=newint[n];
int[]iResult0;
row=str.Length;
stringszt="";
intmzcs=0;
if(comboBox1.Text=="装入")
{for(i=0;idataGridView1.Columns.Add("first","第"+i.ToString()+"块Cache");
dataGridView1.Columns.Add("first","状态");
index=this.dataGridView1.Rows.Add();
for(i=0;i{iResult[i]=i;
this.dataGridView1.Rows[index].Cells[i].Value=i.ToString();
}
this.dataGridView1.Rows[index].Cells[n].Value="Cache初态";
iResult0=newint[n];
for(i=0;iiResult0[i]=iResult[i];
for(j=0;j{index=this.dataGridView1.Rows.Add();
k=(Convert.ToInt32(str[j])-48)%n;
if(iResult0[k]==Convert.ToInt32(str[j])-48)
{mzcs++;state=true;
}else
{iResult[k]=Convert.ToInt32(str[j])-48;
}for(i=0;ithis.dataGridView1.Rows[index].Cells[i].Value=iResult[i].ToString();
}
if(state){this.dataGridView1.Rows[index].Cells[n].Value="命中";
state=false;
}
else
this.dataGridView1.Rows[index].Cells[n].Value="替换";
}
mzl=1000000*mzcs/row;
textBox6.Text="0."+Convert.ToString(mzl);}
else
{for(i=0;idataGridView1.Columns.Add("first","第"+i.ToString()+"块Cache");
dataGridView1.Columns.Add("first","状态");
iResult0=newint[n];
for(i=0;i{iResult0[i]=-1;
iResult[i]=-1;
}
for(j=0;j{index=this.dataGridView1.Rows.Add();
k=(Convert.ToInt32(str[j])-48)%n;
if(iResult0[k]==Convert.ToInt32(str[j])-48)
{mzcs++;
state=true}
else
{if(iResult[k]==-1)
szt="装入";
else
szt="替换";
iResult[k]=Convert.ToInt32(str[j])-48;
}
for(i=0;i{this.dataGridView1.Rows[index].Cells[i].Value=iResult[i].ToString();}
if(state)
this.dataGridView1.Rows[index].Cells[n].Value="命中";
state=false;
}else
this.dataGridView1.Rows[index].Cells[n].Value=szt;
}mzl=1000000*mzcs/row;
textBox6.Text="0."+Convert.ToString(mzl);
}}}
privatevoidbutton3_Click(objectsender,EventArgse)//组相联
{if(textBox1.Text==""||textBox2.Text==""||textBox3.Text==""||textBox4.Text==""||textBox5.Text=="")
MessageBox.Show("请输入数据!
");
else
{boolstate=false;
stringcellstate="";
stringstr=textBox5.Text;
introw=str.Length;
intmzcs=0,index=0;
floatmzl=0.0f;
intcolumn=Convert.ToInt32(textBox2.Text);
intzcount=Convert.ToInt32(textBox4.Text);
intzpage=column/zcount;
inti=0,j=0,t=0,k=0;
intiUp=0,iDown=0;
int[,]iResult;
iResult=newint[zcount,zpage];
int[,]iResult0;
iResult0=newint[zcount,zpage];
iResult[0,0]=0;
for(i=0;ifor(j=0;jiResult[i,j]=t;
iResult0[i,j]=t;
t++;
}t=0;
int[,]imax;
imax=newint[zcount,zpage];
for(i=0;ifor(j=0;jimax[i,j]=0;
if(comboBox1.Text=="装入")
{for(i=0;ifor(j=0;jdataGridView1.Columns.Add("first","主存第"+i.ToString()+"组"+"第"+j.ToString()+"页");
dataGridView1.Columns.Add("first","状态");
index=this.dataGridView1.Rows.Add();
t=0;
for(i=0;ifor(j=0;jthis.dataGridView1.Rows[index].Cells[t].Value=iResult[i,j].ToString();
t++;
}
this.dataGridView1.Rows[index].Cells[column].Value="主存初态";
for(j=0;j{index=this.dataGridView1.Rows.Add();
for(k=0;kfor(i=0;iimax[k,i]++;
intstrj=0;
strj=(Convert.ToInt32(str[j])-48)%column;
for(i=0;iif(strj>=iResult0[i,0]&&strj<=iResult0[i,zpage-1])
{t=i;
break;
}
for(i=0;iif((Convert.ToInt32(str[j])-48)==iResult[t,i])
mzcs++;
imax[t,i]=0;
state=true;
break;
}
if(i>=zpage)
{iUp=imax[t,0];
iDown=0;
for(k=1;kif(iUp{iUp=imax[t,k];
iDown=k;
}
iResult[t,iDown]=Convert.ToInt32(str[j])-48;
imax[t,iDown]=0;
}
t=0;
for(i=0;ifor(k=0;k{
this.dataGridView1.Rows[index].Cells[t].Value=iResult[i,k].ToString();
t++;}
if(state){this.dataGridView1.Rows[index].Cells[column].Value="命中";
state=false;
}
else
this.dataGridView1.Rows[index].Cells[column].Value="替换";
}
mzl=1000000*mzcs/row;
textBox6.Text="0."+Convert.ToString(mzl);
}
else
{for(i=0;ifor(j=0;jdataGridView1.Columns.Add("first","主存第"+i.ToString()+"组"+"第"+j.ToString()+"页");
dataGridView1.Columns.Add("first","状态");
for(i=0;ifor(j=0;jiResult[i,j]=-1;
for(j=0;j{index=this.dataGridView1.Rows.Add();
for(k=0;kfor(i=0;iimax[k,i]++;
intstrj=0;
strj=(Convert.ToInt32(str[j])-48)%column;
for(i=0;i<
|
|
|
|
|
|
|
|