plan 9 kernel history: overview | file list | diff list

1994/0729/port/proc.c (diff list | history)

1994/0728/sys/src/9/port/proc.c:108,1201994/0729/sys/src/9/port/proc.c:108,114 (short | long | prev | next)
Faster anyready.
rsc Mon Mar 20 17:58:21 2006
1994/0321    
int 
anyready(void) 
{ 
1994/0728    
	Schedq *rq; 
                 
	for(rq = runq; rq < &runq[Nrq]; rq++) 
		if(rq->head) 
			return 1; 
                 
	return 0; 
1994/0729    
	return nrdy; 
1990/1227    
} 
 
1990/0227    
void 
1994/0728/sys/src/9/port/proc.c:132,1381994/0729/sys/src/9/port/proc.c:126,131
1994/0728    
		} else 
			p->priority = 1; 
	} 
if(p->priority < 0 || p->priority >= Nrq) panic("ready"); 
	rq = &runq[p->priority]; 
1991/0420    
 
1994/0728    
	lock(runq); 
1994/0728/sys/src/9/port/proc.c:158,1891994/0729/sys/src/9/port/proc.c:151,184
1990/0227    
loop: 
1994/0728    
 
	/* 
	 *  find highest priority queue with runnable process 
1994/0729    
	 *  find a process at level 0 (programs from '/' file system), 
	 *  one that last ran on this processor (affinity), 
	 *  or one that hasn't moved in a while (load balancing). 
1994/0728    
	 */ 
1992/0603    
	spllo(); 
1994/0728    
	for(rq = runq; rq < &runq[Nrq]; rq++) 
		if(rq->head) 
			break; 
	if(rq == &runq[Nrq]) 
		goto loop; 
1990/0227    
	splhi(); 
1994/0729    
	for(;;){ 
		for(rq = runq; rq < &runq[Nrq]; rq++){ 
			if(rq->head == 0) 
				continue; 
			for(p = rq->head; p; p = p->rnext){ 
				if(rq == runq || p->mp == m ||  
				   m->ticks - p->movetime > HZ/2) 
					goto found; 
			} 
		} 
	} 
1992/0622    
 
1994/0729    
 
found: 
	splhi(); 
1994/0728    
	lock(runq); 
1991/0420    
 
1994/0728    
	/* 
	 *  affinity: look for a process last run on this processor, 
	 *	otherwise, take first in list. 
	 */ 
	l = 0; 
	for(p = rq->head; p; p = p->rnext){ 
		if(p->mp == m) 
1994/0729    
		if(rq == runq || p->mp == m || m->ticks - p->movetime > HZ/2) 
1994/0728    
			break; 
		l = p; 
	} 
	if(p == 0){ 
		l = 0; 
		p = rq->head; 
	} 
 
	/* 
	 *  p->mach==0 only when process state is saved 
1994/0728/sys/src/9/port/proc.c:205,2101994/0729/sys/src/9/port/proc.c:200,207
1994/0728    
	unlock(runq); 
1993/1212    
 
1990/0227    
	p->state = Scheding; 
1994/0729    
	if(p->mp != m) 
		p->movetime = m->ticks; 
1994/0728    
	p->mp = m; 
1990/0227    
	return p; 
} 
1994/0728/sys/src/9/port/proc.c:261,2661994/0729/sys/src/9/port/proc.c:258,264
1993/0501    
	p->procctl = 0; 
	p->notepending = 0; 
1993/1204    
	p->mp = 0; 
1994/0729    
	p->movetime = 0; 
1993/0501    
	memset(p->seg, 0, sizeof p->seg); 
	p->pid = incref(&pidalloc); 
	p->noteid = incref(¬eidalloc); 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)