这是我做的一个操作系统 的进程调度的算法模拟。未完成,在修改中。附件既是图片,改扩展名为.rar.
fcfs
using System;
namespace TestFIFO.classes
{
public class FIFO:IScheduling
{
private ProcInfo[] pis;
public ProcInfo[] processParameters
{ set{ pis=value;} }
public void Scheduling()//模拟调度过程,计算实验结果
{
//请输入FIFO调度算法的实现代码
float currentTime = pis [0].arriveTime ;//标识当前时间
int index = -1;//标识当前将被调度的进程的索引号
for (int finishedNum = 0; finishedNum < pis.Length; finishedNum++)
{ //找出当前未被执行、到达时间最早的进程
float earlyArriveTime = 9999;
for (int i = 0; i < pis.Length; i++)
if (pis[i].executeBegin == -1 && pis[i].arriveTime < earlyArriveTime)
{ index = i; earlyArriveTime = pis[i].arriveTime; }
//调度被选中的进程index,其开始时间是:当前时间与其到达时间的较大者
pis[index].executeBegin = currentTime > pis[index].arriveTime ? currentTime : pis[index].arriveTime;
currentTime += pis[index].serveTime;
pis[index].finished = currentTime;
}
}
}
}
sjf
using System;
namespace TestFIFO.classes
{
public class SPF : IScheduling
{
private ProcInfo[] pis;
public ProcInfo[] processParameters
{
set { pis = value; }
}
public void Scheduling()
{
//请输入SPF调度算法的实现代码
float currentTime = 0; //pis[0].arriveTime ;//标识当前时间
int index = -1;//标识当前将被调度的进程的索引号
for (int finishedNum = 0; finishedNum < pis.Length; finishedNum++)
{ //找出当前未被执行、到达时间最早的进程
float earlyArriveTime = 9999;
float earlyServeTime = 9999;
for (int i = 0; i < pis.Length; i++)
{
if (pis[i].executeBegin == -1 && pis[i].serveTime <earlyServeTime )
{
index = i; //earlyArriveTime = pis[i].arriveTime;
earlyServeTime = pis[i].serveTime;
// pis[index].executeBegin = pis[i].arriveTime;
}//
// currentTime > pis[index].arriveTime ? currentTime : pis[index].arriveTime;
}
// pis[index].executeBegin = currentTime > pis[index].arriveTime ? currentTime : pis[index].arriveTime;
/* if (pis[i].executeBegin == -1 && pis[i].arriveTime < earlyArriveTime)
{ index = i; earlyArriveTime = pis[i].arriveTime; }*/
//调度被选中的进程index,其开始时间是:当前时间与其到达时间的较大者
// float currentTime = earlyServeTime ;
pis[index].executeBegin = currentTime > pis[index].arriveTime ? currentTime : pis[index].arriveTime;
currentTime += pis[index].serveTime;
pis[index].finished = currentTime;
}
}
}
}