⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xsf.cpp

📁 本程序实现页面调度
💻 CPP
字号:
// Xsf.cpp : implementation file
//

#include "stdafx.h"
#include "ww.h"
#include "Xsf.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CXsf dialog


CXsf::CXsf(CWnd* pParent /*=NULL*/)
	: CDialog(CXsf::IDD, pParent)
{
	//{{AFX_DATA_INIT(CXsf)
	m_xl = _T("");
	m_ADD = 0;
	m_yk = 0;
	m_q = 0;
	m_tao = _T("");
	m_bk = _T("");
	m_z = 0;
	m_bz = _T("");
	number=0;
	m_k5 = 0;
	m_k1 = 0;
	m_k2 = 0;
	m_k3 = 0;
	m_k4 = 0;
	ncj=0;
		number=0;
	whichj=0;
	ncj=0;
jsq=0;
	m_tao="";
	m_bk="";
m_bz="";

m_ADD=0;
m_bk="";
m_bz="";
m_ksb="";
m_q=0;
m_tao="";
m_xl="";
m_yk=0;
m_z=0;
m_zh="";
fifoq=0;
fifoz=0;
lruq=0;
lruz=0;
optq=0;
optz=0;

	//}}AFX_DATA_INIT
	
for(int i=0;i<50;i++)
{
	xl[i]=0;
	tttwz[i]=0;
	ttt[i]=0;
	for(int j=0;j<10;j++)
		nnc[i][j]=0;
}

	
}


void CXsf::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CXsf)
	DDX_Control(pDX, IDC_EDIT115, m_kk5);
	DDX_Control(pDX, IDC_EDIT104, m_kk4);
	DDX_Control(pDX, IDC_EDIT93, m_kk3);
	DDX_Control(pDX, IDC_EDIT82, m_kk2);
	DDX_Control(pDX, IDC_EDIT71, m_kk1);
	DDX_Text(pDX, IDC_EDITxl, m_xl);
	DDX_Text(pDX, IDC_EDITadd, m_ADD);
	DDX_Text(pDX, IDC_EDITyk, m_yk);
	DDX_Text(pDX, IDC_EDITq, m_q);
	DDX_Text(pDX, IDC_EDITtao, m_tao);
	DDX_Text(pDX, IDC_EDITbk, m_bk);
	DDX_Text(pDX, IDC_EDITz, m_z);
	DDX_Text(pDX, IDC_EDITbz, m_bz);
	DDX_Text(pDX, IDC_EDIT115, m_k5);
	DDX_Text(pDX, IDC_EDIT71, m_k1);
	DDX_Text(pDX, IDC_EDIT82, m_k2);
	DDX_Text(pDX, IDC_EDIT93, m_k3);
	DDX_Text(pDX, IDC_EDIT104, m_k4);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CXsf, CDialog)
	//{{AFX_MSG_MAP(CXsf)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
	ON_BN_CLICKED(IDC_BUTTON8, OnButton8)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CXsf message handlers

void CXsf::OnButton1() //	添加访问序列
{
	// TODO: Add your control notification handler code here
		UpdateData(true);
xl[number]=m_ADD;
//	xl[number]=50;
	//number=20;
number++;
//m_q=number;
	//m_xl+="1  "+m_ADD;

m_xl+="  ";
if(m_ADD>=10)
{
m_xl+=m_ADD/10+48;
m_xl+=m_ADD%10+48;
}
else
m_xl+=m_ADD+48;
UpdateData(false);
	UpdateData(true);
	
}

