/// <summary> /// Constructor for process Scheduler /// </summary> /// <param name="flags"> the flags to use to create this scheduler</param> public Scheduler(SchedulerFlags flags) { readyQueue = flags.readyQueue ?? new Queue <SimulatorProcess>(); waitingQueue = flags.waitingQueue ?? new Queue <SimulatorProcess>(); runningProcess = flags.runningProcess; schedulingPolicy = flags.schedulingPolicies; RR_TimeSlice = flags.RR_TimeSlice; timeSliceUnit = flags.TimeSliceUnit; defaultScheduler = flags.defaultScheduler; RR_Priority_Policy = flags.RR_Priority_Policy; RR_Type = flags.RR_Type; usingSingleCPU = flags.usingSingleCPU; allowCPUAffinity = flags.allowCPUAffinity; runningWithNoProcesses = flags.runningWithNoProcesses; cpuClockSpeed = flags.cpuClockSpeed; suspended = false; issuedLotteryTickets = flags.issuedLotteryTickets; drawnLotteryTickets = flags.drawnLotteryTickets; core = flags.core; CollectionChanged += OnCollectionChanged; CreateBackgroundWorker(); //BindingOperations.EnableCollectionSynchronization(readyQueue,thisLock); }
/// <summary> /// Constructor for OS Core that takes flags which control OS behaviour /// </summary> /// <param name="flags"> the flags to be passed to this operating system</param> public OSCore(OSFlags flags) { schedulingPolicy = flags.schedulingPolicy; RR_Time_Slice = flags.RR_Time_Slice; RR_Time_Slice_Unit = flags.RR_Time_Slice_Unit; priorityPolicy = flags.priorityPolicy; roundRobinType = flags.roundRobinType; useDefaultScheduler = flags.useDefaultScheduler; useSingleCPU = flags.useSingleCPU; allowCPUAffinity = flags.allowCPUAffinity; runWithNoProcesses = flags.runWithNoprocesses; CPUClockSpeed = flags.CPUClockSpeed; suspendOnStateChange_Ready = flags.suspendOnStateChange_Ready; suspendOnPreEmption = flags.suspendOnPreEmption; suspendOnStateChange_Running = flags.suspendOnStateChange_Running; suspendOnStateChange_Waiting = flags.suspendOnStateChange_Waiting; forceKill = flags.forceKill; faultKill = flags.faultKill; osState = flags.osState; scheduler = flags.scheduler; readyQueue = new Queue <SimulatorProcess>(); waitingQueue = new Queue <SimulatorProcess>(); CollectionChanged += OnCollectionChanged; }