(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++)