- if (s > u.u_vm.vm_maxrss)
- u.u_vm.vm_maxrss = s;
- if ((u.u_vm.vm_utime+u.u_vm.vm_stime+1)/HZ > u.u_limit[LIM_CPU]) {
- psignal(u.u_procp, SIGXCPU);
- if (u.u_limit[LIM_CPU] < INFINITY - 5)
- u.u_limit[LIM_CPU] += 5;
+ if (s > u.u_ru.ru_maxrss)
+ u.u_ru.ru_maxrss = s;
+ }
+
+ /*
+ * We adjust the priority of the current process.
+ * The priority of a process gets worse as it accumulates
+ * CPU time. The cpu usage estimator (p_cpu) is increased here
+ * and the formula for computing priorities (in kern_synch.c)
+ * will compute a different value each time the p_cpu increases
+ * by 4. The cpu usage estimator ramps up quite quickly when
+ * the process is running (linearly), and decays away exponentially,
+ * at a rate which is proportionally slower when the system is
+ * busy. The basic principal is that the system will 90% forget
+ * that a process used a lot of CPU time in 5*loadav seconds.
+ * This causes the system to favor processes which haven't run
+ * much recently, and to round-robin among other processes.
+ */
+ if (!noproc) {
+ p->p_cpticks++;
+ if (++p->p_cpu == 0)
+ p->p_cpu--;
+ if ((p->p_cpu&3) == 0) {
+ (void) setpri(p);
+ if (p->p_pri >= PUSER)
+ p->p_pri = p->p_usrpri;
+ }
+ }
+
+ /*
+ * If the alternate clock has not made itself known then
+ * we must gather the statistics.
+ */
+ if (phz == 0)
+ gatherstats(pc, ps);
+
+ /*
+ * Increment the time-of-day, and schedule
+ * processing of the callouts at a very low cpu priority,
+ * so we don't keep the relatively high clock interrupt
+ * priority any longer than necessary.
+ */
+#ifdef ADJTIME
+ if (adjtimedelta == 0)
+ bumptime(&time, tick);
+ else {
+ if (adjtimedelta < 0) {
+ bumptime(&time, tick-ADJ_TICK);
+ adjtimedelta++;
+ } else {
+ bumptime(&time, tick+ADJ_TICK);
+ adjtimedelta--;
+ }
+ }
+#else
+ if (timedelta == 0)
+ BUMPTIME(&time, tick)
+ else {
+ register delta;
+
+ if (timedelta < 0) {
+ delta = tick - tickdelta;
+ timedelta += tickdelta;
+ } else {
+ delta = tick + tickdelta;
+ timedelta -= tickdelta;