Subject: Re: root file system type: ffs
To: Chuck Cranor <chuck@maria.wustl.edu>
From: Jason Thorpe <thorpej@nas.nasa.gov>
List: tech-kern
Date: 09/01/1998 16:51:27
Subject: Re: root file system type: ffs 
---------
[ Please redirect all followups to tech-kern ONLY! --thorpej ]

On Mon, 31 Aug 98 21:08:49 CDT 
 Chuck Cranor <chuck@maria.wustl.edu> wrote:

 > i believe the pool allocator has uncovered a design problem in the
 > process exit code path.

I believe I have fixed the problem.  I have tested it on Alpha and x86,
but not the other platforms yet.  Charles Hannum suggested the reaper
thread.

Basically this does the following:

	- Creates a new kernel thread, the "reaper".  Reaper sleeps on
	  the (new) deadproc list.

	- In exit1(), processes are not put on zombproc.  They are only
	  removed from allproc.

	- cpu_exit() no longer frees the vmspace and stack of the dead
	  process.  Instead, once it is safe to do so (i.e. we're no
	  longer running on the dead process's stack, etc.), cpu_exit()
	  calls exit2() to schedule the freeing of the vmspace and stack.

	- exit2() places the proc on the deadproc list, and wakes up the
	  reaper.

	- Reaper runs, freeing the vmspace and stack of all processes
	  on the deadproc list.  Once the vmspace and stack are freed,
	  the process is put on the zombproc list, and the parent
	  notified that the dead process has exited.

Eventually, we can have a reaper thread bound to each CPU in the system.
Something like this really is going to be necessary in the multiprocessor
environment, because e.g. someone else might be holding the lock on the
vm_map, requiring a sleep, etc.

The diffs can be found at:

	ftp://ftp.netbsd.org/pub/incoming/thorpej/reaper.diff

If I hear no objections, I'll commit them tomorrow afternoon/evening.

Jason R. Thorpe                                       thorpej@nas.nasa.gov
NASA Ames Research Center                            Home: +1 408 866 1912
NAS: M/S 258-5                                       Work: +1 650 604 0935
Moffett Field, CA 94035                             Pager: +1 650 940 5942