Esempio n. 1
0
 public process(process Cp)
 {
     name      = Cp.name;
     arrival   = Cp.arrival;
     start     = Cp.start;
     finish    = Cp.finish;
     remaining = Cp.remaining;
 }
Esempio n. 2
0
        public static void scheduleSJF(List <process> P, bool preemptive)
        {
            Terminated = new Stack <process>();

            int elapsedTime = 0; //clock

            while (P.Count != 0)
            {
new_come:
                process running = whoCame(P, elapsedTime, preemptive);
                int enterTime = elapsedTime; // useful if the running process will be prempeted

                if (running == null)
                {
                    elapsedTime++;
                    continue;
                }

                if (running.start == -1)
                {
                    running.start = enterTime;
                }

                while (running.remaining > 0)
                {
                    running.remaining--;
                    elapsedTime++;

                    if (preemptive && running != whoCame(P, elapsedTime, preemptive))
                    {
                        // store for Gantt Chart
                        process preempted = new process(running)
                        {
                            start   = enterTime,
                            finish  = elapsedTime,
                            isClone = true
                        };
                        Terminated.Push(preempted);

                        goto new_come;
                    }
                }
                running.finish = elapsedTime;
                Terminated.Push(running); // terminate the running process
                P.Remove(running);        // remove it from ready queue
            }
        }