In-Task Context Switching
Paul LOSORDO
goof at quiche.cs.mcgill.ca
Fri Oct 27 03:52:10 AEST 1989
I'm trying to implement a process scheduler. What I want to do
is have SIGALRM call up my own context switch and scheduling algorithm
such that I can select which process ( each having it's own machine
state structure ) will be running in the current task.
I have a version of that scheduler working fine when each process calls
the scheduler voluntarily, but I am having a problem with automating the
thing using signals. It seems that the signal 'mapper' doesn't context
switch to your private signal handler but rather calls it after saving
( I hope ! ) the register on its own. What that means is that the return
address and the flags are definitely wrong on entry to my handler and
that the registers are probably different too ( I have to test that
hypothesis ). There may also be some other stuff piled on the stack for
signal() internal use. Since signal() is linked to my code, I assume
that everything is pushed on my stack and not somewhere in the kernel.
Now, does anyone have an idea what and in what order signal()
pushes its stuff on the stack ? My only avenue at this moment is to set
specific values in the registers and examine the stack after a signal to
try to deduce what is pushed... A bit lo-tech and time-consuming...
Any comments ?
More information about the Comp.unix.xenix
mailing list