Extended Memory (XMS)
To work around the EMS limitations, extended memory came into being. Working in conjunction with Himem.sys, a new driver called "EMM386.exe" was used to take advantage of the 386 processors new "Virtual Real Mode". In this process, extended memory above 1MB was cut up into 1MB chunks, with each managed by the system as a separate conventional memory system, including the reserved 384K. This left 640K for each program. When in Virtual Real Mode, the system could essentially run several normal DOS sessions, each with its own memory environment. This protected the system from instability and software conflicts, but it also wasted some memory since each Virtual Real session had to emulate the reserved 385KB for the system, even if it was not actually being used by the system.
EMM386.exe also has the capability of reserving and emulating EMS memory for those programs that require it. Any memory reserved for EMS becomes unavailable to the system for EMS usage until the user changes the configuration. Usage of EMM386.exe required that Himem.sys first be loaded to take control of the GateA20 line to open the window to upper memory, EMM386 would then take control of upper memory from that point. Don't you love legacy work-arounds?
That's it for today! We didn't want to tire you guys out too much. Look for part two tomorrow!
Update: As promised, we have the second part of our memory guide for you today. Dig in!