/// <summary> /// Adds a pcb to the system when using round robin scheduling /// </summary> /// <param name="pcb"></param> public void AddPcbRoundRobin(ProcessControlBlock pcb) { var canAdd = this.Memory.CanAllocate(pcb.MemoryRequirement); //add PCB to ready queue if (canAdd) { pcb.State = State.NEW; this.ReadyQueue.EnQueue(pcb); this.Memory.AssignMemory(pcb.MemoryRequirement); } else { // add PCB to waiting queue pcb.State = State.NEW; WaitingQueue.EnQueue(pcb); this._os.Gui.UpdateWaitingQueueLog(); } }
/// <summary> /// Adds pcb to the appropriate device queue. If a queue doesnt exist for it create one. /// </summary> /// <param name="ioDevice"></param> /// <param name="pcb"></param> public void ScheduleIo(string ioDevice, ProcessControlBlock pcb) { //log the io request pcb.IoRequestsPerformed++; //add the io to its queue if it exists, else create a new queue and it if (_ioDictionary.ContainsKey(ioDevice)) { _ioDictionary[ioDevice].EnQueue(pcb); } else { ExecutionQueue newQ = new ExecutionQueue(); newQ.EnQueue(pcb); _ioDictionary.Add(ioDevice, newQ); } this._os.Gui.UpdateIoQueueLog(); }