模拟分页式虚拟存储管理中硬件的地址转换和缺页中断选择页面调度算法处理缺页中断Word文档下载推荐.docx
《模拟分页式虚拟存储管理中硬件的地址转换和缺页中断选择页面调度算法处理缺页中断Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《模拟分页式虚拟存储管理中硬件的地址转换和缺页中断选择页面调度算法处理缺页中断Word文档下载推荐.docx(15页珍藏版)》请在冰点文库上搜索。
{
private:
stringope;
longintpage;
longintunit;
public:
ins(){}
ins(stringo,longintp,longintu):
ope(o),page(p),unit(u){}
voidsetope(stringo){ope=o;
}
voidsetpage(longintp){page=p;
voidsetunit(longintu){unit=u;
stringgetope(){returnope;
longintgetpage(){returnpage;
longintgetunit(){returnunit;
};
classwork
longintPage;
intsym;
longintinum;
longintonum;
work(){}
work(longintP,ints,longinti,longinto):
Page(P),sym(s),inum(i),onum(o){}
voidsetPage(longintP){Page=P;
voidsetsym(ints){sym=s;
voidsetinum(longinti){inum=i;
voidsetonum(longinto){onum=o;
longintgetPage(){returnPage;
intgetsym(){returnsym;
longintgetinum(){returninum;
longintgetonum(){returnonum;
voiddiaodu(work*w,ins*i,intnumofins)
{for(intj=0;
j<
numofins;
j++)
longinttempofk;
longinta=i[j].getpage();
for(intk=0;
k<
7;
k++)//7是页表的页数
if(w[k].getPage()!
=a)
continue;
else
{
tempofk=k;
break;
}
if(w[tempofk].getsym()==1)
cout<
<
"
绝对地址:
w[tempofk].getinum()*128+i[j].getunit()<
"
磁盘地址为:
w[tempofk].getonum()<
操作为:
i[j].getope()<
endl;
elsecout<
*"
发生缺页中断"
}
}
intmain()
{
ins*INS=newins[12];
INS[0].setope("
+"
);
INS[0].setpage(0);
INS[0].setunit(70);
INS[1].setope("
INS[1].setpage
(1);
INS[1].setunit(50);
INS[2].setope("
×
INS[2].setpage
(2);
INS[2].setunit(15);
INS[3].setope("
存"
INS[3].setpage(3);
INS[3].setunit(21);
INS[4].setope("
取"
INS[4].setpage(0);
INS[4].setunit(56);
INS[5].setope("
-"
INS[5].setpage(6);
INS[5].setunit(40);
INS[6].setope("
移位"
INS[6].setpage(4);
INS[6].setunit(53);
INS[7].setope("
INS[7].setpage(5);
INS[7].setunit(23);
INS[8].setope("
INS[8].setpage
(1);
INS[8].setunit(37);
INS[9].setope("
INS[9].setpage
(2);
INS[9].setunit(78);
INS[10].setope("
INS[10].setpage(4);
INS[10].setunit
(1);
INS[11].setope("
INS[11].setpage(6);
INS[11].setunit(84);
work*W=newwork[7];
ifstreamin("
g:
//operate1.txt"
longintp;
ints;
longinti;
longinto;
for(intjj=0;
jj<
7;
jj++)
in>
>
p;
in>
s;
i;
o;
W[jj].setPage(p);
W[jj].setsym(s);
W[jj].setinum(i);
W[jj].setonum(o);
diaodu(W,INS,12);
五.结果显示
操作系统实验二〔第二题〕
一.
用先进先出〔FIFO〕
是
否
是
九.程序清单
/操作系统实验二.cpp:
intchange;
work(longintP,ints,longinti,intc,longinto):
Page(P),sym(s),inum(i),change(c),onum(o){}
voidsetchange(intc){change=c;
intgetchange(){returnchange;
{
constintm=4;
intp[m]={0,1,2,3};
intk=0;
inttempofins=12;
for(intii=0;
ii<
tempofins;
ii++)
intL=i[ii].getpage();
for(intiii=0;
iii<
iii++)
if(w[iii].getPage()!
=L)
elseif(w[iii].getsym()==1)
if(i[ii].getope()=="
)
w[iii].setchange
(1);
cout<
绝对地址谓:
w[iii].getinum()*128+i[ii].getunit()<
w[iii].getinum()<
i[ii].getunit()<
else{
产生中断"
intj=p[k];
w[j].setsym(0);
w[j].setinum(-1);
w[L].setsym
(1);
w[L].setinum(rand()%20+10);
if(w[j].getchange()==1)
cout<
第"
页需要重新写入磁盘中"
第"
L<
页被调入主存"
p[k]=L;
k=(k==m-1)?
0:
(k+1);
调入主存的页:
;
for(intiiii=0;
iiii<
m;
iiii++)
intkk=p[iiii];
w[kk].getPage()<
endl<
...................................................."
//operate.txt"
intc;
c;
W[jj].setchange(c);
十.程序结果