1. All Windows native apps were cooperatively multitasked. Only DOS boxes were pre-emptively multitasked. When your GUI locks up because some random app got into an infinite loop you're not going to sit there thinking "Oh goody, my dos box is still usable (or would be, if I could switch to it)".
2. Even then, virtual x86 mode was a 386-only feature. Windows on older machines ran in "standard mode" which featured no pre-emptive multitasking at all (DOS boxes only ran in the foreground).
3. DOS as a whole was not unloaded, only the command line portion, COMMAND.COM, was. (This was how DOS was designed to work, to free up as much memory as possible for th foreground program). Device drivers (.SYS) stayed loaded, because...
4. Windows could use DOS drivers, and it was very common, particularly in the early days, to have a CD-ROM or network device which didn't have native Windows support. For these devices Windows would call the DOS routines as usual. (I'm pretty sure, but not certain, that this was the only route Windows would take on non-386 machines.)
On the other hand, on 386, it was indeed possible to configure Windows in 386 Enhanced Mode with the correct driver set such that it was not using any DOS services, and you could run as many DOS boxes as you liked without fear of one of them locking up the rest of the system.
A full kernel acts as gatekeeper to system resources. While DOS provided access to some resources, it was single-process and so had no gatekeeping. No concept of different pools of resources, different lifetimes of activity. No comprehensive cleanup.
Half of a kernel (or more) is taking things from one list and putting them on another list, so when something exits or dies or faults, it can release resources that were allocated to the dying thing.
The hardware access was the lowest, simplest part of that. And DOS used the BIOS anyway, for half of what it did (floppy drivers etc). Which meant it had not a chance in hell of performing well (executing out of ROM or whatever).
If CP/M-86 performed well, why wouldn't DOS? They're very similar.
Wouldn't the "shadow RAM" technique of copying the ROM BIOS into RAM solve any ROM slowdown issues?
Enough to boot. But worthless for any real OS.
Does anyone know of any write-ups on the architecture of early-90s Windows that are more in depth, now that this has whet my appetite? (Or other OSes of the era, come to think of it?)
- If Windows 3.11 required a 32-bit processor, why was it called a 16-bit operating system? [0]
- What did Windows 3.1 do when you hit Ctrl+Alt+Del? [1]
- How did Windows 3.1’s virtual machine manager get the information to show in the text-mode Alt+Tab switcher? [2]
[0] https://devblogs.microsoft.com/oldnewthing/20100517-00/?p=14...
[1] https://devblogs.microsoft.com/oldnewthing/20140912-00/?p=44...
[2] https://devblogs.microsoft.com/oldnewthing/20211129-00/?p=10...
I keep coming back for those three articles.
https://www.geoffchappell.com/notes/windows/archive/aard/drd...
Even Windows 1.0, which more directly sat on top of MS-DOS, had to implement considerable amounts of functionality that would be considered more of a kernel than what MS-DOS offered.
If you were running Windows NT, when running a 16-bit .EXE file, there was a checkbox in the properties dialogue titled something like "run in separate memory space". That launched this particular binary in its own isolated wow16 runtime.
Of course, being an official Microsoft Project slightly reduces how impressive visit.
The other one that I am aware of is that Quarterdeck's DESQview/X could run multiple instances of Windows 3.1 in standard mode in separate windows under a single instance of DESQview.
It was very slow compared to running on native DOS, so obviously some time partitioning shenanigans were afoot.
What about Win286/running Windows 3.1 on an 80286?
He just made statements without any backing. Pathetic.
And multitasking: only one program was active at a time (just like in Android today). When you minimized the program, it was suspended.