| plan 9 kernel history: overview | file list | diff list |
1991/0420/port/proc.c (diff list | history)
| 1991/0318/sys/src/9/port/proc.c:18,30 – 1991/0420/sys/src/9/port/proc.c:18,32 (short | long | prev | next) | ||
|
Split runq into runhiq, runloq.
Spell sleaze correctly.
rsc Mon Mar 20 17:14:09 2006 | ||
| 1990/0227 | Proc *free; }procalloc; | |
| 1991/0420 | typedef struct | |
| 1990/0227 | { Lock; Proc *head; Proc *tail; | |
| 1991/0420 | }Schedq; | |
| 1990/0227 | ||
| 1991/0420 | Schedq runhiq, runloq; | |
| 1990/0227 | char *statename[]={ /* BUG: generate automatically */ "Dead", "Moribund", | |
| 1991/0318/sys/src/9/port/proc.c:75,81 – 1991/0420/sys/src/9/port/proc.c:77,83 | ||
| 1990/0227 | void sched(void) { | |
| 1990/1211 |
| |
| 1991/0420 | uchar procstate[64]; /* sleaze for portability */ | |
| 1990/0227 | Proc *p; ulong tlbvirt, tlbphys; | |
| 1990/0731 | void (*f)(ulong, ulong); | |
| 1991/0318/sys/src/9/port/proc.c:104,127 – 1991/0420/sys/src/9/port/proc.c:106,136 | ||
| 1990/1227 | int anyready(void) { | |
| 1991/0420 | return runloq.head != 0 || runhiq.head != 0; | |
| 1990/1227 | } | |
| 1990/0227 | void ready(Proc *p) { | |
| 1991/0420 | Schedq *rq; | |
| 1990/0227 | int s; s = splhi(); | |
| 1991/0420 | if(p->state == Running) rq = &runloq; else rq = &runhiq; lock(&runhiq); | |
| 1990/0227 | p->rnext = 0; | |
| 1991/0420 | if(rq->tail) rq->tail->rnext = p; | |
| 1990/0227 | else | |
| 1991/0420 | rq->head = p; rq->tail = p; | |
| 1990/0227 | p->state = Ready; | |
| 1991/0420 | unlock(&runhiq); | |
| 1990/0227 | splx(s); } | |
| 1991/0318/sys/src/9/port/proc.c:131,157 – 1991/0420/sys/src/9/port/proc.c:140,172 | ||
| 1990/0227 | Proc* runproc(void) { | |
| 1991/0420 | Schedq *rq; | |
| 1990/0227 | Proc *p; int i; loop: | |
| 1991/0420 | while(runhiq.head==0 && runloq.head==0) | |
| 1990/1211 | for(i=0; i<10; i++) /* keep out of shared memory for a while */ | |
| 1990/0227 | ; splhi(); | |
| 1991/0420 | lock(&runhiq); if(runhiq.head) rq = &runhiq; else rq = &runloq; p = rq->head; | |
| 1990/0227 | if(p==0 || p->mach){ /* p->mach==0 only when process state is saved */ | |
| 1991/0420 | unlock(&runhiq); | |
| 1990/0227 | spllo(); goto loop; } if(p->rnext == 0) | |
| 1991/0420 | rq->tail = 0; rq->head = p->rnext; | |
| 1990/0227 | if(p->state != Ready) print("runproc %s %d %s\n", p->text, p->pid, statename[p->state]); | |
| 1991/0420 | unlock(&runhiq); | |
| 1990/0227 | p->state = Scheding; spllo(); return p; | |