BSD 4_4_Lite1 release
[unix-history] / usr / src / usr.bin / w / proc_compare.c
index cca70fe..e95359c 100644 (file)
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)proc_compare.c     8.1 (Berkeley) 6/6/93";
+static char sccsid[] = "@(#)proc_compare.c     8.2 (Berkeley) 9/23/93";
 #endif /* not lint */
 
 #endif /* not lint */
 
+#include <sys/param.h>
+#include <sys/time.h>
+#include <sys/proc.h>
+
+#include "extern.h"
+
 /*
 /*
- * Returns 1 if p2 is more active than p1
+ * Returns 1 if p2 is "better" than p1
  *
  *
- * The algorithm for picking the "more active" process is thus:
+ * The algorithm for picking the "interesting" process is thus:
  *
  *
- *     1) Runnable processes are favored over anything
- *        else.  The runner with the highest cpu
- *        utilization is picked (p_cpu).  Ties are
+ *     1) Only foreground processes are eligible - implied.
+ *     2) Runnable processes are favored over anything else.  The runner
+ *        with the highest cpu utilization is picked (p_estcpu).  Ties are
  *        broken by picking the highest pid.
  *        broken by picking the highest pid.
- *     2) Next, the sleeper with the shortest sleep
- *        time is favored.  With ties, we pick out
- *        just short-term sleepers (p_pri <= PZERO).
- *        Further ties are broken by picking the highest
- *        pid.
- *
- *     NOTE - if you change this, be sure to consider making
- *        the change in the kernel too (^T in kern/tty.c).
+ *     3) The sleeper with the shortest sleep time is next.  With ties,
+ *        we pick out just "short-term" sleepers (P_SINTR == 0).
+ *     4) Further ties are broken by picking the highest pid.
  *
  *
- *     TODO - consider whether pctcpu should be used
+ * If you change this, be sure to consider making the change in the kernel
+ * too (^T in kern/tty.c).
  *
  *
+ * TODO - consider whether pctcpu should be used.
  */
 
  */
 
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/proc.h>
-
-#include "extern.h"
-
-#define isrun(p)       (((p)->p_stat == SRUN) || ((p)->p_stat == SIDL))
-
-#define        TESTAB(a, b)    ((a)<<1 | (b))
-#define        ONLYA   2
-#define        ONLYB   1
-#define        BOTH    3
+#define ISRUN(p)       (((p)->p_stat == SRUN) || ((p)->p_stat == SIDL))
+#define TESTAB(a, b)    ((a)<<1 | (b))
+#define ONLYA   2
+#define ONLYB   1
+#define BOTH    3
 
 int
 proc_compare(p1, p2)
 
 int
 proc_compare(p1, p2)
@@ -80,7 +76,7 @@ proc_compare(p1, p2)
        /*
         * see if at least one of them is runnable
         */
        /*
         * see if at least one of them is runnable
         */
-       switch (TESTAB(isrun(p1), isrun(p2))) {
+       switch (TESTAB(ISRUN(p1), ISRUN(p2))) {
        case ONLYA:
                return (0);
        case ONLYB:
        case ONLYA:
                return (0);
        case ONLYB:
@@ -89,14 +85,14 @@ proc_compare(p1, p2)
                /*
                 * tie - favor one with highest recent cpu utilization
                 */
                /*
                 * tie - favor one with highest recent cpu utilization
                 */
-               if (p2->p_cpu > p1->p_cpu)
+               if (p2->p_estcpu > p1->p_estcpu)
                        return (1);
                        return (1);
-               if (p1->p_cpu > p2->p_cpu)
+               if (p1->p_estcpu > p2->p_estcpu)
                        return (0);
                return (p2->p_pid > p1->p_pid); /* tie - return highest pid */
        }
        /*
                        return (0);
                return (p2->p_pid > p1->p_pid); /* tie - return highest pid */
        }
        /*
-        * weed out zombies
+        * weed out zombies
         */
        switch (TESTAB(p1->p_stat == SZOMB, p2->p_stat == SZOMB)) {
        case ONLYA:
         */
        switch (TESTAB(p1->p_stat == SZOMB, p2->p_stat == SZOMB)) {
        case ONLYA:
@@ -104,9 +100,9 @@ proc_compare(p1, p2)
        case ONLYB:
                return (0);
        case BOTH:
        case ONLYB:
                return (0);
        case BOTH:
-               return (p2->p_pid > p1->p_pid); /* tie - return highest pid */
+               return (p2->p_pid > p1->p_pid); /* tie - return highest pid */
        }
        }
-       /* 
+       /*
         * pick the one with the smallest sleep time
         */
        if (p2->p_slptime > p1->p_slptime)
         * pick the one with the smallest sleep time
         */
        if (p2->p_slptime > p1->p_slptime)
@@ -116,9 +112,9 @@ proc_compare(p1, p2)
        /*
         * favor one sleeping in a non-interruptible sleep
         */
        /*
         * favor one sleeping in a non-interruptible sleep
         */
-        if (p1->p_flag&SSINTR && (p2->p_flag&SSINTR) == 0)
-                return (1);
-        if (p2->p_flag&SSINTR && (p1->p_flag&SSINTR) == 0)
-                return (0);
-       return(p2->p_pid > p1->p_pid);          /* tie - return highest pid */
+       if (p1->p_flag & P_SINTR && (p2->p_flag & P_SINTR) == 0)
+               return (1);
+       if (p2->p_flag & P_SINTR && (p1->p_flag & P_SINTR) == 0)
+               return (0);
+       return (p2->p_pid > p1->p_pid);         /* tie - return highest pid */
 }
 }