- 主题:MSDOSs 怎么知道 UMB 内存段哪部分是空闲的?
根据 IBM PC 的约定,640KB 以上的 384KB 是保留给 BIOS 使用的。理论上,这一块内存是不能动的,不然就容易和 BIOS 代码冲突。
但 MSDOS 能够把自己加载到 UMB 里面,这个是怎么做到的呢?
我看了了一些资料,说是 EMM386.exe 用 386 的 virutal 8086 模式搞黑魔法,把 BIOS 访问的某些固定的 UMB 内存段和当前 DOS 环境访问的 UMB 内存隔离开。这样子就相当于当前 DOS 环境里面获得一些额外的空闲内存。是这样的吗?
但问题又来了。EMM386 怎么知道哪些内存段确定是被 BIOS 使用的?显存肯定不行吧,因为 DOS 程序也要写显存。
--
修改:hgoldfish FROM 59.61.196.*
FROM 59.61.196.*
在哪里标识啊。
或许我应该下载个 freebsd 的源代码看看。
我看 emm386.exe 的命令行参数可以手工地把地址段填进去。意思就是那地方管它怎么样。我要了。
从 emm386.exe 的原理看,运行了 emm386.exe 之后,总的可用空间反而减少了。
【 在 pabkyh 的大作中提到: 】
: 应该是bios占用了哪些空间会标记出来吧
--
FROM 59.61.196.*
玩 DOS 好玩啊。现在油管、B 站上面也有很多玩 fc 6502,以及 z80 cpu 的。
【 在 madeinchina 的大作中提到: 】
: 居然现在还有人玩这个。 我以前弄过。几十年了可能记忆有偏差。 分为扩展内存和扩充内存。通过工具可以把一些占内存的程序比如鼠标驱动放到640KB以外。 那时候玩游戏这些知识必备的。
--
FROM 59.61.196.*
哈哈。有懂的大佬可以聊一聊。省得我还要去查源代码。freedos 的源代码也都是汇编,不容易看来着。。
不过意义不大。emm386.exe 需要使用 virtual 8086 模式,这个是 386 才有的。
都 386 了,其实还不如直接全 32 位系统呢。而为了 UMB 扣出来的那点 72kb 内存,反而会损耗掉几百 KB 的 XMS 内存容量。不值。
himem.sys 就简单多了。只要 286 的保护模式就行。
【 在 pabkyh 的大作中提到: 】
: 查查bios或者dos的手册应该都知道了
: - 来自 水木说
--
FROM 59.61.196.*
win3.x 使用 emm386 是不是因为它提供了 virtual 8086 模式,可以让 win3.x 里面的多个 DOS 虚拟机相互隔离?
所以 emm386.exe 这东东,是不是运行的时候,都应该加个 NOEMS 参数才对?
【 在 hgoldfish 的大作中提到: 】
: 根据 IBM PC 的约定,640KB 以上的 384KB 是保留给 BIOS 使用的。理论上,这一块内存是不能动的,不然就容易和 BIOS 代码冲突。
: 但 MSDOS 能够把自己加载到 UMB 里面,这个是怎么做到的呢?
: 我看了了一些资料,说是 EMM386.exe 用 386 的 virutal 8086 模式搞黑魔法,把 BIOS 访问的某些固定的 UMB 内存段和当前 DOS 环境访问的 UMB 内存隔离开。这样子就相当于当前 DOS 环境里面获得一些额外的空闲内存。是这样的吗?
: ...................
--
FROM 59.61.196.*