Messages in this thread | | | Date | Tue, 4 May 1999 12:23:50 -0500 (EST) | From | "Mark H. Wood" <> | Subject | Re: Mark Russinovich's reponse Was: [OT] Comments to WinNT Mag !! (fwd) |
| |
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/
| |