⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 devise.cs

📁 os 课程设计不含文档 123456789
💻 CS
字号:
using System;
using System.Collections;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace os
{
    public class devise : jincheng
    {
        public int number;
        public ListView listview, blockview;
        public class devs//三个类型的设备类
        {
            public char devtype;//类型名
            public diveses[] df = new diveses[3];//A设备有三个
            public Queue waitpro = new Queue();//阻塞队列
        }
        public struct diveses
        {
            public int dtime;
            public pcb dpcb;
            public tstate dstate;
        }
        public devs[] dev = new devs[3];
        public string reason;
        public void init()//初始化设备
        {
            dev[0] = new devs();
            dev[1] = new devs();
            dev[2] = new devs();
            dev[0].devtype = 'A';
            dev[1].devtype = 'B';
            dev[2].devtype = 'C';
            for (int j = 0; j < 3; j++)
                for (int i = 0; i < 3; i++)
                    dev[j].df[i].dstate = tstate.free;
            
            dev[1].df[2].dstate = tstate.used;//这个设备永远不可用
            dev[2].df[1].dstate = tstate.used;//这个设备永远不可用
            dev[2].df[2].dstate = tstate.used;//这个设备永远不可用

        }
        public devise(ListView listview_,ListView blockview_)
        {
            listview = listview_;
            blockview = blockview_;
            init();
            //构造函数
        }
        public bool requestdev(pcb process,ListView steady)//申请设备
        {
            int i, j, k = 0;
            for (j = 0; j < 3; j++)
                if (dev[j].devtype == process.wantdev)
                    k = j;
            for (j = 0; j < 3; j++)
            {
                for (i = 0; i < 3; i++)
                {
                    if (dev[j].devtype == process.wantdev && dev[j].df[i].dstate == tstate.free)
                    {
                        dev[j].df[i].dtime = process.wanttime;
                        dev[j].df[i].dpcb = process;
                        dev[j].df[i].dstate = tstate.used;
                        if (dev[j].devtype != 'C')
                        {
                            listview.Items[3 * j + i].SubItems[2].Text = process.wanttime.ToString();
                            listview.Items[3 * j + i].SubItems[1].Text = process.name.ToString();
                        }
                        else
                        {
                            listview.Items[5].SubItems[2].Text = process.wanttime.ToString();
                            listview.Items[5].SubItems[1].Text = process.name.ToString();
                        }
                        reason = process.name + "申请设备" + process.wantdev + "成功";
                        blockview.Items.Add(reason);
                        return true;
                    }
                }
            }
            reason = process.name + "申请设备" + process.wantdev + "失败";
            blockview.Items.Add(reason);
            dev[k].waitpro.Enqueue(process);
            return false;
        }
        public pcb releasedev(ref diveses df, devs devsqueue,process pro)//释放设备a
        {
            pcb dpcb = NULL;
            df.dstate = tstate.free;
            df.dtime = 0;
            df.dpcb = NULL;
            if (devsqueue.waitpro.Count != 0)
            {
                dpcb = (pcb)devsqueue.waitpro.Dequeue();
                if (pro.BlockView.Items.Count != 0)
                    pro.BlockView.Items.RemoveAt(0);
                requestdev(dpcb, pro.ListView);
            }
            dpcb = (pcb)pro.blockqueue.dequeue(pro.blockqueue);
            
            return dpcb;
        }

        public void devtimer(Queue proc,process pro)//设备计时器
        {
            int j, i = 0;
            for (j = 0; j < 3; j++)
                for (i = 0; i < 3; i++)
                {                    
                 if (dev[j].df[i].dstate == tstate.used)
                    {
                        if ((j * 3 + i) > 5)
                        {
                            dev[j].df[i].dtime--;
                            number = int.Parse(listview.Items[5].SubItems[2].Text) - 1;
                            listview.Items[5].SubItems[2].Text = number.ToString();
                        }
                        else
                        {
                            dev[j].df[i].dtime--;
                            number = int.Parse(listview.Items[3 * j + i].SubItems[2].Text) - 1;
                            listview.Items[3 * j + i].SubItems[2].Text = number.ToString();
                        }
                    }
                    if (dev[j].df[i].dstate == tstate.used && dev[j].df[i].dtime == 0)
                    {
                        if ((j * 3 + i) > 5)
                        {
                            listview.Items[5].SubItems[1].Text = "空闲";
                            listview.Items[5].BackColor = Color.Lime;
                            proc.Enqueue((releasedev(ref dev[j].df[i], dev[j], pro)));
                        }
                        else
                        {
                            listview.Items[3 * j + i].SubItems[1].Text = "空闲";
                            listview.Items[3 * j + i].BackColor = Color.Lime;
                            proc.Enqueue((releasedev(ref dev[j].df[i], dev[j], pro)));
                        }
                    }
                    if (dev[j].df[i].dtime != 0)
                    {
                        if ((j * 3 + i) > 5)
                        {
                            listview.Items[5].SubItems[1].Text = dev[j].df[i].dpcb.name;
                            listview.Items[5].BackColor = Color.Fuchsia;
                        }
                        else
                        {
                            listview.Items[3 * j + i].SubItems[1].Text = dev[j].df[i].dpcb.name;
                            listview.Items[3 * j + i].BackColor = Color.Fuchsia;
                        }
                    }
                }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -