Board logo

标题: Wengier帮帮忙解决系统配置难题 [打印本页]

作者: I_love_Wengier     时间: 2005-1-18 00:00    标题: Wengier帮帮忙解决系统配置难题

首先告诉我的目的:在纯DOS下加载himem.sys和emm386.exe(不加载下面程序报内存不足),然后运行“run386  juzhen.exp”命令。
故障:我用软盘(dos7.10, config.sys配置没问题)启动我的机子时报信息:emm386 not installed --- unable to set page frame base address            
      expanded memory services unavailable
      total upper .............                       34k
     largest upper ...............                   34k
     upper memory starting address .......  D200 H
    emm386  active
  启动后运行命令 “run386  juzhen.exp”  报下面信息:
The 386 chip is currently excuting in virtual mode under the control of another programe, You must turn off this other program in order to use 386|dos-extender to run in protected mode
我试了别人六台机子,两台如上面一样不正常,其它四台都运行很好,可惜我的笔记本刚好不能运行,请Wengier哥哥务必帮小妹这个忙,另juzheng.exp是怎样的一个程序,能反编译出它的原码吗,我们用它作矩阵运算。           


作者: Wengier     时间: 2005-1-19 00:00
你不妨试试把EMM386内存管理程序换成其它的,如UMBPCI试试吧,这样既可以有UMB上位内存以解决常规内存不足的问题,又可以不使得CPU进入虚拟方式以造成run386不能运行。EMM386的确与一些程序不太兼容,所以在这种情况下也只能换用UMBPCI或其它类似的程序了。当然,如果还可以的话不妨再优化一下常规内存。UMBPCI的最新版可以在这儿下载:http://www.uwe-sieber.de/files/umbpci_e.zip另外关于juzheng.exp,其实我也没有听说过这个程序,大概是誰编的一个小程序吧。。
作者: I_love_Wengier     时间: 2005-1-19 00:00    标题: 谢谢,我试试

谢谢,我试试,不行再问您。 扩展名是“exp”的是什么文件,为什么要用“run386.exe”调用?
作者: I_love_Wengier     时间: 2005-1-19 00:00
哎呀,还是不行。我在config.sys里加了device=a:\umbpci.sys,启动很正常,可以suport,但运行我的命令“run386  juzhen.exp”报内存不足,怎么办?
我感觉emm386.exe启动时加载不上,是不是与内存条有关,是地址冲突吗?请Wengier再给我想想办法好吗?
作者: I_love_Wengier     时间: 2005-1-21 00:00
Wengier再给我想想办法好吗
作者: willsort     时间: 2005-1-23 00:00
Re I_love_Wengier:    大约看了一下你的问题,感觉你的Run386是一个32位保护模式环境的加载器,而juzhen.exp应该是一个在32位模式下才可正常运行的程序。提供以下几条建议:    1、在windows的dos方式下将juzhen.exp改名为juzhen.exe运行试试看行不行    2、除非你确定是扩充/扩展内存不足,否则,“内存不足”大多是指常规内存不足,所以应该尽量保持常规内存大于600K,一般应该注释掉config.sys中除himem.sys和dos=high,umb外所有语句行,再将autoexec.bat中所有加载内存的语句行注释    3、就上面的描述来看,emm386与run386似乎因同属32位保护模式环境程序而相冲突,所以应该考虑暂时关掉emm386

作者: I_love_Wengier     时间: 2005-1-24 00:00
Wengier,您好!
我总结了一下是这样:
(1)首先是启动时EMM386.EXE加载不上,如果能加载上问题就都不存在了。我的配置文件很简单:autoexe.bat只一行设置路径;config.sys里就三行:
DEVICE=a:\HIMEM.SYS
DEVICE=a:\EMM386.EXE RAM
dos=HIGH,UMB
(2)在EMM386.EXE加不上的情况下,用umbpci.sys和qemm386.sys代替,执行“run386.exe  juzhen.exp”命令,前者报内从不足,后者机器重启,重复多次均这样。
(3)将juzhen.exp改为juzhen.exe直接执行,报程序太大。在正常机子上也是这样,看来juzhen.exp必须要用run386.exe调用。另外run386.exe我记得好像就是DOS带的,它主要是做什么用?
多次麻烦您,很不好意思,可我很急用这个程序,只能求您了,谢谢。
作者: Wengier     时间: 2005-1-24 00:00
真不好意思,最近学习很忙(多伦多大学的学习量很大的),再加上网络速度较慢,好几天都没上论坛看了。正如我和willsort在上面提到过的,内存不足应该是指常规内存不足,因此应该要优化一下常规内存才好的,比如修改CONFIG.SYS中的参数,或不加载一些程序等等。而且willsort提到的一些建议也不错,你不妨试试。
作者: I_love_Wengier     时间: 2005-1-25 00:00
为什么启动时 EMM386.EXE 加载不上,。
我的配置文件很简单:
autoexe.bat只一行设置路径;
config.sys里就三行:

