- 主题:HIMEM.SYS 也是有限制的
可以完全不加载微软家的himem和emm386,只用QEMM一个设备驱动就可以全搞定……
ps:DOS下面,有哪些常见程序(所以排除windows3.x)是单纯调用XMS,而不用EMS的呢?
【 在 hgoldfish 的大作中提到: 】
: DOS 能管理的内存最大限制是 65MB,因为 himem.sys 申请内存时,会返回一个 int16 的数字作为 HANDLE,这个值代表着实际着内存地址,单位是 1KB. int16 的最大值是 65535,加上最低的 1MB,所以最终算出 DOS 能够管理的最大内存是 65MB.
:
: ..................
--
FROM 111.31.163.*
XMS API访问的内存是不是主要用于存放数据,而不是程序上下文~
结合XMS的使用方式,要把1MB之外的内存数据copy到实模式64+1024KB的地址空间之后才能使用,导致XMS内存确实更适合存放结构化数据(便于做顺序读写),而不是遍布跳转指令的程序上下文(远距离的跳转地址会给编程带来很大的麻烦)
【 在 kirbyzhou 的大作中提到: 】
: smartdrv呀,不依赖emm386的.
: 然后国产的一堆中文系统,字库加载到xms,也是不依赖ems的
: --
--
FROM 111.31.163.*
EMS为什么只有2048个16KB内存页呢?一个word如果有16bit的话,EMS竟然只用了其中的11bit来表示页数量~
【 在 hgoldfish 的大作中提到: 】
: 我查了一下 XMS 的 API,是这样的:
:
: XMS 2.0 使用 WORD 寄存器来表示 HANDLE,所以只能管理到 63+1 MB
: XMS 3.0 使用 int32 寄存器来表示 HANDLE,所以能管理到 4TB,不过 32 位计算机只能 4GB 可用。
:
:
: ..................
--
FROM 111.31.163.*
EMS内存的英文全称之所以名曰“扩展内存”,因其开始时是通过一种ISA总线上的“扩展卡”从而装入PC的。
80286就是这种原教旨EMS广泛使用的PC机型;
后来80386时代就可以通过微软官方的EMM386驱动程序使用640KB之上的系统主内存进行模拟,让应用程序继续以EMS的编程规范操作不超过32MB的EMS内存……
在系统主内存从几百KB,到几MB,发展到几十MB的那个时代,EMS内存让程序员做出了很多只有640KB物理内存就无法实现的复杂需求~
【 在 tom6bj 的大作中提到: 】
: ems一开始是插在isa槽的板卡吧, 所以应该是类似外设的操作方式?
: 后来才被xms模拟ems的方式给替代了
: --
: 灭绝人性啊
:
: --
--
FROM 111.31.163.*