- case SSTOP:
- unsleep(pp);
- break;
- }
- pp->p_flag &= ~STIMO;
- splx(s);
- } else
- psignal(pp, SIGALRM);
- /*
- * If process is blocked, increment computed
- * time blocked. This is used in swap scheduling.
- */
- if (pp->p_stat==SSLEEP || pp->p_stat==SSTOP)
- if (pp->p_slptime != 127)
- pp->p_slptime++;
- /*
- * Update digital filter estimation of process
- * cpu utilization for loaded processes.
- */
- if (pp->p_flag&SLOAD)
- pp->p_pctcpu = ccpu * pp->p_pctcpu +
- (1.0 - ccpu) * (pp->p_cpticks/(float)hz);
- /*
- * Recompute process priority. The number p_cpu
- * is a weighted estimate of cpu time consumed.
- * A process which consumes cpu time has this
- * increase regularly. We here decrease it by
- * a fraction based on load average giving a digital
- * decay filter which damps out in about 5 seconds
- * when seconds are measured in time expanded by the
- * load average.
- *
- * If a process is niced, then the nice directly
- * affects the new priority. The final priority
- * is in the range 0 to 255, to fit in a character.
- */
- pp->p_cpticks = 0;
- a = ave((pp->p_cpu & 0377), avenrun[0]*nrscale) +
- pp->p_nice - NZERO;
- if (a < 0)
- a = 0;
- if (a > 255)
- a = 255;
- pp->p_cpu = a;
- (void) setpri(pp);
- /*
- * Now have computed new process priority
- * in p->p_usrpri. Carefully change p->p_pri.
- * A process is on a run queue associated with
- * this priority, so we must block out process
- * state changes during the transition.
- */
- 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;
- }