DEVICE=a:\HIMEM.SYS
DEVICE=a:\EMM386.EXE RAM
dos=HIGH,UMB
作者: willsort     时间: 2005-1-25 00:00
Re I_love_Wengier:    将a:\EMM386.EXE RAM改成a:\EMM386.EXE NOEMS试试看EMM386是否正常加载,如果还不行,那么很可能是硬件(尤其是内存)问题,与正常机型互换内存测试一下。    另外,应该可以确定,RUN386与EMM386同属32位DOS Extender,他们在功能上互相影响,从你的运行上看,应该是二者发生冲突,所以有必要禁止EMM386。    查看你的不加载EMM386时提示的内存不足,是由DOS环境发出的,还是RUN386发出的,如果是后者,那么内存物理故障的可能性更大。
作者: I_love_Wengier     时间: 2005-1-26 00:00
谢谢,您说得很有道理,我试过用a:\EMM386.EXE NOEMS也不行。我用启动软盘在六台机子上试过,四台可以加载上EMM386.EXE ,两台不行(包括我的笔记本。麻烦您看看最上面我第一次给出的启动信息)。
如果EMM386.EXE 加载正常,执行“run386.exe  juzhen.exp”命令没任何问题。
如果不加载EMM386.EXE ,执行“run386.exe  juzhen.exp”命令报内存不足,将juzhen.exp改为juzhen.exe直接执行,报程序太大。
现在我怎么办,我很急用这个程序,给想想办法好吗!
另,扩展名是“exp”的是什么文件,为什么要用“run386.exe”调用? run386.exe我记得好像就是DOS带的,它主要是做什么用?
作者: willsort     时间: 2005-1-26 00:00
Re I_love_Wengier:
  你的提醒很有道理,我在前面的思路是走偏了。根据EMM386.EXE的错误提示已经隐约说明问题。
  EMM386.EXE实际上是一个扩充内存(Expanded Memroy, 其协议为EMS)管理程序,他的主要作用是在保留内存(Reserved Memory,384KB)中创建上端内存块(Upper Memory Block,UMB,大小不定且不一定连续)后利用它将扩展内存(Extended Memory, 其协议为XMS)模拟为扩充内存。
    开关 "/RAM" 指示EMM386在上端内存块中创建一个64KB的扩充内存所需要的页面帧(page frame),页面帧相当于一个窗口,可以允许程序通过这个它访问任意位置的扩充内存,但是同一时刻只能访问64K,另外EMM386还需要44KB的UMB表格管理扩充内存中将要与页面帧进行的内存块,所以总共会消耗114KB的UMB空间。
   
  开关 "/NOEMS" 则可以禁止模拟扩充内存, 从而回收UMB中64KB的页面帧空 间,那可以使更多的程序通过DEVICEHIGH(CONFIG.SYS)和LH(AUTOEXEC.BAT)加载入UMB中(需要DOS=UMB支持),从而节约有限的基本内存(Conventional Memory,640KB)。
  从上文中提示中可以看到EMM386只找到了34KB的Upper/UMA,小于页面帧所需要的64KB,故而无法设置页面帧的段基址(Base Address)。而找不到足够空间的原因有多种,一是EMM386之前没有加载HIMEM.SYS,因而无法访问到1M内存顶端的UMA;一是EMM386之前加载了占用UMB的内存程序。
  不过参照你的提示,似乎这两种情况都不大相符。剩下的可能是,如果你的机器的BIOS支持USB键盘/鼠标,他可能会占用一部分UMB,请查看BIOS设置,它是否被禁止,如果没有请禁止它。
  而run386是Phar Lap的支持保护模式32位内存扩展器(32bit Extender),并非DOS自带,EXP是用支持此扩展器的编译系统编译出的程序,需要run386支持,具体信息请用搜索引擎查看有关信息。

[此贴子已经被作者于2005-1-26 23:22:10编辑过]



作者: I_love_Wengier     时间: 2005-1-27 00:00    标题: Re willsort:

谢谢您,看来确实是这样。
EMM386管理扩充内存,将扩展内存模拟成扩充内存,目的,是将常规内存中的一些占用程序移到扩充内存,为常规内存腾出更多的空间。而我执行的程序其实还是在常规内存中进行的,内存不足是指常规内存,是这样吗?
如果是这样,我怎么提高常规内存空间?不用EMM386,还有什么其他办法吗?umbpci.sys和qemm386.sys我都已试过了不行。
作者: willsort     时间: 2005-1-27 00:00
Re  I_love_Wengier:
  不知你是否查看了BIOS设置?
  EMM386只负责创建UMB和EMS,并且在程序提出进驻EMS申请时为其分配EMS。至于程序是否有能力申请和利用这两块内存空间,它并不理会。但是,当大多程序通过各种方法进驻UMB或者EMS后(DEVICEHIGH/LH进驻UMB,进驻EMS则需程序自己申请),当然会节省一部分常规内存空间。
  但是你的RUN386应该是一个EMS/XMS管理程序,它一般会将自身进驻到常规内存,而将它所应用的程序(例如juzhen.exp)进驻到EMS/XMS。如果它不需要EMS,而只需要XMS,则系统只需要加载HIMEM.SYS即可,加载EMM386反而会出现冲突;如果它需要EMS,但是它可以自己管理,而只需要一定的UMB空间作为页面帧,那么应该使用EMM386 NOEMS;如果它只是提出EMS的使用申请,那么应该使用EMM386 RAM。
  提 高常规内存空间,我前面已经提到了,加载HIMEM.SYS,这时可以使用高端内存区(High Memory Area,HMA,位于1M内存以上,64KB),使用DOS=HIGH可以一部分DOS内核加载到HMA,而随后的DEVICEHIGH/LH可以其他程序同样加载到HMA,当然会有些程序必须要在常规内存驻留。这样,常规内存尽可能的大了。
  如果使用EMM386 NOEMS也可以得到很多UMB空间(通常大于130KB),让应用程序启动时加载,但是EMM386自身会占用一部分常规内存。所以,在启动程序体积不大、数量不多时,不加载EMM386时的常规内存空间应该最大。

