页面置换算法实验报告 下载本文

内容发布更新时间 : 2024/11/15 18:19:53星期一 下面是文章的全部内容请认真阅读。

6.程序设计

struct Pro //内存页的结构体 {

int num; //记录页面号

int time; //页面从未被利用的时间 };

#define M 320 //定义指令条数

Pro P[M]; //产生的随机指令数组

void Input() //产生随机数 { int s; //随机数 int i;

srand(time(0)); s = rand()%M; //cout<<\随机产生指令流------------\\n\ for (i=0; i

p[i].num=s; //任选一指令访问点m p[i+1].num=p[i].num+1; //顺序执行一条指令

p[i+2].num=(int)((float)p[i].num*(rand()/(RAND_MAX+1.0))); //执行前地址指令m' p[i+3].num=p[i+2].num+1; //顺序执行一条指令 s=(int)((float)(319-p[i+2].num)*(rand()/(RAND_MAX+1.0))) +

p[i+2].num;

} for(i=0;i

}

int Search(int e,Pro*page1,int N) //查找内存中是否存在要调入的页面 { int t; Pro*page=new Pro[N]; page=page1; for(int i=0;i

6

} return -1; } int Max(Pro*page1,int N) //查找最久最久未被使用的页面 { Pro*page=new Pro[N]; page=page1; int e=page[0].time,i=0; while(i

}

int Compfu(Pro*page1,int i,int t,Pro p[M]) //找到最久不使用的页面 { Pro*page=new Pro[N]; page=page1; int count=0; for(int j=i;j

7.测试结果

选中算法,输入内存数点击计算

7

8

点击命中率按钮

点击退出按钮

8.结果分析

理论上,四种替换算法的命中率由高到底排列应该是OPT>LRU>CLOCK>FIFO。实际上,

在内存页面数较少(4~5页面)时,3种算法的命中率差别不大,可是50%左右。在内存页面为7~25个页面之间时,3种算法的访内命中率大致在52%至87%之间变化。在内存页面为

9

25~32个页面时,由于用户进程的所有指令基本上都已装入内存,从而命中率已较大。从而算法之间的差别不大。

9.程序代码

// 页面置换算法模拟设计Dlg.cpp : implementation file #include \

#include \页面置换算法模拟设计.h\#include \页面置换算法模拟设计Dlg.h\#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

///////////////////////////////////////////////////////////////////////////// // CMyDlg dialog

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg::IDD, pParent) {

//{{AFX_DATA_INIT(CMyDlg) m_iFifo = 0; N = 0; MZL = 0.0;

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }

void CMyDlg::DoDataExchange(CDataExchange* pDX) {

CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDlg)

DDX_Control(pDX, IDC_EDIT4, m_suiji2); DDX_Control(pDX, IDC_EDIT5, m_yemian); DDX_Control(pDX, IDC_EDIT3, m_suiji); DDX_Radio(pDX, IDC_RADIO1, m_iFifo); DDX_Text(pDX, IDC_EDIT1, N); DDX_Text(pDX, IDC_EDIT2, MZL); //}}AFX_DATA_MAP }

10