Exemple #1
0
        /// <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();
            }
        }
Exemple #2
0
        /// <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();
        }