[此贴子已经被作者于2005-1-27 10:21:26编辑过]



作者: I_love_Wengier     时间: 2005-1-28 00:00
re   willsort:
谢谢,我按您说的再试试,有结果告诉您。
作者: DOSforever     时间: 2005-1-30 00:00
本人没有使用过run386.exe,但我估计和DOS4GW类似,都是一个让DOS应用程序运行在386保护模式下。当然,该应用程序本身就是要以保护模式设计的。所以如果要运行这样一个程序可以不需要任何内存管理程序。但如果有内存管理程序存在的话也可以做到一定的兼容,但这个兼容性是不确定的。比如,有些在HIMEM.SYS+EMM386.EXE的管理下可以运行,但在QEMM386.SYS下执行却报错。所以如果执行这样的一个应用程序出现和内存管理程序有兼容性问题的话,可以不使用任何内存管理程序。具体做法是注释掉CONFIG.SYS中的相关语句或在DOS启动时按SHIFT键(对传统的DOS和Windows的DOS都有效)完全跳过CONFIG.SYS和AUTOEXEC.BAT而使DOS运行在缺省的配置和实模式下。而当执行run386 juzhen.exp的时候就自动会转到保护模式下运行了。但是如果这样报内存不足的话(请问具体的提示是什么?)你可以在HIMEM.SYS中只使用DEVICE=HIMEM.SYS和DOS=HIGH语句试试。另外,从你加载EMM386.EXE出现的提示来看,EMM386.EXE无法设置页框的基地址。由于不知道具体情况我无法说清是为什么,这可能和你这台机器的硬件配置有关,你可以用MSD.EXE看一下内存的状况(最好是在DOS的缺省配置下)
作者: defrag     时间: 2005-1-31 00:00
ke yi shi shi zhe ge config.sys!!!!!!!!!device=a:\himem.sysdevice=a:\emm386.exe ram frame=nonedos=high,umb
作者: DOSforever     时间: 2005-2-2 00:00
小姑娘,你那问题到底解决了没有?如果我们中间有人帮上了忙,至少我并不需要你感谢,但我只想知道一个结果。
作者: I_love_Wengier     时间: 2005-2-16 00:00
首先祝各位哥哥春节快乐,身体健康,万事如意!
很不好意思,这段日子我回农村奶奶家了,那里上不了网,我也没带机子去,所以没有及时回复,请各位见谅。
昨天我按照你们的提示又做了些试验,结果还是失败。(1)我禁止了bios里的USB,largest upper 由 34K 增加到 50K ,emm386.exe加载不上。(2)启动时按住shift键,pass掉config.sys, 运行“run386  juzhen.exp”报内存不足。  
-----怎么办呀????
作者: Climbing     时间: 2005-2-17 00:00
很明显,我觉得楼主的问题应该是机器的硬件兼容性有问题。因为同样一套系统在同样的配置情况下在有的机器上就可以正常运行,而有的机器就不能正常运行。所以不能正常运行的机器肯定是存在兼容性问题。毕竟DOS太老了,在某些机器上可能已经不能正常运行了。楼主的程序运行时要求emm386.exe一定要能够正常加载,而如果emm386.exe加载时出现错误(前面的帖子中有错误的详细提示信息),那么楼主的程序就不能正常运行。所以根本的解决之道是从解决emm386.exe加载着手。但具体如何实施,恐怕就很困难,尤其涉及到硬件的兼容性,恐怕更难解决。
作者: Climbing     时间: 2005-2-17 00:00
楼主最好把你的一整套程序共享出来让大家都亲自在自己的机器上试一下,这样可能会更直观一些,解决的办法可能也会更多一些。
作者: I_love_Wengier     时间: 2005-3-10 00:00
各位好,
我以前的问题现在还没有解决!我想现在再问一个问题,就是WINXP系统里,如何在不重启动机子的情况下进入纯DOS,不要出现 The 386 chip is currently excuting in virtual mode under the control of another programe, You must turn off this other program in order to use 386|dos-extender to run in protected mode 这种信息。
企盼各为大侠给小妹指点!
作者: Climbing     时间: 2005-3-11 00:00
xp本来就没有纯DOS环境,要实现你的要求,只好在虚拟机中安装纯DOS了。最好是一问一帖。