~kris/9p

9hist

74c43b6ec832dc947037eb61661c82ea91815b31 — David du Colombier 32 years ago 9a7c40e
Plan 9 from Bell Labs 1993-11-23
3 files changed, 33 insertions(+), 0 deletions(-)

M port/portfns.h
M port/proc.c
M port/swap.c
M port/portfns.h => port/portfns.h +1 -0
@@ 107,6 107,7 @@ void		kbdrepeat(int);
long		keyread(char*, int, long);
long		keywrite(char*, int);
void		kickpager(void);
void		killbig(void);
int		kprint(char*, ...);
void		kproc(char*, void(*)(void*), void*);
void		kprocchild(Proc*, void (*)(void*), void*);

M port/proc.c => port/proc.c +30 -0
@@ 798,3 798,33 @@ exhausted(char *resource)
	sprint(buf, "no free %s", resource);
	error(buf);
}

void
killbig(void)
{
	int i;
	Segment *s;
	ulong l, max;
	Proc *p, *ep, *kp;

	max = 0;
	kp = 0;
	ep = procalloc.arena+conf.nproc;
	for(p = procalloc.arena; p < ep; p++) {
		if(p->state == Dead || p->kp)
			continue;
		l = 0;
		for(i=1; i<NSEG; i++){
			s = p->seg[i];
			if(s)
				l += s->top - s->base;
		}
		if(l > max) {
			kp = p;
			max = l;
		}
	}
	print("%d: %s killed because no swap configured", kp->pid, kp->text);
	kp->procctl = Proc_exitme;
	postnote(kp, 1, "killed: proc too big", NExit);
}

M port/swap.c => port/swap.c +2 -0
@@ 154,6 154,8 @@ loop:
		else {
			if(!cpuserver)
				freebroken();	/* can use the memory */
			else
				killbig();

			/* Emulate the old system if no swap channel */
			print("no physical memory\n");