void CXsf::OnButton2() 
{
	// TODO: Add your control notification handler code here
		whichj=0;
UpdateData(true);
int i=0,qy=0,tt=0,ttx[50],nc[10],f=0,j=0,ttw=0,have=0/*,dx[10]*/;
int tt1=0;
for(i=0;have<m_yk;i++)
{
f=0;
for(j=0;j<have;j++)
if(xl[i]==nc[j])
{
	f=1;
	tttwz[tt1]=j;
	tt1++;
	break;
}
if(f==0)
{
	tttwz[tt1]=have;
	tt1++;
	nc[have]=xl[i];
	have++;
	qy++;
}
}





for(;i<number;i++)
{
f=0;
for(j=0;j<m_yk;j++)
if(xl[i]==nc[j])
{
	tttwz[tt1]=j;
	tt1++;
	f=1;
	break;
}
if(f==0)
{
	tttwz[tt1]=ttw;
	tt1++;
	ttx[tt]=nc[ttw];
	nc[ttw]=xl[i];
	ttw=(ttw+1)%m_yk;
	tt++;
	qy++;
}
}
m_q=qy;
m_tao="";
for(i=0;i<tt;i++)
{
	m_tao+="  ";
if(ttx[i]>=10)
{
m_tao+=48+ttx[i]/10;
m_tao+=48+ttx[i]%10;
}
else
m_tao+=48+ttx[i];
}
m_z=tt;
/*	
 m_zh="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
	m_ksb="不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
  
m_bk= "不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出"; 
    m_bz="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
*/
m_bk=m_ksb;
m_bz=m_zh;

UpdateData(false);
fifoq=m_q;
fifoz=m_z;
}

void CXsf::OnButton3() // lru算法
{
	// TODO: Add your control notification handler code here
		UpdateData(true);
	whichj=1;

int i=0,qy=0,tt=0,ttx[50],nc[10],f=0,j=0,ttw=0,have=0,k,p=0,k1;
int tt1=0;
for(i=0;have<m_yk;i++)
{
f=0;
for(j=0;j<have;j++)
if(xl[i]==nc[j])
{
	f=1;
	k=j;
	
	break;
}
if(f==0)
{
	
	nc[have]=xl[i];
	
	have++;
	qy++;
for(int zxq=0;zxq<have;zxq++)
nnc[i][zxq]=nc[zxq];
}
else
{
	k1=nc[k];
for(p=k;p<have-1;p++)
nc[p]=nc[p+1];//每访问一次则放到最后去,没次都替换第一个
//进入时是放在第一个
nc[have-1]=k1;
for(int zxq=0;zxq<have;zxq++)
nnc[i][zxq]=nc[zxq];
}
}

for(;i<number;i++)
{
f=0;

for(j=0;j<m_yk;j++)
if(xl[i]==nc[j])
{
	f=1;
	k=j;
	break;
}

if(f==0)
{
	ttx[tt]=nc[0];
	for(p=0;p<m_yk-1;p++)
		nc[p]=nc[p+1];
	nc[m_yk-1]=xl[i];
	tt++;
	qy++;
for(int zxq=0;zxq<have;zxq++)
nnc[i][zxq]=nc[zxq];
}
else
{
	k1=nc[k];
for(p=k;p<m_yk-1;p++)
nc[p]=nc[p+1];
nc[m_yk-1]=k1;
for(int zxq=0;zxq<have;zxq++)
nnc[i][zxq]=nc[zxq];
}
}
//m_q=nc[0];

/*
for(;i<number;i++)
{
f=0;
for(j=0;j<m_yk;j++)
if(xl[i]==nc[j])
{
	f=1;
	k=j;
	break;
}
if(f==0)
{
	ttx[tt]=nc[0];
for(p=0;p<m_yk-1;p++)
nc[p]=nc[p+1];
nc[m_yk-1]=m_xl[i];
	tt++;
	qy++;
}
else
{
k1=nc[k];
for(p=k;p<m_yk-1;p++)
nc[p]=nc[p+1];
nc[m_yk-1]=k1;
}
}
*/
m_q=qy;
m_tao="";
for(i=0;i<tt;i++)
{
	m_tao+="  ";
if(ttx[i]>=10)
{
m_tao+=48+ttx[i]/10;
m_tao+=48+ttx[i]%10;
}
else
m_tao+=48+ttx[i];
}
m_z=tt;
/*	
 m_zh="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
	m_ksb="不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
  
m_bk= "不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出"; 
    m_bz="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
*/
//m_bk=m_ksb;
//m_bz=m_zh;

UpdateData(false);
	
lruq=m_q;
lruz=m_z;
}

