[ros-dev] DOS Subsystem.

KJKHyperion hackbunny at reactos.com
Tue Nov 29 04:36:43 CET 2005


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


More information about the Ros-dev mailing list