the current process (still not right); curpri is always a usrpri
SCCS-vsn: sys/kern/kern_synch.c 6.3
-/* kern_synch.c 6.2 84/05/22 */
+/* kern_synch.c 6.3 84/07/31 */
#include "../machine/pte.h"
#include "../machine/pte.h"
+ register double ccpu1 = (1.0 - ccpu) / (double)hz;
register struct proc *p;
register int s, a;
register struct proc *p;
register int s, a;
if (p->p_slptime != 127)
p->p_slptime++;
if (p->p_flag&SLOAD)
if (p->p_slptime != 127)
p->p_slptime++;
if (p->p_flag&SLOAD)
- p->p_pctcpu = ccpu * p->p_pctcpu +
- (1.0 - ccpu) * (p->p_cpticks/(float)hz);
+ p->p_pctcpu = ccpu * p->p_pctcpu + ccpu1 * p->p_cpticks;
p->p_cpticks = 0;
a = ave((p->p_cpu & 0377), avenrun[0]*nrscale) +
p->p_nice - NZERO;
p->p_cpticks = 0;
a = ave((p->p_cpu & 0377), avenrun[0]*nrscale) +
p->p_nice - NZERO;
(void) setpri(p);
s = spl6(); /* prevent state changes */
if (p->p_pri >= PUSER) {
(void) setpri(p);
s = spl6(); /* prevent state changes */
if (p->p_pri >= PUSER) {
if ((p != u.u_procp || noproc) &&
p->p_stat == SRUN &&
(p->p_flag & SLOAD) &&
if ((p != u.u_procp || noproc) &&
p->p_stat == SRUN &&
(p->p_flag & SLOAD) &&
- p->p_pri != p->p_usrpri) {
+ (p->p_pri / PPQ) != (p->p_usrpri / PPQ)) {
remrq(p);
p->p_pri = p->p_usrpri;
setrq(p);
remrq(p);
p->p_pri = p->p_usrpri;
setrq(p);
u.u_ru.ru_nvcsw++;
swtch();
}
u.u_ru.ru_nvcsw++;
swtch();
}
p->p_stat = SRUN;
if (p->p_flag & SLOAD)
setrq(p);
p->p_stat = SRUN;
if (p->p_flag & SLOAD)
setrq(p);
- if (p->p_pri < curpri) {
- runrun++;
- aston();
- }
+ /*
+ * Since curpri is a usrpri,
+ * p->p_pri is always better than curpri.
+ */
+ runrun++;
+ aston();
if ((p->p_flag&SLOAD) == 0) {
if (runout != 0) {
runout = 0;
if ((p->p_flag&SLOAD) == 0) {
if (runout != 0) {
runout = 0;