From what I remember:
DOS was a re-write of a "Barebones" OS (barebones meaning a skeleton)
It was written to utilise 640k LMB (Lower Memory Blocks) for user loaded modules and the other 360k UMB (Upper Memory Blocks) was meant for hardware drivers, meaning all systems had 1Mb in all, but only 640k for use by a user.
There was a lower usage version that was 540k, and this was written for the 5 1/4" floppy diskettes to run an OS from a clean boot without using the Harddrive.
The DOS OS wasn't just incorporated on IBM systems but Amstrads and a few other systems too, although most of them had a 16 colour monochrome display. EGA etc.
The first Windows were built to utilise the already created DOS, I remember loading a Windows for Workgroups many years ago to compliment the DOS package, all loads were from 3 1/2" floppy diskettes (4-6 for DOS and about 6-8 for Workgroups. I dumped the diskettes many years ago due to boot parity viruses, since at the time the world lacked from decent virii removers)
Windows 95 took over from Windows 3.1 (3.1.1) and when it did it brought a whole set of errors straight out from the box. The first issue of 95 of 3 1/2" Floppy had to be replaced due to errors from manufacturing.
(DirectX, a system built for containing the most valued device drivers for compatibility with what was at the time, Games! wasn't in existance yet)
Windows 95 could only just run on system with 16Mb of RAM (windows 3.1.1 needed 8Mb of RAM). It was possible to run on my 486x66Mhz 20Mb 1.2gb harddrive system, but I would have been a better idea to run DOS or windows 3.1.1 due to the amount of resources taken up by the OS (And the increase in the amount of file space that was taken up from the harddisk.)
You see, Windows was the first operating system to start to eat up the harddrive. If oyu were lucky to have a 400-600mb harddrive, windows ate most of it with it's operating system files and the Conventional Memory file.
Luckily, Hardware managed to continue to evolve (probably because of windows forcing the evolution)
Windows 98, upgraded 95 and fixed a few bugs here and there, DirectX 5 was a standard issue.
NT3 Side stepped, a windows operating system that was designed for network intergration. It was suppose to be more secure, and this made it scrutinised by hackers who nit-picked at it and showed just how vunerable it was.
NT4 was suppose to be a vast improvement, again the hackers proved otherwise.
Then Microsoft did something really odd... They created Windows ME and Windows 2000, this caused some conflicting problems. 1: ME on release didn't have enough drivers written for hardware 2: having two operating systems launched on the "Millenium" confused people into loading the wrong drivers (i.e. 2000 drivers on ME)
Of course the following was realised.
Windows ME was based upon windows but involved slight re-writes, as no longer did a windows system run on old DOS systematics, it was starting to evolve.
Windows 2000 was and is pretty much NT5, an upgrade to the networking systems, but it started to cross breed with the more personalised windows to try and make things a little easier on those poor systems adminstrators that have to keep up with problems.
Windows XP would be the next advance, Closing down development in old NT systems, but bringing what had be learnt into a re-write of windows. completely new hoisted code, with a virtual engine capable of loading most of the software meant for any of the previous OS's.
(By the way Zion emm386.exe doesn't necessarily work with newer machines, there was a mention that it's really of use with EISA architectures. It's really just a program for preloading DOS drivers into UMB (Upper Memory Blocks). Sometimes old DOS games I use to run required trying to juggle drivers for loading like LOADHIGH or LH, otherwise there wasn't enough lower blocks to execute the program.
QUEMM is quite a good package for replacing DOS DRIVERS. I managed to get about 620K lower with it freed up, with all the drivers being loaded to HIGH, but using a form of compression.)