![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-01 18:37 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » QHIMEM V1.3 (可 以 取 代 其 它 HIMEM) |
| 可打印版本 1,451 / 9 |
| 第1楼 johnsonlam | 发表于 2006-04-24 10:29 |
| 银牌会员 发帖 497 积分 1,410 来自 九龍,香港 | |
|
QHIMEM V1.3 (可 以 取 代 其 它 HIMEM) http://johnson.tmfc.net/freedos
或 http://johnson.tmfc.net/freedos/qhimem.html 作 者 : Jack R. Ellis ( 亦 是 前 UDMA/XDMA 作 者 ) 为 甚 么 要 转 用 QHIMEM? 因 为 其 它 的 HIMEM 驱 动 有 兼 容 问 题 。 QHIMEM 使 用 正 常 的 XMS 存 取 , 没 有 使 用 "mapping" 或 "protected-mode" 方 法 , 兼 容 MS-DOS, FreeDOS, 或 其 它 类 型 的 DOS 。 QHIMEM 是 为 了 配 合 UMBPCI 而 编 写 , 当 使 用 "过 渡 程 序" QHMBOOT 时 , QHMBOOT 能 暂 时 接 管 XMS , 把 UMBPCI 置 于 UMB ( 暂 时 未 有 其 它 驱 动 可 以 这 样 做 ) , 往 后 再 交 接 到 QHIMEM , 这 样 做 的 好 处 是 QHIMEM 只 有 80 bytes 留 在 640K 传 统 记 忆 体 内 , 省 下 1600-2400 bytes , 那 就 可 以 执 行 更 大 的 程 序 ! ***使 用 FDXMS/FreeDOS-HIMEM 时 会 有 资 料 损 毁 的 风 险 , 由 于 原 文 颇 难 翻 译 , 我 直 接 贴 在 这 里 : And yet, it can run the same MS-DOS and FreeDOS software as me, doing I-O with an old ATA-33 UltraDMA disk drive, and using my QDMA driver. The ATA-33 drive is only FOUR times slower (not 10 or 30) than my new Maxtor ATA-133, meaning it "loads down" the Pentium much more. Also there is nothing in DOS or QDMA that limits read/write block sizes on a slower CPU. So, the old Pentium may be asked to handle up to 64K bytes at a time, same as my new Athlon. Not too-much a problem for a DMA transfer on the Pentium. It has little time for much-else while DMA is running, but it will "get there" without errors. However, what if QDMA gets a "misaligned" I-O request and must do XMS buffered I-O? User data must be moved into the buffer before output and must be moved from the buffer when input ends. The XMS "moves" are the problem. If FDXMS/FDHIMEM do such moves, interrupts are OFF the whole time, as you and your friends can see in the "xms_move" subroutine. I do not have exact timings, but for an old Pentium I, my guess is each 4-byte dword will take about 30-microseconds to "move". 30-usec times 16K 4-byte words is 500 MILLISECONDS, or half a second, in which FDXMS or FDHIMEM keep interrupts DISABLED while doing a "move"! NOT GOOD! And it can be WORSE! Say your friends are ALSO doing Ethernet work, which can involve its own DMA. If Ethernet data "comes in" or "goes out" when FDXMS or FDHIMEM is doing a "move", that DMA "steals" clock cycles from the running program and makes the "move" take longer! I don't know how-much longer, but it hurts interrupts even more! It does NOT get better with faster CPUs, since Pentium-II systems can have ATA-66 disk drives, and Pentium-III systems have ATA-100 drives. As the CPUs got faster, so did the hard-disks, and the problem caused by FDXMS/FDHIMEM and their uninterruptable moves is "still there"! This is why QHIMEM does NOT move more than 512 4-byte words without a "break" for interrupts. MS-DOS HIMEM allows interrupts at any time, which is better but results in a bigger driver, due to their "General Protection Fault" logic which must be active on any move. I got RID of the G.P.F. code by doing moves in "protected mode" with interrupts off, BUT every 512 dwords they DO get re-enabled again. On the old Pentium-I, this means it cannot go over 15 milliseconds without being able to interrupt, which is not too bad. 500 milliseconds is AWFUL, and 250 milliseconds on a Pentium-II is still NOT-good! Rather than just telling your friends "Try QHIMEM", you might want to say "FDXMS/FDHIMEM are too slow, try QHIMEM". If any of them ask to know why, then have them read Till Gerken's comments at the beginning of FDXMS. No need to say how much of an ERROR I think it is, but do let them see what Gerken wrote. That should be all they need. ( 为 甚 么 危 险 ? 可 参 考 FDXMS 源 码 开 始 时 Till Gerken 的 留 言 ) [ Last edited by johnsonlam on 2006-4-26 at 12:21 ] |
|
| 第2楼 Wengier | 发表于 2006-04-25 02:55 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
我试了一下,发现好像和MS EMM386不太兼容?EMM386启动时会提示警告信息。
另外,有没有办法手工指定要分配的XMS内存的大小?或者在命令行下调整?比如可以设置为64MB、32MB、16MB等等,如有这个功能的话运行一些程序时还是很有用的。 |
|
| 第3楼 johnsonlam | 发表于 2006-04-26 15:02 |
| 银牌会员 发帖 497 积分 1,410 来自 九龍,香港 | |
|
编 写 QHIMEM 的 原 因 是 HIMEM + EMM386 太 占 空 间 , 所 以 作 者 Jack Ellis 选 了 UMBPCI 来 做 配 对 , 因 为 QHIMEM 做 了 很 多 调 整 迁 就 UMBPCI, 可 能 未 有 兼 顾 某 些 EMM386 版 本 , 会 不 太 配 合 , 我 问 问 是 甚 么 回 事 。
QHIMEM.SYS 可 以 自 选 XMS Handle , 预 设 是 32 但 你 可 以 用 /N 选 择 , 如 /N16 或 /N128 等 , README.TXT 有 详 尽 资 料 , 如 果 你 指 的 不 是 这 个 , 请 告 诉 我 。 现 在 1.3 版 更 可 以 把 QHIMEM 和 UMBPCI 上 载 UMB , 我 试 过 可 以 腾 空 传 统 记 忆 至 621K 来 , 如 果 配 合 SHELLHIGH, DOSDATA=HIGH 可 到 625K 。 [ Last edited by johnsonlam on 2006-4-26 at 15:19 ] |
|
| 第4楼 Wengier | 发表于 2006-04-27 02:07 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
UMBPCI畢竟目前還不支持許多電腦(比如我的新電腦),所以對一些常見的EMM386版本提供支持我想應該會有許多用處的。
QHIMEM.SYS的XMS Handle選擇和XMS內存的大小應該不一樣的。QHIMEM的/Nxx類似於MS HIMEM的/NUMHANDLES=xx選項,可以指定XMS Handle的數量,但其無法指定想要的XMS內存的大小。 |
|
| 第5楼 johnsonlam | 发表于 2006-04-27 13:41 |
| 银牌会员 发帖 497 积分 1,410 来自 九龍,香港 | |
|
好 消 息 !
Jack 已 著 手 解 决 那 个 EMM386 的 投 诉 , 他 试 过 跑 V4.49 版 的 EMM386 没 有 问 题 , 只 是 EMM386 不 喜 欢 QHIMEM 的 "节 省" 才 会 警 告 。 相 信 下 个 版 本 会 很 快 出 来 , 到 时 候 跑 EMM386 一 定 没 问 题 了 。 |
|
| 第6楼 wl00560 | 发表于 2006-04-27 17:59 |
| 银牌会员 发帖 709 积分 1,384 | |
|
难道DOS的640限制那样难以突破么?应该出现一个可以使dos直接使用大内存的dos程序啊。现在windows下的内存都快到1G了,dos却还在为640而烦恼,有些可笑吧。
|
|
| 第7楼 Wengier | 发表于 2006-04-27 23:40 |
| 系统支持 发帖 10,521 积分 27,736 | |
Originally posted by wl00560 at 2006-4-27 05:59 PM: HIMEM/QHIMEM能使DOS支持直接访问XMS内存,最大高达4GB,也不错啊! |
|
| 第8楼 wl00560 | 发表于 2006-04-28 00:32 |
| 银牌会员 发帖 709 积分 1,384 | |
|
我是想说,dos应该彻底抛弃什么基本内存,xms,umb内存的概念,如同win所做的那样,内存拿起来就用,也不需怎样配置,就好了。
我不明白的是,现在新dos也不少,为什么没有人可以走出msdos的那一套呢?一个全新界面、全新的dos,如同winNT下的命令行一样的纯dos,32位,甚至是64位的,多 好啊。呵呵,一个梦想而已。 |
|
| 第9楼 johnsonlam | 发表于 2006-04-28 12:06 |
| 银牌会员 发帖 497 积分 1,410 来自 九龍,香港 | |
|
一 切 都 是 为 了 兼 容 ...
不 用 兼 容 就 没 有 了 历 史 的 负 累 , 但 是 从 前 的 程 序 都 要 全 部 重 写 , 太 浪 费 了 。 其 实 , 有 了 XMS 后 记 忆 已 不 是 大 问 题 , 程 序 自 己 也 可 以 DOS extender 突 破 640K 关 口 , 问 题 是 很 多 人 还 未 懂 利 用 这 些 新 功 能 编 程 。 |
|
| 第10楼 johnsonlam | 发表于 2006-04-28 12:07 |
| 银牌会员 发帖 497 积分 1,410 来自 九龍,香港 | |
Originally posted by wl00560 at 2006-4-28 12:32 AM: 那 就 是 XBOX360 了 :) |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |