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

📄 fss.cs

📁 一个页面管理系统
💻 CS
字号:
/******************************************************************************************
 * 
 * 公平共享调度模拟程序
 * 
 * 0572192
 * 薛研歆
 * 
 ******************************************************************************************/

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace FSS
{
    public partial class FSS : Form
    {
        private Int32 processNum = 1;
        private process[] processDetail = new process[100];

        public FSS()
        {
            InitializeComponent();
        }

        /******************************************************************************************
        * 
        * 添加进程按钮
        * 
        * 读取text框中的进程信息,并对相应格式信息进行检查
        * 
        ******************************************************************************************/

        private void addProcess_Click(object sender, EventArgs e)
        {
            String Name = null;
            Int32 Time = 0;
            Int32 Group = 0;
            Int32 Priority = 0;

            char b = '%';
            Int16 a = (Int16)b;
            Name = processNameText.Text;
            if (Name == "")
            {
                MessageBox.Show("请输入进程名字", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            for (Int32 i = 1; i < processNum; i++)
                 if (processDetail[i].getProcessName().Equals(Name))
                {
                    MessageBox.Show("进程名字重复", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            if (Int32.TryParse(processTimeText.Text, out Time))
            {
                Time = Int32.Parse(processTimeText.Text);
            }
            else
            {
                MessageBox.Show("请输入进程需时必须为数字", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (Int32.TryParse(processGroupText.Text, out Group))
            {
                Group = Int32.Parse(processGroupText.Text);
            }
            else
            {
                MessageBox.Show("请输入进程组别必须为数字", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (Int32.TryParse(processPriorityText.Text, out Priority))
            {
                Priority = Int32.Parse(processPriorityText.Text);
            }
            else
            {
                MessageBox.Show("请输入进程优先级必须为数字", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            //      get basic informatin from window

            processDetail[processNum] = new process();
            processDetail[processNum].setProcessName(Name);
            processDetail[processNum].setProcessGroup(Group);
            processDetail[processNum].setProcessTime(Time);
            processDetail[processNum].setTimeRemain(Time);
            processDetail[processNum].setProcessPriority(Priority);
            processDetail[processNum].setPriorityNow(Priority);
            //      add process information to list

            String Item = processDetail[processNum].getProcessName().PadLeft(7) + "   " + processDetail[processNum].getProcessTime().ToString().PadLeft(8) + "  " + processDetail[processNum].getProcessGroup().ToString().PadLeft(8) + "  " + processDetail[processNum].getProcessPriority().ToString().PadLeft(10);
            ProcessList.Items.Insert(processNum, Item);

            processNum++;
        }

        /******************************************************************************************
        * 
        * 删除进程按钮
        * 
        * 删除ListBox框中被选中的进程信息
        * 
        ******************************************************************************************/

        private void deleteProcess_Click(object sender, EventArgs e)
        {
            Int32 select = ProcessList.SelectedIndex;
            if (select == -1)
            {
                MessageBox.Show("请输选择进程", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            for (Int32 i = select; i < processNum; i++)
                processDetail[i] = processDetail[i + 1];
            processNum--;
            processDetail[processNum] = null;
            ProcessList.Items.RemoveAt(select);
        }

        /******************************************************************************************
         * 
         * 运行进程按钮
         * 
         * 模拟公平共享调度的进程运行信息,将相应内容写入ListBox中
         * 
         ******************************************************************************************/

        private void runProcess_Click(object sender, EventArgs e)
        {
            Int32 CPUTime = 0;
            Int32 TeamNum = 0;
            Boolean finish = false;
            if (processNum == 1)
            {
                MessageBox.Show("请输入进程", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            setProcess();
            RunList.Items.Clear();
            RunList.Items.Add("CPU时间   执行进程  进程组别   进程优先级");
            while (!finish)
            {
                TeamNum = getTeamNum();
                updateProcessPriority(TeamNum);
                Int32 priorityBiggestProcess = findBiggestPriority();
                if (priorityBiggestProcess == 0)
                    break;
                String outInfo = CPUTime.ToString().PadLeft(7) +"   " + processDetail[priorityBiggestProcess].getProcessName().PadLeft(7) + "   " + processDetail[priorityBiggestProcess].getProcessGroup().ToString().PadLeft(8) + "  " + processDetail[priorityBiggestProcess].getProcessPriority().ToString().PadLeft(10);
                RunList.Items.Add(outInfo);
                CPUTime++;
                updataProcessTime(priorityBiggestProcess);
            }
            RunList.Items.Add("运行结束");
        }

        /******************************************************************************************
         * 
         * 作者信息
         * 
         ******************************************************************************************/

        private void info_Click(object sender, EventArgs e)
        {
            MessageBox.Show("The Program is writen by\n0572192 XueYanxin", "作者信息", MessageBoxButtons.OK, MessageBoxIcon.Information);       
        }

        /******************************************************************************************
         * 
         * 更新进程时间
         * 
         * 在进程运行之后更新此次进程的CPUTime以及GroupTime
         * 
         ******************************************************************************************/

        private void updataProcessTime(Int32 processID)
        {
            Int32 oneSeconde = 60;
            Int32 GroupID = processDetail[processID].getProcessGroup();
            processDetail[processID].setCPUTime(processDetail[processID].getCPUTime() + oneSeconde);
            for (Int32 i = 1; i < processNum; i++)
                if (processDetail[i].getProcessGroup() == GroupID)
                    processDetail[i].setGCPUTime(processDetail[i].getGCPUTime() + oneSeconde);
            processDetail[processID].setTimeRemain(processDetail[processID].getTimeRemain() - 1);
        }

        /******************************************************************************************
         * 
         * 更新进程优先级
         * 
         * 运行进程之前,将上次运行的进程的CPUTiem,GroupTime和优先级进行更新
         * 
         ******************************************************************************************/

        private void updateProcessPriority(Int32 TeamNum)
        {
            for (Int32 i = 1; i < processNum; i++)
            {
                processDetail[i].setCPUTime(processDetail[i].getCPUTime() / 2);
                processDetail[i].setGCPUTime(processDetail[i].getGCPUTime() / 2);
                processDetail[i].setPriorityNow(processDetail[i].getProcessPriority() + processDetail[i].getCPUTime() / 2 + processDetail[i].getGCPUTime() * TeamNum / 4);
            }
        }

        /******************************************************************************************
         * 
         * 获取未完成进程的组的总数
         * 
         ******************************************************************************************/

        private Int32 getTeamNum()
        {
            Int32 result = 0;
            Int32[] team = new Int32[100];
            for (Int32 i = 1; i < processNum; i++)
                if (processDetail[i].getTimeRemain() > 0) 
                {
                     Int32 j = 0;
                     while ((j <= result) && (processDetail[i].getProcessGroup() != team[j]))
                           j++;
                     if (j > result)
                     {
                        team[j] = processDetail[i].getProcessGroup();
                        result++;
                     }
                 }
                 return result;
        }

        /******************************************************************************************
         * 
         * 寻找最高优先级进程
         * 
         ******************************************************************************************/

        private Int32 findBiggestPriority()
        {
            Int32 result = 0;
            Int32 maxPriority = Int32.MaxValue;
            for (Int32 i = 1; i < processNum; i++)
                if ((processDetail[i].getPriorityNow() < maxPriority) && (processDetail[i].getTimeRemain() > 0)) 
                {
                    result = i;
                    maxPriority = processDetail[i].getPriorityNow();
                }
            return result;
        }

        /******************************************************************************************
        * 
        * 运行初始化
        * 
        ******************************************************************************************/


        private void setProcess()
        {
            for (Int32 i = 1; i < processNum; i++)
            {
                processDetail[i].setTimeRemain(processDetail[i].getProcessTime());
                processDetail[i].setPriorityNow(processDetail[i].getProcessPriority());
                processDetail[i].setCPUTime(0);
                processDetail[i].setGCPUTime(i);
            }
        }      
    }
}

⌨️ 快捷键说明

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