实验四 页式虚拟存储管理.docx
文本预览下载声明
PAGE \* MERGEFORMAT4
页式虚拟存储管理中地址转换和缺页中断
实验目的
模拟请求页式存储管理中硬件的地址转换和缺页中断,并用先进先出调度算法(FIFO)处理缺页中断。
实验内容
1.内容:模拟请求页式存储管理中硬件的地址转换和缺页中断处理
2.思想:装入新页置换旧页时,若旧页在执行中没有被修改过,则不必将该页重写磁盘。因此,页表中增加是否修改过的标志,执行“存”指令和“写”指令时将对应的修改标志置成“1”表示修改过,否则为“0”表示未修改过。页表格式如下:
页号
标志
页架号
修改标志
在磁盘上位置
3.模拟算法流程:
程序及截图
程序主要代码:
#includeiostream
#includeiomanip
#includelist
using namespace std;
char useSign[12][5]={{+},{-},{*},{存},{取},{-},{移位},{+},{存},{取},{+},{存}};
int PageAddress[12]={70,50,15,21,56,40,53,23,37,78,01,84};
int PageNum[12]={0,1,2,3,0,6,4,5,1,2,4,6};
int S_Station;
int pPageNum[7];//页号pPage
int pSign[7];
int pStool[7];//页架号
int pModify[7];//修改标志
int pStation[7];//磁盘位置
static int z=0;
void Store()
{
for(int i=0;i7;i++)
{
if(i4)
{
pSign[i]=1;
}
else
pSign[i]=0;
pPageNum[i]=i;
pModify[i]=0;
}
int p1=1,p2=2,p3=3;
for(i=0;i7;i++)
{
if(i3)
{
pStation[i]=p1;
p1++;
}
else
if(i6)
{
pStation[i]=p2;
p2++;
}
else
pStation[i]=p3;
}
pStool[0]=5;
pStool[1]=8;
pStool[2]=9;
pStool[3]=1;
}
void CShow()
{
cout操作 ;
cout页号 ;
cout页内地址 ;
cout标志 ;
cout绝对地址 ;
cout修改页号 ;
cout页架号 ;
cout绝对地址;
coutendl;
}
void Find()
{
int m_Pagenum;
int m_Station;
int Y_Station;//绝对地址
int m_Stool;
cout输入页号及页内地址查询操作:;
cinm_Pagenumm_Station;
CShow();
int i,j=0;
//string m_Modify;
for(i=0;i12;i++)
{
if(PageAddress[i]==m_Station)
{
break;
}
}
Y_Station=pStool[m_Pagenum]*1024+m_Station;
if(pSign[m_Pagenum]==1)
{
if(strcpy(useSign[i],存)!=0)
{
pModify[m_Pagenum]=1;
}
显示全部