-
页面置换算法包括先进先出、最佳、最近最久未使用和最久未使用等策略
资源介绍
页面置换算法课设
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 = "FIFO\n" + (X[0].Num - 48).ToString() + "\n";
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++)
{
if (X[j].Num != -1)
X[j].Timer++;
}
//输出数据
for (j = 0; j < size; j++)
{
if (X[j].Num != -1)
FIFO_label.Text += (X[j].Num - 48).ToString();
else
FIFO_label.Text += " ";
}
FIFO_label.Text += "\n";
}
FIFOlosepage = (float)losecount / (float)(page.Length);//缺页率
FIFO_label.Text += "访问次数是:" + page.Length + "\n页面置换次数:" + changecount + "\n缺页中断次数:" + losecount + "\n缺页率是:" + FIFOlosepage;
}
}
(3)LRU置换算法
private void LRU_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;
losecount = 1;
LRU_label.Text = "LRU\n" + (X[0].Num - 48).ToString() + "\n";
//循环,按照页面序列依次访问页面,并输出访问结果
for (i = 1; i < page.Length; i++)
{
u = 0;
//如果内存中存在要访问的页面,则置Timer为0,u为1
for (j = 0; j < size; j++)
{
- 上一篇: LRU 页面置换算法 最近最久未使用 源代码 c/c++
- 下一篇: 操作系统进程与存储管理的模拟