At 11:21 AM -0800 12/20/96, Jonathan S. Shapiro wrote:
>I am merging responses to Bill and Mark:
>
>{Bill writes:]
>
>> The right answer is after. The (virtual) returner does not check the key
>> for resumedness until it is invoked at the end of the kernel service. Note
>> the exact parallel with an extra-kernel service (implemented in a domain)
>> which uses the returner.
>
>I haven't looked at the returner in a while. Does the returner require
>that the last slot be a resume key? This makes it very easy, and entirely
>resolves the question. If it allows a start key, what is the rule --
>invocation
>guaranteed prompt?
If the returner was implemented as a domain, it would receive the keys and data from an invocation, and then check if the 4th key was a resume key (using Discrim). If the 4th key was a resume key, it would pass the other 3 keys and the data to it. Otherwise the returner would become available without invoking the 4th key. The returner guarantees that the invoker will not be stalled because the invokee is stalled. (There is a design in the manual to maintain this guarantee even if the invokee is on a dismounted disk.)
The other important principle is that all kernel keys (implicitly) use the returner.
This design lets it be an implementation detail if a function is implemented in the kernel or in a domain.
Bill Frantz | I still read when I should | Periwinkle -- Consulting (408)356-8506 | be doing something else. | 16345 Englewood Ave. frantz@netcom.com | It's a vice. - R. Heinlein | Los Gatos, CA 95032, USA