mirror of
https://github.com/esiur/esiur-dotnet.git
synced 2025-06-27 13:33:13 +00:00
eBook
This commit is contained in:
72
Esiur.Analysis/Scheduling/SPF.cs
Normal file
72
Esiur.Analysis/Scheduling/SPF.cs
Normal file
@ -0,0 +1,72 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Esiur.Analysis.Scheduling
|
||||
{
|
||||
public class Process
|
||||
{
|
||||
public double Burst { get; set; }
|
||||
public double Arrival { get; set; }
|
||||
public double WaitTime => StartTime - Arrival;
|
||||
public double StartTime { get; set; }
|
||||
|
||||
public int Priority { get; set; }
|
||||
|
||||
public string Title { get; set; }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{Title} - Arrival: {Arrival} Priority: {Priority} WaitTime: {WaitTime} Burst: {Burst} Start: {StartTime}";
|
||||
}
|
||||
}
|
||||
|
||||
public class SPF
|
||||
{
|
||||
|
||||
|
||||
public static void Schedule(Process[] processes)
|
||||
{
|
||||
|
||||
processes = processes.OrderBy(x => x.Burst).ToArray();
|
||||
|
||||
processes[0].StartTime = processes[0].Arrival;
|
||||
|
||||
// Calculation of Waiting Times
|
||||
for (int i = 1; i < processes.Length; i++)
|
||||
{
|
||||
if (processes[i - 1].StartTime + processes[i - 1].Burst > processes[i].Arrival)
|
||||
processes[i].StartTime = processes[i - 1].Arrival + processes[i - 1].Burst - processes[i].Arrival;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static Process[] ScheduleHybrid(Process[] processes)
|
||||
{
|
||||
|
||||
processes = processes.OrderBy(x => x.Arrival)
|
||||
.ThenBy(x => x.Priority)
|
||||
.ThenBy(x=>x.Burst)
|
||||
.ToArray();
|
||||
|
||||
processes[0].StartTime = processes[0].Arrival;
|
||||
|
||||
// Calculation of StartTime.
|
||||
// WaitTime = StartTime - ArrivalTime
|
||||
for (int i = 1; i < processes.Length; i++)
|
||||
{
|
||||
if (processes[i - 1].StartTime + processes[i - 1].Burst > processes[i].Arrival)
|
||||
processes[i].StartTime = processes[i - 1].StartTime + processes[i - 1].Burst;
|
||||
else
|
||||
processes[i].StartTime = processes[i].Arrival;
|
||||
}
|
||||
|
||||
return processes;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user