下面从其它的角度来分析 VVDOS,以给出 VVDOS 的全貌。
1 VVDOS 工作环境
VVDOS 要求 386 以上 CPU,1M 以上内存,显示卡不限。在 PC 和286 上 VVDOS 只能以实模式工作,但它仍然尽量努力仿真好其它汉字系统。
VVDOS 在工作时进入保护模式,此时 DOS 变成 VVDOS 的一个虚拟8086 任务,由 VVDOS 内核支持 DOS 的正常运行。当 VVDOS 无法进入保护模式时,VVDOS 进入实模式内核。
VVDOS 占用内存的次序是:
1) XMS
2) UMB
3) HMA
4) 常规内存
VVDOS 工作时,系统原有的 XMS、EMS 服务不变。
2 VVDOS 内存映象
在保护模式内核的控制之下,VVDOS的各个模块在系统内存中的分布如下:
1)环境子系统,驱动程序:
环境子系统和驱动程序作为一个虚拟 8086 任务运行,它在保护模式的扩展内存空间中。图形缓冲区和文本缓冲区的虚地址不变。对于环境子系统和驱动程序来说,保护模式与实模式没有区别,因此可以不占用常规内存。
2)内核:
内核工作在 32 位保护模式下,除了实模式/保护模式切换代码外,均在扩展内存中。而实模式/保护模式切换代码仅占 10K–20K,可以在常规内存或 HMA 中。
可见,在理想情况下,仅占用常规内存或 HMA 10K–20K,是常规内存占用最少的汉字系统,系统内存映象见下图:
如果使用负内存占用技术(见后),VVDOS 可实现 -80K 或 -180K左右的内存占用。
在实模式下,VVDOS 努力将所有模块放入 UMB 和 HMA 中。
3 VVDOS 中断挂接
以用户调用 INT10H 显示字符为例,说明 VVDOS 的中断挂接:当用户发出 INT10H 的调用时,内核将这一调用传送到环境子系统,环境子系统将字符写入文本缓冲区,修改光标位置,然后返回用户程序。因为无需在屏幕上显示字符、光标,所以速度与西文 BIOS 相同。
比较复杂的中断挂接以用户调用 INT10H 设置图形显示模式为例,当用户发出设置图形模式功能调用时,内核将这一调用传送到环境子系统。如果环境子系统支持这一图形模式,则调用设备驱动程序进行设置。内核将此调用传送到驱动程序。驱动程序既可以自行设置,也可以调用显示卡 BIOS 进行设置。如果是调用显示卡 BIOS ,内核再次将调用传送到显示卡 BIOS。由显示卡 BIOS 完成最终的设置工作。这种多层驱动程模型可以达到相当的灵活性。
4 VVDOS 负内存占用
VVDOS 提供了可选的负内存占用技术,采用此技术可以使常规内存由 640K 增加到 730K 或 830K 左右。
增大常规内存的唯一方法是虚拟分页,如 UMB。由于 0A0000 为图形缓冲区,0B0000 为文本缓冲区,0C0000 为显示卡 BIOS,这些地址无法利用。因此 UMB 与常规内存不连续。这一点限制了 UMB 的使用。
VVDOS 的内存扩充方案,是将这些地址分页引入扩展内存。这样从0–0D0000H 将成为一个地址连续的空间,然后提供这些空间给 DOS 使用。而原来的地址不变移入环境子系统和驱动程序的虚拟 8086 空间中,以使它们正常工作。而 BIOS 服务(如获取 ROM 8*8 点阵地址)则被重新定位在 0D0000H–1M 之间的空闲地址中。
很明显,这种方案要求用户仅使用 INT10H 显示字符,不能直接写屏,不能使用图形缓冲区。如果用户直接写屏,地址只能是 0–0B8000H或 0–0B0000H,即内存只能增大 96K 或 64K。如果用户使用图形缓冲区,内存无法增大,只能提供 UMB。
由于此方案有可能引起冲突,因此只有在用户的主动设定或请求下,VVDOS 才提供此服务。
对于标准的应用程序(如 FOXBASE),地址空间可达 0–0D0000H,即800K 以上,对于那些直接写屏的应用程序(如 TC),地址空间可达 0–0B8000H,即 700K 以上。
有个叫做BigMem的DOS程序可以用来做实验。
5 VVDOS 图文同屏
VVDOS 的一个突出优点就是图文同屏,无论用户程序是在文本还是图形方式下,都可以做到图形、直接写屏字符(标准点阵)、其它的点阵字体同时显示。用户可以在图形缓冲区作图,在文本缓冲区直接写屏,调用 INT10H 显示其它点阵字体(由环境子系统提供服务)。在图形方式下做到文本直接写屏,这在其它汉字系统下是不可想象的。
6 VVDOS 与其它程序交互
1) VVDOS 根据环境可用以下方式工作:
1> 实模式:VVDOS 进入保护模式,自己虚拟分页。
2> WINDOWS:VVDOS 使用实模式内核,请求 EMS。
3> EMM386等:VVDOS 进入保护模式,自己虚拟分页并继续提供 EMS 服务。
4> 其它:VVDOS 使用实模式内核,修改图形缓冲区段排列,不使用 EMS。
2) VVDOS 在保护模式内核加载时自动支持 XMS (HIMEM.SYS),而EMS(EMM386.EXE) 则在保护模式内核加载时退出,保护模式内核接管 EMS 并继续提供服务。从用户的角度来看,XMS 和 EMS 系统服务没有变化。
3)当 WINDOWS 启动时若 VVDOS 已经装入,则 VVDOS 退出保护模式内核,加载实模式内核,WINDOWS 则将 VVDOS 拷入每一个虚拟 DOS 空间,接管 EMS 服务。这样,VVDOS 可在每一个虚拟 DOS 正常空间工作。当 WINDOWS 退出时,VVDOS 重新加载保护模式内核,接管 EMS 服务。而当在 WINDOWS 的 DOS提示符下加载 VVDOS 时,VVDOS 仅在当前虚拟 DOS 空间加载实模式内核。也就是说,只要在 DOS 方式下,就可以任意加载 VVDOS,并且 VVDOS 可以和 WINDOWS 透明切换。
4) VVDOS 不影响后台通信程序,VVDOS 在保护模式内核中的时间极少。汉字系统中最费时间的是显示过程(即调用驱动程序),而驱动程序是工作在虚拟 8086 模式下,内核可以响应中断(这也是驱动程序没有工作在 32 位保护模式下的一个理由)。
5) VVDOS 支持实模式下的调试器,但不支持虚拟调试器,此时将 VVDOS 改用实模式内核即可。
6) VVDOS 可在网络下正常工作。
7) VVDOS 的虚拟 DOS 环境与 WINDOWS 的虚拟 DOS 环境并不完全相同。由于 VVDOS 可以赋予虚拟 DOS 任务相当的特权,因此,它与实模式 DOS 环境相差无几,这一点是 WINDOWS 所难以做到的。
8) VVDOS 不支持 WINDOWS 应用程序的汉化,不支持图形软件的汉化。
7 VVDOS 未实现功能
多任务。 VVDOS 内核和环境子系统更适应多任务环境,但目前实现一个多任务汉字环境 (VV VISUAL) 没有意义。
8 VVDOS 市场分析
开发软件,最终的目的是市场角度而不是技术上的优越性。这两点不是并肩进行的。这不是一件简单地屈从于愚蠢的市场的奇想,而是市场产生标准化,而标准带来现实的好处,比毫无生气的技术特点更重要。
“如果有人认为我们没有追随 Lotus、WordPerfect 和 Borland,那么他们搞错了。我的工作就是力图在软件应用市场上获得合理的份额,就我个人而言,这个份额应当是 100%。”
-Mike Maples,Microsoft 应用领域负责人,资深副总裁,1991
注:以上文字引自参考文献[2]。
VVDOS 是一个标准,一个可以与旧的标准兼容的新标准,在此之上可以建立一个新的汉字系统市场,这个基于 DOS 的市场能够延长 DOS 的生命期。它的性能优秀,并且兼容现在的汉字系统,给现有应用程序以兼容性交叉升级的可能。因此具有广阔的市场前景。
参考文献:
1)[美] HELEN CUSTER 著:<<INSIDE WINDOWS NT>>,清华大学出版社,1993
2)[美] ANDREW SCHULMAN 著:<<UNAUTHORIZED WINDOWS 95>>,电子工业出版社,1995
3)[美] RALF BROWN 著:<<PC INTERRUPTS>>,电子工业出版社,1993
4)周明德 著:<<保护方式下的 80386 编程>>,清华大学出版社,1993
TROUBLE SHOOTING:
1.INT 10 处理程序似乎不对,似乎 MOV EBP,ESP 不在那里.
2.INT 15H 87H 88H 扩展内存拷贝程序工作正常,但地址拷错了.使用 RAMDRIVE 时发现数据被冲毁.
3.HLT 指令仿真不正常.
4.GP 故障时用户程序退出正常,但 V27 还在内存中,应将 V27 的两块内存释放(同 TASK PLUS 一样,没有关文件).不要使用修改 INT22H 来退出用户程序和 V27,太麻烦.
5.仿真 BIOS 向上滚屏不对,向下正常.