Eric has the story straight here (plus or minus a couple minor details).
Around Oct. 1991, Rick Rashid, the principle investigator of the Mach
project, left Carnegie Mellon to establish the newly established Microsoft
Research group. I was a graduate student of Rick's and a member of the Mach
project since 1986. In June 1992 I left CMU to follow Rick. When I got to
Microsoft, NT was already in usable beta form (you could actually run it on
your machine and get work done). One of the first things we did was to get
to know the internals of NT. Believe me, in neither code nor philosophy is
NT based on Mach. NT's VM system is completely different: it sort of treats
everything like an x86, whereas Mach has a "pmap" layer which provides a
higher level of abstraction than just emulating the x86 MMU. NT is also
handle-based, whereas Mach is port-based. In Mach, all operations on system
objects (threads, tasks[=processes], memory, etc.) are performing by sending
a message to that object -- thus it doesn't matter if the object is local
(on the same machine) or remote. In NT, some operations are remoted for you
(e.g. registry operations) but most aren't.
The resemblance between NT and VMS, on the other hand, is quite strong,
especially when it came to I/O, with IRPs and APCs mapping onto VMS's IRPs
and AST's.
A good book to read about the development of NT, and its relationship to
Mach and MSR, is "Show-Stopper! The Breakneck Race to Create Windows NT..."
by Zachary, G. Pascal. If you search on
www.abebooks.com for
title="showstopper", you will find about 20 copies available.
Yes, but in Win32, you *can't* make OS calls. You
can only make Win32
calls. It's an extra layer of mostly useless crap.
Actually, a Win32 process can call NT system calls directly. It's just not
encouraged :-)
- Joe