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

内容发布更新时间 : 2024/6/25 6:33:04星期一 下面是文章的全部内容请认真阅读。

(3)选择页面置换算法,按“置换结果”按钮,相应的结果如下

(4)在五种页面置换算法都得到结果时,才能进行分析,若如上只得到了两种置换结果时,按“性能分析”按钮,会有下面相应的结果显示

(5)在五种算法都得到置换结果时,按“性能分析”按钮,其结果如下

六、程序清单

(1)OPT页面置换算法

private void OPT_button1_Click(object sender, EventArgs e) {

//没有输入数据之前不能进行页面置换 if (page.Length == 0 || strsize.Length == 0)

MessageBox.Show(\输入得页面序列或物理块数不能为空\, \提示\, MessageBoxButtons.OK); else {

//初始化,设置第一个数据

int i, j, u, losecount, changecount = 0;

for (i = 0; i < size; i++) {

X[i].Num = -1; X[i].Timer = 0; }

X[0].Num = page[0]; GetTime(0, 0); losecount = 1;

OPT_label.Text = \ + (X[0].Num - 48).ToString() + \; //循环,具体的算法

for (i = 1; i < page.Length; i++) {

u = 0;

//若内存中存在该页面,进行如下计算 for (j = 0; j < size; j++) {

if (X[j].Num == page[i]) {

GetTime(i, j); u = 1; break; } }

//若内存中没有足够的兑换空间且不存在该页面,进行如下置换 if (u != 1 && X[size - 1].Num != -1) {

j = GetMaxTime(); X[j].Num = page[i]; GetTime(i, j); losecount++; changecount++; }

//若有空闲的空间,则进行如下置换 if (u != 1 && X[size - 1].Num == -1) {

for (j = 0; j < size; j++) {

if (X[j].Num == -1) {

X[j].Num = page[i]; GetTime(i, j); losecount++; break; } } }

//将数据进行输出 for (j = 0; j < size; j++) {

if (X[j].Num != -1)

OPT_label.Text += (X[j].Num - 48).ToString(); else

OPT_label.Text += \; }

OPT_label.Text += \; }

OPTlosepage = (float)losecount / (float)(page.Length);

OPT_label.Text += \访问次数是:\ + page.Length + \页面置换次数:\ + changecount + \缺页中断次数:\ + losecount + \缺页率是:\ + OPTlosepage; }

}

(2)FIFO页面置换算法

private void FIFO_button1_Click(object sender, EventArgs e) {

if (page.Length == 0 || strsize.Length == 0)

MessageBox.Show(\输入得页面序列或物理块数不能为空\, \提示\, MessageBoxButtons.OK);

else {

//初始化数据,并访问第一个页面 int i, j, u, losecount, changecount = 0; for (i = 0; i < size; i++) {

X[i].Num = -1;

X[i].Timer = 0; }

X[0].Num = page[0]; X[0].Timer = 1;

FIFO_label.Text = \ + (X[0].Num - 48).ToString() + \; losecount = 1;

//循环,按照页面序列,选择淘汰的页面并进行置换 for (i = 1; i < page.Length; i++) {

置换

置换

u = 0;//进程的内存中是否存在要访问的页面的标记

//若内存中存在要访问的页面,则设置u=1,并退出循环 for (j = 0; j < size; j++) {

if (X[j].Num == page[i]) {

u = 1; break; } }

//若内存中不存在要访问的页面,且内存中无空闲的空间则进行下列if (u != 1 && X[size - 1].Num != -1) {

j = GetMaxTime();//选择呆的时间最长的页面进行置换 X[j].Num = page[i]; X[j].Timer = 0; changecount++; losecount++; }

//若内存中不存在要访问的页面,且内存中有空闲的空间则进行下列if (u != 1 && X[size - 1].Num == -1) {

for (j = 0; j < size; j++) {

if (X[j].Num == -1) {

X[j].Num = page[i]; losecount++; break; } } }

//对内存中不为空的页面的时间加1 for (j = 0; j < size; j++)