void CXsf::OnButton4() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	whichj=2;
int i=0,qy=0,tt=0,ttx[50],nc[10],f=0,j=0,ttw=0,have=0,dx[10],p,max,q,k;
int tt1=0;
for(p=0;p<10;p++)
dx[p]=50;
for(i=0;have<m_yk;i++)
{
f=0;
for(j=0;j<have;j++)
if(xl[i]==nc[j])
{
	tttwz[tt1]=j;
	tt1++;
	f=1;
	k=j;
	break;
}
if(f==0)
{
	tttwz[tt1]=have;
	tt1++;
	nc[have]=xl[i];
	for(p=i+1;p<number;p++)
		if(xl[i]==xl[p])
		{
			dx[have]=p;
			break;
		}
		if(p==number)
			dx[have]=50;
	have++;
	qy++;
}
else
{
for(p=i+1;p<number;p++)
		if(xl[i]==xl[p])
		{
			dx[k]=p;
			break;
		}
		if(p==number)
			dx[k]=50;
}
}





for(;i<number;i++)
{
f=0;
for(j=0;j<m_yk;j++)
if(xl[i]==nc[j])
{
	tttwz[tt1]=j;
	tt1++;	
	f=1;
	k=j;
	break;
}
if(f==0)
{
max=0;
	for(p=0;p<m_yk;p++)
		if(dx[max]<dx[p])
			max=p;
			tttwz[tt1]=max;
	tt1++;
	ttx[tt]=nc[max];
nc[max]=xl[i];

for(q=i+1;q<number;q++)
		if(xl[i]==xl[q])
		{
			dx[max]=q;
			break;
		}
		if(q==number)
			dx[max]=50;
	
	tt++;
	qy++;
}
else
{
for(q=i+1;q<number;q++)
		if(xl[i]==xl[q])
		{
			dx[k]=q;
			break;
		}
		if(q==number)
			dx[k]=50;
}

/*
m_d="";
for(p=0;p<m_yk;p++)
{
m_d+="  ";
if(dx[p]>=10)
{
m_d+=dx[p]/10+48;
m_d+=dx[p]%10+48;
}
else
m_d+=48+dx[p];
}*/
UpdateData(false);

}
m_q=qy;
m_tao="";
for(i=0;i<tt;i++)
{
	m_tao+="  ";
if(ttx[i]>=10)
{
m_tao+=48+ttx[i]/10;
m_tao+=48+ttx[i]%10;
}
else
m_tao+=48+ttx[i];
}
m_z=tt;
/*	
 m_zh="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
	m_ksb="不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
  
m_bk= "不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出"; 
    m_bz="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
*/
m_bk=m_ksb;
m_bz=m_zh;

UpdateData(false);
optq=m_q;
optz=m_z;
}

void CXsf::OnButton6() 
{
	// TODO: Add your control notification handler code here
	ncj=0;
jsq=0;
	m_tao="";
	m_bk="";
m_bz="";

m_ADD=0;
m_bk="";
m_bz="";
m_ksb="";
m_q=0;
m_tao="";
m_xl="";
m_yk=0;
m_z=0;
m_zh="";
fifoq=0;
fifoz=0;
lruq=0;
lruz=0;
optq=0;
optz=0;
for(int i=0;i<50;i++)
{
	xl[i]=0;
	tttwz[i]=0;
	ttt[i]=0;
	for(int j=0;j<10;j++)
		nnc[i][j]=0;
}
	number=0;
	whichj=0;
UpdateData(false);	
}

void CXsf::OnButton8() 
{
	// TODO: Add your control notification handler code here
	jsq=0;
	SetTimer(1, 1500, NULL);
	m_bz="";
	for(int i=0;i<number;i++)
	{
		m_bz+="  ";
	
	m_bz+=tttwz[i]+48;
	}
	UpdateData(false);
	
}

