操作系统实验2Word文档格式.docx
《操作系统实验2Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验2Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
CStringpageSeqNum;
//带分隔符的访问页面序列字符串备份
inttotalPageCount;
//实际输入的总页面数
intfailPageCount;
//缺页中断次数
intpageBlock[9],priority[9];
//已在内存页面号,及其优先数
boolmetathesis,space;
//是否缺页,是否有空页
CStringstr,memo,output;
//信息标题,调页记录,输出信息
3、主对话框类声明
classCPageMetathesisDlg:
publicCDialog
{
//Construction
public:
BOOLUpdatePageSeq();
voidOptimal(int*,int);
voidLRU(int*,int);
voidFIFO(int*,int);
CPageMetathesisDlg(CWnd*pParent=NULL);
//standardconstructor
//DialogData
//{{AFX_DATA(CPageMetathesisDlg)
enum{IDD=IDD_PAGEMETATHESIS_DIALOG};
CEditm_BlockCount_Control;
CListBoxm_Display;
CEditm_PageSeqNum_Control;
CStringm_Hint;
CStringm_PageSeqNum;
intm_BlockCount;
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CPageMetathesisDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
HICONm_hIcon;
//Generatedmessagemapfunctions
//{{AFX_MSG(CPageMetathesisDlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnButtonClr();
afx_msgvoidOnButtonExit();
afx_msgvoidOnButtonLru();
afx_msgvoidOnButtonFifo();
afx_msgvoidOnButtonOptimal();
afx_msgvoidOnButtonSave();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
4、参考代码
//实现Optimal算法的函数
voidCPageMetathesisDlg:
:
Optimal(int*addr,intphysical_size)
charCSnum[2];
metathesis=true,space=true;
str="
\r\n"
;
output="
"
for(intz=1;
z<
=physical_size;
z++)//输出说明提示
{
str+="
页块"
itoa(z,CSnum,10);
str+=CSnum;
"
}
str+="
有无中断页面置换形式"
m_Display.InsertString(m_Display.GetCount(),str);
for(inti=physical_size-1;
i>
=0;
i--)
pageBlock[i]=-1;
//设置数组初值为-1
priority[i]=0;
//设置数组优先级为0
for(i=0;
i<
totalPageCount;
i++)
metathesis=true;
for(intj=0;
metathesis&
&
j<
physical_size;
j++)
{
if(addr[i]==pageBlock[j])
{
metathesis=false;
memo="
for(z=0;
z++)
{
if(pageBlock[z]==-1)//无中断且有空页面,空页面处输出空格
memo+="
else//无中断
{
itoa(pageBlock[z],CSnum,10);
memo+=CSnum;
}
}
output+="
output+=memo;
m_Display.InsertString(m_Display.GetCount(),memo);
}
}
if(metathesis)//有中断
if(space)//有空页面,插入页面中断
intm;
if(priority[z]==0)
priority[z]=1;
pageBlock[z]=addr[i];
m=z;
z=physical_size;
if(priority[physical_size-1]!
=0)space=false;
//无空页面
itoa(pageBlock[z],CSnum,10);
if(m<
z)memo+="
elsememo+=CSnum;
memo+="
memo+="
√插入页面"
failPageCount++;
else//无空页面,替换页面中断
intmax=0;
for(intk=i+1;
k<
k++)
if(pageBlock[z]==addr[k])//查找未来最长时间不再访问的页面
{
priority[z]=k;
k=totalPageCount+1;
if(priority[z]>
priority[max])max=z;
}
if(k==totalPageCount){max=z;
z=physical_size;
}
pageBlock[max]=addr[i];
memo+=CSnum;
√替换页面"
memo="
m_Display.InsertString(0,memo);
\r\nOptimal算法总页面数:
chartemporary[4];
itoa(totalPageCount,temporary,10);
memo+=temporary;
itoa(failPageCount,temporary,10);
memo+="
缺页中断次数:
缺页率为:
failPageCount=failPageCount*100/totalPageCount;
%"
output+="
\r\n\r\n"
output+=memo;
//实现LRU算法的函数
LRU(int*addr,intphysical_size)
if(priority[z]>
priority[j])
priority[z]-=1;
priority[j]=physical_size;
else//无中断不为空页面
priority[z]=physical_size;
else
if(priority[z]==1)
else
……
//实现FIFO算法的函数
FIFO(int*addr,intphysical_size)
//将输出信息保存到磁盘文件
OnButtonSave()
//TODO:
Addyourcontrolnotificationhandlercodehere
CFileDialogdlgFile(TRUE);
HANDLEhFile;
CStringtitle,strFilter,fileName;
VERIFY(title.LoadString(AFX_IDS_SAVEFILE));
strFilter+="
PageMetathesisDATAFile(*.DAT;
*.dat)"
strFilter+=(TCHAR)'
\0'
//nextstringplease
strFilter+=_T("
*.DAT"
);
//laststring
dlgFile.m_ofn.Flags|=OFN_OVERWRITEPROMPT|OFN_CREATEPROMPT;
CStringstrDefault;
dlgFile.m_ofn.nMaxCustFilter++;
dlgFile.m_ofn.lpstrFilter=strFilter;
dlgFile.m_ofn.lpstrTitle=title;
dlgFile.m_ofn.lpstrFile=fileName.GetBuffer(_MAX_PATH);
if(dlgFile.DoModal()==IDOK)
hFile=CreateFile(fileName,//filename
GENERIC_WRITE,//OnlyWritePermission
0,//cannotbeshared
NULL,//pointertos