The MarshallExc interface provides a means for the ExcHandlers module to marshall syscall arguments between the OSF/1 server and SPIN. The basic unit of marshalling is the handle. When an application thread enters the ExcHandlers module with a syscall request, it first obtains one of these handles. It then stores all of its arguments on this handle, kicks a server thread associated with its task, and waits on a semaphore associated with this handle. The server thread finds the appropriate handle, gets the arguments and takes them up to the server. After handling the system call, the server thread returns to the kernel via the exception_task_get_next_exception system call. It relocates the marshalling handle and places the syscall resulting state on this handle. Finally, it kicks the application thread and waits for the next syscall. After being kicked, the application thread gathers the resulting state and returns.
The MarshallExc interface is MarshallExc.i3.
ddion@cs.washington.edu