操作系统实验页面置换.docx
- 文档编号:30007459
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:15
- 大小:75.32KB
操作系统实验页面置换.docx
《操作系统实验页面置换.docx》由会员分享,可在线阅读,更多相关《操作系统实验页面置换.docx(15页珍藏版)》请在冰豆网上搜索。
操作系统实验页面置换
院系:
计算机学院
实验课程:
操作系统实验
实验项目:
进程调度的设计与实现
指导老师:
伊传勇
开课时间:
2009~2010年度第2学期
专业:
计算机科学与技术(师范)
班级:
2班
华南师范大学教务处
一、实验名称
模拟操作系统的页面置换
二、实验目的
1、掌握操作系统的页面置换过程,加深理解页式虚拟存储器的实现原理。
2、掌握用随机数生成满足一定条件的指令地址流的方法。
3、掌握页面置换的模拟方法。
三、实验要求与提示
采用一种熟悉的语言,如C、PASCAL或C++等,编制程序。
模拟操作系统采用OPT、FIFO和LRU算法进行页面置换的过程。
设程序中地址范围为0到32767,采用随机数生成256个指令地址,满足50%的地址是顺序执行,25%向前跳,25%向后跳。
为满足上述条件,可采取下列方法:
设d0=10000,第n个指令地址为dn,第n+1个指令地址为dn+1,n的取值范围为0到255。
每次生成一个1到1024范围内的随机数a,如果a落在1到512范围内,则dn+1=dn+1。
如果a落在513到768范围内,则设置dn+1为1到dn范围内一个随机数。
如果a落在769到1024范围内,则设置dn+1为dn到32767范围内一个随机数。
页面大小的取值范围为1K,2K,4K,8K,16K。
按照页面大小将指令地址转化为页号。
对于相邻相同的页号,合并为一个。
分配给程序的内存块数取值范围为1块,2块,直到程序的页面数。
分别采用OPT、FIFO和LRU算法对页号序列进行调度,计算出对应的缺页中断率。
打印出页面大小、分配给程序的内存块数、算法名、对应的缺页中断率。
四、程序的主要流程图
1、先进先出算法流程图
2、最佳算法流程图
3最近最久未使用算法流程图
五、实验心得
通过这次页面置换模拟实验,我对操作系统这门课程有了更加深刻的了解,自己的编程能力有了一定的提高。
把书中的理论知识和实践相结合,使我的知识水平在原有的基础上有了一定的进步。
这次实验大大提高了我的分析能力、编程能力和综合能力,找出并改正了自己的许多错误与不足之处,为在毕业后在就业市场上提高自己的竞争力打下了坚实的基础。
使我体会最深的是:
任何一门知识的掌握,仅靠学习理论知识是远远不够的,要与实际动手操作相结合才能达到功效。
通过实验使我感觉编程就是一门艺术。
六、主要源程序清单
classCPageReplaceDlg:
publicCDialogEx
{
//。
。
。
。
。
。
。
。
。
。
。
。
。
private:
intMaxAddress;
intMinAddress;
intSize;
intMaxMemory;
intd[256];
intchange[256];
public:
intCreatAddress();
intGetMaxMin();
intGetMaxMemory();
intGetChange();
intFIFO(inta[],intm,intp[],intcount);
intLRU(intb[],intm,intp[],intcount);
intOPT(intc[],intm,intp[],intcount);
CStringoutput;
intm_size;
afx_msgvoidOnBnClickedButton1();
};
CPageReplaceDlg:
:
CPageReplaceDlg(CWnd*pParent/*=NULL*/)
:
CDialogEx(CPageReplaceDlg:
:
IDD,pParent)
MaxAddress(0)
MinAddress(32768)
Size(1024)
MaxMemory
(1)
output(_T(""))
m_size(0)
{
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
intCPageReplaceDlg:
:
CreatAddress()
{
d[0]=10000;
inta,i;
for(i=1;i<256;i++)
{
a=rand()%1024+1;
if(a>0&&a<513)
d[i]=d[i-1]+1;
elseif(a>512&&a<769)
d[i]=rand()%(d[i-1])+1;
elseif(a>768&&a<1025)
d[i]=d[i-1]+1+rand()%(32767-d[i-1]);
}
return0;
}
intCPageReplaceDlg:
:
GetMaxMin()
{
for(inti=0;i<256;i++)
{
if(MaxAddress MaxAddress=d[i]; if(MinAddress>d[i]) MinAddress=d[i]; } return1; } intCPageReplaceDlg: : GetMaxMemory() { intH=MaxAddress/Size; if(MaxAddress%Size! =0)H++; intL=MinAddress/Size; if(MinAddress%Size! =0)L++; MaxMemory=H-L+1; returnMaxMemory; } intCPageReplaceDlg: : GetChange() { intcount=1; change[0]=d[0]/Size; if(d[0]%Size! =0) change[0]++; inti,j=1; inttemp; for(i=1;i<256;i++) { temp=d[i]/Size; if(d[i]%Size! =0) temp++; if(temp! =change[j-1]) { change[j]=temp;count++;j++; } } returncount; } intCPageReplaceDlg: : FIFO(inta[],intm,intp[],intcount) { intk=0; intcountF=0; inti,j; for(j=m;j { for(i=0;i if(a[i]==p[j])break; if(i==m) { a[k]=p[j]; k=(k+1)%m; countF++; } } returncountF; } intCPageReplaceDlg: : LRU(intb[],intm,intp[],intcount) { intcountL=0; inti,j,ii; for(j=m;j { for(i=0;i if(b[i]==p[j])break; if(i==m) { for(ii=0;ii b[ii]=b[ii+1]; b[ii]=p[j]; countL++; } else { inttemp=b[i]; for(ii=i;ii b[ii]=b[ii+1]; b[ii]=temp; } } returncountL; } intCPageReplaceDlg: : OPT(intc[],intm,intp[],intcount) { intcountO=0; inti,j,ii,jj; intmincount; intoutpage; inttempcount; for(j=m;j { for(i=0;i if(c[i]==p[j])break; if(i==m) { mincount=count; tempcount=0; for(ii=0;ii { for(jj=j;jj if(c[ii]==p[jj]) tempcount++; if(mincount>tempcount) { mincount=tempcount; outpage=c[ii]; tempcount=0; } tempcount=0; } for(ii=0;ii if(c[ii]==outpage)break; c[ii]=p[j]; countO++; } } returncountO; } voidCPageReplaceDlg: : OnBnClickedButton1() { //TODO: 在此添加控件通知处理程序代码 UpdateData(); CreatAddress(); Size=1024*m_size; CStringtemp; output=_T(""); intcount=GetChange(); temp=_T("该作业依次要访问的页号的总数是: "); output+=temp; temp.Format(_T("%d"),count); output+=temp; int*pFIFO=newint[count]; int*pLRU=newint[count]; int*pOPT=newint[count]; inti; for(i=0;i pFIFO[i]=pLRU[i]=pOPT[i]=change[i]; GetMaxMin(); intM=GetMaxMemory(); intm; temp=_T("\r\n该作业所需的最大内存块数是: "); output+=temp; temp.Format(_T("%d"),M); output+=temp; temp=_T("\r\n下面给出的是[1,"); output+=temp; temp.Format(_T("%d"),M); output+=temp; temp=_T("]的各个数作为分配给该作业的内存块数的情况! "); output+=temp; temp=_T("\r\n结论如下: \r\n"); output+=temp; for(m=1;m<=M;m++) { int*a=newint[m]; int*b=newint[m]; int*c=newint[m]; a[0]=b[0]=c[0]=change[0]; intj,ii; for(i=1;i { for(j=i;j { for(ii=0;ii if(a[ii]==change[j])break; if(ii==i) { a[i]=b[i]=c[i]=change[j];break; } } if(j==count)break; } intCountF=FIFO(a,m,pFIFO,count); intCountL=LRU(b,m,pLRU,count); intCountO=OPT(c,m,pOPT,count); deletea;deleteb;deletec; temp=_T("\r\n页面大小为: "); output+=temp; temp.Format(_T("%d"),Size/1024); output+=temp; temp=_T("K,分配给程序的内存块数是: "); output+=temp; temp.Format(_T("%d"),m); output+=temp; temp=_T("\r\nOPT算法的缺页率为: "); output+=temp; temp.Format(_T("%f"),CountO/(float)count); output+=temp; temp=_T("\r\nFIFO算法的缺页率为: "); output+=temp; temp.Format(_T("%f"),CountF/(float)count); output+=temp; temp=_T("\r\nLRU算法的缺页率为: "); output+=temp; temp.Format(_T("%f"),CountL/(float)count); output+=temp; } UpdateData(FALSE); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 页面 置换