C#之FIFO算法实现页面置换算法
程序员文章站
2022-07-12 17:15:27
...
实现原理:淘汰最先进入内存的ye页面,即选择页面在内存中停留时间最长的页面调出内存!
- 本程序使用到了两个数组:一个数组用于初始化存放内存外页面的序号,存放的页面序号是和网上大多数例子序号是一样的其实也可以随机生成,不过不影响:代码如下;
int[] arr = { 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1,7,0,1 };
- 第二个数组是模拟内存存放最先进入内存的三个序号的,代码如下:
int[] arr1=new int[3];
- 下面我献上全部的代码了,写的代码可能有点冗余!还请多多指出!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Exam_os
{
/// <summary>
/// 采用先进先出的算法来实现页面置换
/// </summary>
class Program
{
static void Main(string[] args)
{
Console.WriteLine(" 采用先进先出FIFO算法实现页面置换算法: ");
int k = 0;
int y = 0;
int x = 0;
int[] arr = { 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1,7,0,1 };
float f = arr.Length-2;
int[] arr1=new int[3];
for (int i=0;i<3;i++)
{
arr1[i] = arr[i];
}
Console.WriteLine(" 系统存在页面的序号如下: ");
for (int i = 0; i <arr.Length; i++)
{
Console.Write(arr[i]);
Console.Write(" ");
}
Console.WriteLine();
Console.WriteLine(" 首先进入内存的三个页面序号是: ");
for (int i = 0; i < 3; i++)
{
Console.Write(arr1[i]);
Console.Write(" ");
}
Console.WriteLine();
for (int j=3;j<arr.Length;j++)
{
Console.WriteLine();
Console.Write("页面序号:"+arr[j]+"开始访问内存");
Console.WriteLine();
for (int i = 0; i < 3; i++)
{
if (arr[j] == arr1[i])
{
Console.Write(" ........内存中已经存在页面序号........ ");
Console.WriteLine();
break;
}
y++;
}
if (y <=2)
{
}
else
{
Console.WriteLine(" 页面缺失,调出页面后内存外页面序号为: ");
x++;
int temp;
temp = arr[j];
arr[j] = arr1[k];
arr1[k] = temp;
k++;
if (k >= 3)
{
k = 0;
}
for (int i = 3; i < arr.Length; i++)
{
Console.Write(" ");
Console.Write(arr[i]);
}
Console.WriteLine();
Console.WriteLine("内存中的页面***为:");
for (int i = 0; i < 3; i++)
{
Console.Write(" ");
Console.Write(arr1[i]);
}
}
y = 0;
}
Console.WriteLine();
f = ((f - x) / f) * 100;
Console.WriteLine(".......页面访问缺页次数为........"+x);
Console.WriteLine();
Console.WriteLine(".......页面缺失率为:........."+f+"%");
Console.ReadKey();
}
}
}
- 下面是本程序的运行界面图,由于图片过长,所以分两部分截图:
-
希望能帮助到你哦!
上一篇: 页面置换FIFO与LRU的实现
下一篇: adb logcat 查看日志命令行用法