在“Windows 2000子系统”中,子系统允许Windows 2000 模拟其他操作系统。同样,它还允许操作系统模拟在这些子系统中运行的应用程序。现在,来看这些应用程序在Windows 2000 中是如何实际运行的。
Win32应用程序
当在Windows 2000 上运行Win 32应用程序时,会获得许多好处。对于启动程序来说,Windows 2000的启动程序被设计成运行Win 32应用程序。和OS/2和Win 16应用程序不同的是,它创建一个模拟器或运行在虚拟机器中。Windows 2000使Win 32应用程序容易运行的例子是运行在同步输入模式中的Win 32应用程序。和同步输入模式的Win 16应用程序进行比较,同步输入模式包括了Win子系统,这些子系统存储了每个Win 32应用程序独立的输入队列中的所有Win 32的请求。因此,一个Win 32应用程序不会因为另外的Win 32应用程序而延迟从队列中检索信息。同步输入模式使所有的请求被保持在单独的队列中,允许应用程序保持这些请求,因为也许要等待其他在服务器中运行的应用程序。Win 32子系统为所有的Win 16位应用程序保存所有发往单独队列中的输入队列的信息。正如所说到的那样,除了运行为Windwos2000和Windows NT设计的传统的32位应用程序之外, Win 32子系统还运行MS-DOS和16位应用程序。它是通过创建虚拟DOS机器(VDM)来实现这个任务的。VDM基本上是Win 32应用程序,它创建了完整的计算机运行,在其中具有单个进程。这使得MS-DOS或Win 16应用程序在它们自己的地址空间运行,还通过运行在服务器上的VDM保护操作系统不被任何的忙乱行为干扰。
POSIX应用程序
如在前面的“POSIX子系统”中所说的那样, POSIX是一个标准,它定义了确定的规范,操作系统必须按照POSIX适应的操作系统来考虑。这些标准包括操作系统的编程接口、网络、安全和图形界面。POSIX . 1就是这样的标准。POSIX子系统使得能够运行POSIX应用程序,这些应用程序是满足POSIX. 1的要求的。Windows 2000 符合POSIX. 1的顺应性,包括许多操作系统允许的特性,如文件的敏感性命名和文件具有一个以上的名字。
POSIX子系统同时存在局限性。在一个时刻不能运行一个以上的POSIX会话。OS/2和Win 32子系统允许在它们自己的地址空间运行一个以上的会话, Windows 2000操作系统则不允许运行第二个POSIX应用程序。这可能成为在性能方面的重要的障碍,因为限制了在单一时间内单个Windows 2000 机器可能执行的POSIX任务数。
POSIX应用程序不能调用任何Win 32的API,也不能访问DDE(动态数据交换),OLE(对象连接与嵌入),内存映像文件,窗口插件或其他Win 32特性。这就限制了应用程序的开发输入,也限制了通过利用Win 32的API增强性能的可能性。
最后一点, POSIX应用程序不考虑网络识别。它们可以访问整个网络上的文件,但是客户机不能连接到Windows 2000 Server上去共享访问POSIX。
OS/2应用程序
运行在Windows 2000 Server 上的OS/2应用程序的兼容性是有限的。仅仅可以运行OS/22.x的16位应用程序或者是X86计算机上的字符应用程序。除非在RISC计算机上的MS-DOS环境中运行OS/2真实模式应用程序,否则在RISC计算机上不能运行OS/2应用程序。还有其他的限制,包括应用程序不能访问硬件内存或不能访问在第2层或下层的I/O端口。因为多年来OS/2的市场在减小,Microsoft公司也就不再改进这种与其他子系统有关的子系统。