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

Mark H. Wood (mwood@iupui.edu)
Tue, 4 May 1999 12:23:50 -0500 (EST)


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.)

-- 
Mark H. Wood, Lead System Programmer   mwood@IUPUI.Edu
Specializing in unusual perspectives for more than twenty years.

- 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/