忆往昔DOS操作系统——EMM386.EXE和HIMEM.SYS
接上文:提到了DOS的内存管理,从前文的图中,大家也看到了EMM386.EXE与HIMEM.SYS,这是实际管理内存的模块。
EMM386.EXE从名称上可以很真接的看出,这个是要在386以及之后的CPU上才可以使用的,它的作用是利用XMS创建出EMS,以前的DOS也有N多版本,有的叫EMM386.SYS有的叫EMM386.EXE,在我使用过的DOS我只见到过EMM386.EXE。像其它的扩展内存管理一样EMM386使处理器虚拟8086的模式。而在386增强模式中,窗口会话期间会临时关闭,同时在窗口保护模式中内核会接管它的角色。现在的老资料不好找,这段英文还译的这么别扭。
最终的作用是在UMA中,EMM386.EXE会把内存映射成未使用的块。允许设备驱动和TSRs(我也不知道是什么东西)被加载到UMA中,而保留那可怜的640K的常规内存。
HIMEM.SYS也是一个DOS设备驱动,他允许DOS程序把数据存到XMS中去。HIMEM.SYS实际上是非常重要的,后来的多种Windows操作系统(本质上底层是依赖于DOS)都需要先加载HIMEM.SYS之后才能正常运行。
从MSDOS 5.0起,HIMEM.SYS被用来把DOS内核的部分代码加载到HMA中,目的同样是为了节省那640K的常规内存。在config.sys用dos=high设置,config.sys的详细信息,后文会有涉及。
HIMEM.SYS提供了一种访问超过1M物理内存的方法,而这正是windows 9x/me操作系统加载图型化界面所必需的
看前面的图很清楚,EMM386.EXE的管辖范围是640K向上到1M之间这部分共384K被称作上位内存UMA的区域。而HIMEM.SYS管辖的是1M再向上的部分,而从1M开始有一小段叫高位内存HMA,专门用来放一部分DOS内核。