操作系统实验报告.docx

上传人:b****8 文档编号:30700218 上传时间:2023-08-19 格式:DOCX 页数:15 大小:75.21KB
下载 相关 举报
操作系统实验报告.docx_第1页
第1页 / 共15页
操作系统实验报告.docx_第2页
第2页 / 共15页
操作系统实验报告.docx_第3页
第3页 / 共15页
操作系统实验报告.docx_第4页
第4页 / 共15页
操作系统实验报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

操作系统实验报告.docx

《操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告.docx(15页珍藏版)》请在冰豆网上搜索。

操作系统实验报告.docx

操作系统实验报告

 

院系:

计算机学院

 

实验课程:

操作系统实验

实验项目:

模拟操作系统的页面置换

指导老师:

尹传勇

开课时间:

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模板 > 国外设计风格

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1