TwoTailedFox wrote:
If NTVDM/VDM is neither a service, nor a Subsystem,
then what precisely is it?
a hack. A hack we don't have to support, since the VDM concept sucks, it
has been used as a backdoor in the past and it remains a backdoor by
design (direct hardware access for VGA, standard system calls bypassed
in certain cases, own fault handling and other such niceties).
And intelligent emulation has worked much better despite theory would
suggest a VDM to perform better - for one, most DOS applications are
busy-waiting and when run in a VDM will continuously cause expensive
context switches in a tight loop, as they raise interrupts, faulting
into the kernel, bounced back to user mode, handled by the emulation
layer which finally resumes the DOS code with another call into the
kernel which switches back the CPU into V86 mode, give or take a context
switch... this usually kills both the DOS application and the host
system making both unusable. As opposed to an emulator that can simply
recompile the DOS code into native code and execute it directly, with
interrupts not being much more expensive than regular function calls,
and with the chance to behave a lot more like real hardware, unlike V86
mode.
And this doesn't even take VGA emulation in account - Windows support
for full-screen DOS applications is especially gruesome, adding a couple
more context switches of the ugliest kind (TSS switching) to call into
the real-mode 16-bit VGA BIOS. Again, emulation would be not only
simpler, but also much faster, as the VGA BIOS virtually is dead code
with performance that cannot even remotely be compared with what today's
GPUs can do (more or less easily available through DirectX), and it's
real-mode 16-bit code on top of that.
Also, Windows has successfully employed software emulation for DOS
support, and the actual implementation of the user-mode VDM doesn't
affect Win32 components relying on it, but it has a huge impact on
kernel complexity and even security - software emulation is painless,
has no special kernel requirements and is perfectly compatible. And
makes for a self-contained implementation that can be easily customized,
or completely removed from an installation or distribution without the
need of a separate kernel build.
Finally, V86 support in the Windows kernel is virtually unused outside
of the VDM, and completely inadequate for any kind of serious work if
compared with V86 support on other operating systems.
In short, it's just ballast