- /*
- * Drain silos.
- */
-#if NDH > 0
- s = spl5(); dhtimer(); splx(s);
-#endif
-#if NDZ > 0
- s = spl5(); dztimer(); splx(s);
-#endif
-
- /*
- * If idling and processes are waiting to swap in,
- * check on them.
- */
- if (noproc && runin) {
- runin = 0;
- wakeup((caddr_t)&runin);
- }
-
- /*
- * Run paging daemon and reschedule every 1/4 sec.
- */
- if (lbolt % (hz/4) == 0) {
- vmpago();
- runrun++;
- aston();
- }
-
- /*
- * Lightning bolt every second:
- * sleep timeouts
- * process priority recomputation
- * process %cpu averaging
- * virtual memory metering
- * kick swapper if processes want in
- */
- if (lbolt >= hz) {
- if (BASEPRI(ps))
- return;
- lbolt -= hz;
- ++time;
- wakeup((caddr_t)&lbolt);
- for(pp = proc; pp < procNPROC; pp++)
- if (pp->p_stat && pp->p_stat!=SZOMB) {
- if(pp->p_time != 127)
- pp->p_time++;
- if(pp->p_clktim)
- if(--pp->p_clktim == 0)
- if (pp->p_flag & STIMO) {
- s = spl6();
- switch (pp->p_stat) {
-
- case SSLEEP:
- setrun(pp);
- break;
-
- case SSTOP:
- unsleep(pp);
- break;
- }
- pp->p_flag &= ~STIMO;
- splx(s);
- } else
- psignal(pp, SIGALRM);
- if(pp->p_stat==SSLEEP||pp->p_stat==SSTOP)
- if (pp->p_slptime != 127)
- pp->p_slptime++;
- if (pp->p_flag&SLOAD)
- pp->p_pctcpu = ccpu * pp->p_pctcpu +
- (1.0 - ccpu) * (pp->p_cpticks/(float)hz);
- pp->p_cpticks = 0;
- a = (pp->p_cpu & 0377)*SCHMAG + pp->p_nice - NZERO;
- if(a < 0)
- a = 0;
- if(a > 255)
- a = 255;
- pp->p_cpu = a;
- (void) setpri(pp);
- s = spl6();
- if(pp->p_pri >= PUSER) {
- if ((pp != u.u_procp || noproc) &&
- pp->p_stat == SRUN &&
- (pp->p_flag & SLOAD) &&
- pp->p_pri != pp->p_usrpri) {
- remrq(pp);
- pp->p_pri = pp->p_usrpri;
- setrq(pp);
- } else
- pp->p_pri = pp->p_usrpri;
- }