SPARC Context Switching and Register Windows

Hugh Garsden munnari!cs.ua.oz.au!hugh at uunet.uu.net
Wed Jul 26 16:04:33 AEST 1989


A few weeks ago there was some discussion about implementing light-weight
processes (LWP's) on RISC machines. In particular, I have a routine for
implementing context switching between LWP's on a SPARC machine, a SUN
4/280 running SunOS (thanks to Zalman Stern who posted some routines on
which I have based my own). The routine goes like this -

		save register window
		flush all active windows (of LWP) to the stack
		save other global registers
		switch to a new stack
		load globals
		restore register window
		jump to a new thread

Flushing the register windows does 2 important things -

	    (1) saves context of out-going LWP on the stack
	    (2) invalidates all previous windows so that when the incoming
		LWP executes a restore, the kernel restores the window from
		the stack, thus loading new context (at least I think this is
		what happens)

To flush the register windows I execute this SPARC trap instruction -

			ta      ST_FLUSH_WINDOWS

All of this is working fine, but it is inefficient, because there are
cases when the suspended LWP is not going to be restarted, so I don't
always have to save context. What I want is this - a trap routine similar
to ST_FLUSH_WINDOWS that gives me (2) above, but NOT (1). I know that
there is a trap called ST_CLEAN_WINDOWS, but this doesn't seem to give me
what I want.

Something else that I would like to know, where in the SunOS manuals is
there any documentation (and I mean DETAILS) about SunOS software traps?

--------------------------------------
Hugh Garsden
Dept. of Computer Science
University of Adelaide
G.P.O. Box 498
Adelaide 5001
Australia

hugh at chook.ua.oz.au



More information about the Comp.sys.sun mailing list