void CXsf::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default


	m_kk1.SetReadOnly(false);
	m_kk2.SetReadOnly(false);
	m_kk3.SetReadOnly(false);
	m_kk4.SetReadOnly(false);
	m_kk5.SetReadOnly(false);
	if(whichj!=1)
{
	if(jsq>=number)
KillTimer(1);
	else if(number-jsq>=m_yk)
	{
	
	for(int i=0;i<m_yk;i++)
		{
			ttt[tttwz[i+jsq]]=xl[i+jsq];
		}

	

}
if(m_yk==3)
{
		m_k1=ttt[0];
	m_k2=ttt[1];
		m_k3=ttt[2];
	
	m_kk4.SetReadOnly(true);
		m_kk5.SetReadOnly(true);
			
}
if(m_yk==4)
{
		m_k4=ttt[3];
			//m_k5=ttt[4];
				m_kk5.SetReadOnly(true);
		
}
if(m_yk==5)
{
		m_k5=ttt[4];
}
   UpdateData(false);

 jsq++;

}
  


else if(whichj==1)
{
	if(ncj>=number)
KillTimer(1);
	

if(m_yk==3)
{
		m_k1=nnc[ncj][0];
		m_k2=nnc[ncj][1];
		m_k3=nnc[ncj][2];
	
	
	m_kk4.SetReadOnly(true);
		m_kk5.SetReadOnly(true);
			
}
if(m_yk==4)
{
		m_k4=nnc[ncj][3];
			//m_k5=ttt[4];
				m_kk5.SetReadOnly(true);
		
}
if(m_yk==5)
{
		m_k5=nnc[ncj][4];
}
   UpdateData(false);

 ncj++;

}

	
	CDialog::OnTimer(nIDEvent);
}

void CXsf::OnButton5() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
m_bk= "物理块数为";
m_bk+=m_yk+48;
m_bk+= "的缺页次数为";
	if(m_q<10)
	m_bk+=m_q+48;
	else
	{
m_bk+=m_q/10+48;
m_bk+=m_q%10+48;
	}
m_bk+="\r\n的置换次数是";
	if(m_z<10)
	m_bk+=m_z+48;
	else
	{
m_bk+=m_z/10+48;
m_bk+=m_z%10+48;
	}
	m_bk+= "\r\n不同的物理块数,一般是物理块越多缺页次数\r\n和页面置换次数越多,因为它要进行\r\n频繁的换入换出"; 
    
	
	m_bz="";
	m_bz+="\r\nfifo的缺页次数是";
	if(fifoq<10)
	m_bz+=fifoq+48;
	else
	{
m_bz+=fifoq/10+48;
m_bz+=fifoq%10+48;
	}
m_bz+="\r\nfifo的置换次数是";
	if(fifoz<10)
	m_bz+=fifoz+48;
	else
	{
m_bz+=fifoz/10+48;
m_bz+=fifoz%10+48;
	}

		m_bz+="\r\nlru的缺页次数是";
		if(lruq<10)
	m_bz+=lruq+48;
	else
	{
m_bz+=lruq/10+48;
m_bz+=lruq%10+48;
	}
	m_bz+="\r\nlru的置换次数是";
		if(lruz<10)
	m_bz+=lruz+48;
	else
	{
m_bz+=lruz/10+48;
m_bz+=lruz%10+48;
	}
		m_bz+="\r\nopt缺页的次数是";
		if(optq<10)
	m_bz+=optq+48;
	else
	{
m_bz+=optq/10+48;
m_bz+=optq%10+48;
	}
	m_bz+="\r\nopt置换的次数是";
		if(optz<10)
	m_bz+=optz+48;
	else
	{
m_bz+=optz/10+48;
m_bz+=optz%10+48;
	}

	m_bz+="\r\n不同的置换算法OPT的缺页次数和页面置换次数\r\n最少,因为它是理想的方式,FIFO的最多,\r\n因为他没有考虑程序运行的特点\r\n但有时候也会有例外,但只可能在FIFO中才有例外";
UpdateData(false);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -