Re: Mark Russinovich's reponse Was: [OT] Comments to WinNT Mag !!

Richard Gooch (rgooch@atnf.csiro.au)
Wed, 5 May 1999 08:37:33 +1000


Mark H. Wood writes:
> On Sun, 2 May 1999, Ingo Molnar wrote:
> > On Sun, 2 May 1999, Mark Russinovich wrote:
> > > Completion ports in NT require no polling and no linear searching - that,
> > > and their integration with the scheduler, is their entire reason for
> > > existence. [...]
> >
> > they require a thread to block on completion ports, or to poll the status
> > of the completion port. NT gives no way to asynchronously send completion
> > events to a _running_ thread.
>
> Ugh. I liked the VMS model here. When you queue an I/O request,
> one of the things you can attach to it is the address of a
> procedure. When the request completes, the kernel creates a
> temporary thread to execute the I/O rundown code, and part of that
> rundown is to call the procedure you supplied. Your procedure would
> typically move something from a wait queue to a work queue, or flip
> a bit in a bitmask, or link a buffer onto the free chain, or
> whatever it takes to indicate that your regular thread(s) should do
> whatever you want done when the I/O has completed. When you return,
> the rundown thread tidies up and destroys itself. (Of course, if
> you never return, or you try to do huge amounts of processing in
> your rundown procedure, your program won't work very well. Don't do
> that. Keep it short and simple.)

What was the cost of creating the "temporary thread"? Anyway, we can
do much the same thing with signals, except we don't need to create a
temporary thread.

Regards,

Richard....

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/