C#窗体模拟三种页面置换算法(OPT,FIFO,LRU)

本文介绍了如何使用C#模拟最佳页面置换算法(OPT)、先进先出页面置换算法(FIFO)和最近最久未使用页面置换算法(LRU)。通过设计内存工作区,模拟页面访问过程,记录缺页情况并计算缺页率。文章详细阐述了模拟思路、实现方法,并展示了每种算法的运行结果。
摘要由CSDN通过智能技术生成

模拟内容

设计一个内存工作区,并使用下述算法来模拟实现页面的置换:
1、最佳页面置换算法(OPT)
2、先进先出页面置换算法(FIFO)
3、最近最久未使用页面置换算法(LRU)
模拟出对于一个进程的各个页面访问过程中,内存工作区的存储情况(包括页面的调入和调出情况),并记录缺页情况,最后计算显示缺页率。

模拟思路

1、通过随机数(也可以是固定的页面引用序列)产生一个指定范围内的页面号引用串(页号的最大值可以是动态的,如7;页面号引用串的数目也可以是动态,如20),如
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1。
2、给定为进程分配的物理块数,如3块。
3、在进程运行过程中,若其要访问的页面不在内存中,则需要把它调入内存,当内存没有空间时,为保证进程能正常工作,系统必须从内存中调出一页程序或数据送到磁盘的对换区中。
4、采用最佳页面置换算法(OPT)模拟出对于一个进程的各个页面访问过程中,内存工作区的存储情况(包括页面的调入和调出情况),并记录缺页情况,最后计算显示缺页率。
5、采用先进先出页面置换算法(FIFO)模拟出对于一个进程的各个页面访问过程中,内存工作区的存储情况(包括页面的调入和调出情况),并记录缺页情况,最后计算显示缺页率。
6、采用最近最久未使用页面置换算法(LRU)模拟出对于一个进程的各个页面访问过程中,内存工作区的存储情况(包括页面的调入和调出情况),并记录缺页情况,最后计算显示缺页率。

实现方法

编程实现

老规矩,先初始化一些全局变量,包括固定页面引用序列(注:此处也可以随机产生序列),三个物理块对应的数组,统计缺页次数的变量初始次数为3(初始的三个物理块为空),线程,用户输入的时间片长度等。

  		public static int[] arr = {
    7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1 };
        public static int[] arr1 = new int[3];//物理块内存
        public static int h = 3;//缺页次数
        Thread t1;
        int time;//时间片长度

初始化arr1数组,将序列的前三个页面转载进内存块,调用load函数修改指定物理块的颜色并维持用户指定时间片长度的时间并将对应的装载信息写入到textbox中。

public void updatearr1() {
   
    for (int i = 0; i < 3; i++) {
   
        arr1[i] = arr[i];
        this.tbdanqian.Text = arr[i].ToString();
        load(i);
    }
}

然后编写一些函数以简化页面置换算法的代码。
load函数:将前三个页面装载入内存,修改对应的内存块的颜色维持一定的时间后再恢复原来的颜色并把页面装载信息加载到textbox中。

public void load(int i) {
   
    if (i == 0)
    {
   
        Thread.Sleep(time);
        this.tb0.Text = arr1[i].ToString();
        this.tb0.BackColor = Color.Yellow;
        Thread.Sleep(time);
        this.tb0.BackColor = Color.White;
        this.tbnews.AppendText("页块" + i + " # 被装载\r\n");
    }
    else if (i == 1)
    {
   
        Thread.Sleep(time);
        this.tb1.Text = arr1[i].ToString();
        this.tb1.BackColor = Color.Yellow;
        Thread.Sleep(time);
        this.tb1.BackColor = Color.White;
        this.tbnews.AppendText("页块" + i + " # 被装载\r\n");
    }
    else
    {
   
        Thread.Sleep(time);
        this.tb2.Text = arr1[i].ToString();
        this.tb2.BackColor = Color.Yellow;
        Thread.Sleep(time);
        this.tb2.BackColor = Color.White;
        this.tbnews.AppendText("页块" + i + " # 被装载\r\n");
    }
}

函数功能: 判断当前页是否缺页

   public static bool isCh
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LongTermism

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值