This is largely untrue. When Windows is running, it's about 95% of a complete operating system. MS-DOS is only used to run DOS software and for file access. Windows takes control of the memory management, process management, video hardware, system timer, keyboard, mouse, printer, serial port, etc (basically every system resource except disk I/O) while it's running.
Despite how bad early Windows looks, it's doing some very impressive technical wizardry under the hood to be able to work in real mode on the 8086 and 286. It's a lot more complex than something like Mac OS 1 or GEM, and it makes sense why it kept getting delayed over and over for years. For example, they got multiple DOS programs to run simultaneously in real mode by intercepting all the DOS API calls and patching them on the fly to avoid breaking Windows. To get multitasking to work at all in 384 KB, they had to be able to dynamically load and unload chunks of programs when necessary to deal with memory pressure, and then walk all the stacks on the system and patch out any calls/returns to the unloaded code to instead call the memory manager and make it reload the code from disk. Making this transparent to software authors required a series of complicated workarounds which Raymond Chen has written about. See here if you're interested: https://devblogs.microsoft.com/oldnewthing/20110316-00/?p=11... https://devblogs.microsoft.com/oldnewthing/20120622-00/?p=73... https://devblogs.microsoft.com/oldnewthing/20120629-00/?p=72... https://devblogs.microsoft.com/oldnewthing/20140103-00/?p=21...
Past that point complexity kept on increasing. Don't get me wrong - I use modern day linux, modern day ruby ... it's all fine. Modern computers are fast too. But at the same time I feel we lost simplicity along the way. Now this is even more noticable with microslop everywhere.
No. By resetting the processor which while slow (milliseconds) was sometimes done for this reason. Too slow for context switch but doable occasionally.