I don't know about VMS, but a RT OS I use at work (FlexOS) allows
this (although limited to 31 outstanding async-requests). From a
programming point of view it is quite nice (esp. for state machines).
I've been told in the past that this is similar to VMS.
I happen to know how this is implemented (in FlexOS), and to do the
same way in Linux would probably be a major change - basically the
FlexOS kernel treats all requests as async (sync being a special case
using the 32nd request and having a builtin call to a
wait_for_event_completion() fn).
At the kernel level (in kernel process's and device drivers) FlexOS
allows a unlimited (bounded by available memory) number of async-IO
requests. The 31 async + 1 sync requests at the process level is simply
due to using a 32 bit mask in the API to identify the requests. If it
used a select() style fdset, the obviously a larger number could be
handled.
I rather suspect that Linux clone() threads could be used to implement
similar capabilities (at the user level), simply requiring more thought
from the programmer in their use.
DF
-- Derek Fawcus df@eyrie.demon.co.uk