Example #1
0
        // non-preemptive
        public static Sched ShortestJobFirst(List <Process> ps)
        {
            Comparison <Process> cmp;

            ps = ps.OrderBy(p => Tuple.Create(p.Arrival, p.Burst)).ToList();
            var sched = new Sched();
            var t     = 0;

            foreach (var p in ps)
            {
                sched.Add(Tuple.Create(p.Burst, p));
                t += p.Burst;
            }
            return(sched);
        }
Example #2
0
        private int drawGantt(Graphics g, string name, Sched sched, int yOffset = 0)
        {
            var pwidth  = panelGantt.Width;
            var pheight = panelGantt.Height;

            var total = sched.Aggregate(0, (t, pair) => t + pair.Item1);

            total = total == 0 ? 1 : total;

            var x         = 0;
            var totalLen  = 0;
            var titleRect = new Rectangle(0, yOffset, pwidth, 20);

            drawStringRect(g, titleRect, name, Brushes.White);

            var digitRect = new Rectangle(0, 0, 0, 0);

            foreach (var tup in sched)
            {
                var len  = tup.Item1;
                var proc = tup.Item2;
                var w    = (int)(((float)len / total) * pwidth * 0.99);

                var rect = new Rectangle(x, titleRect.Bottom, w, 100);
                digitRect = new Rectangle(rect.Right - 35, rect.Bottom, 50, 20);

                g.FillRectangle(Brushes.Orange, rect);
                g.DrawRectangle(Pens.Black, rect);

                drawStringRect(g, rect, proc.Name, Brushes.Green);
                drawStringRect(g, digitRect, len + totalLen + "", Brushes.Yellow);

                x        += w;
                totalLen += len;
            }
            return(digitRect.Bottom);
        }