From a4ee70ffec18b568a207d42790ca734356d21dde Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sat, 17 Sep 1994 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1994-09-17 --- port/portdat.h | 2 ++ port/proc.c | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/port/portdat.h b/port/portdat.h index da6ba9ae5c3221a964c8fae81e8a756962642a07..18055d7dc223f964e64c481ed80b221ee8717162 100644 --- a/port/portdat.h +++ b/port/portdat.h @@ -585,6 +585,8 @@ struct Proc Mach *mp; /* machine this process last ran on */ ulong priority; /* priority level */ ulong basepri; /* base priority level */ + ulong rt; /* # ticks used since last blocked */ + ulong art; /* avg # ticks used since last blocked */ ulong movetime; /* last time process switched processors */ ulong readyticks; /* time process went ready */ diff --git a/port/proc.c b/port/proc.c index 444edecd3774b2de445131d923c2930ac426733f..c9d2f3f4e1b3ec87023c5d7fce2f224474a05d46 100644 --- a/port/proc.c +++ b/port/proc.c @@ -124,19 +124,24 @@ anyhigher(void) return nrdy && x >= up->priority; } +enum +{ + Squantum = (HZ+Nrq-1)/Nrq, +}; + void ready(Proc *p) { - int s; + int s, pri; Schedq *rq; s = splhi(); - if(p->state == Running){ - if(p->priority > 0) - p->priority--; - } else - p->priority = p->basepri; + if(p->state == Running) + p->rt++; + pri = p->basepri - (((p->art + p->rt)>>1)/Squantum); + if(pri < 0) + pri = 0; rq = &runq[p->priority]; lock(runq); @@ -330,6 +335,8 @@ sleep1(Rendez *r, int (*f)(void*), void *arg) dumpstack(); } up->state = Wakeme; + up->art = (up->art + up->rt)>>1; + up->rt = 0; r->p = up; unlock(r); }