Windows NT 和 VMS:故事的其余部分

NT,真的是New Technology吗???
(机翻

当 Microsoft 于 1993 年 4 月发布第一个版本的 Windows NT 时,该公司的营销和公共关系活动在操作系统 (OS) 的名称中着重强调了 NT(即新技术)。Microsoft 将 NT 提升为尖端操作系统,其中包括用户期望在工作站和中小型服务器操作系统中具有的所有功能。尽管 NT 在 1993 年是一个新的操作系统,具有新的 API(即 Win32)和新的用户和系统管理工具,但 NT 的核心体系结构和实现的根源可以追溯到 20 世纪 70 年代中期。
现在……故事的其余部分:我将带您简要了解一下 NT 的血统,这将追溯到 Digital 及其 VMS 操作系统。NT 的主要开发人员,包括 VMS 的首席架构师,大部分都来自 Digital,他们的背景对 NT 的发展产生了重大影响。在谈完 NT 的根源之后,我将讨论 NT 和 VMS 之间绝非巧合的相似之处,以及 Digital 对 NT 发布的反应。
NT 简史
NT 的历史与 NT 的首席架构师 David N. Cutler 的历史密切相关。1965 年从密歇根大学奥利维特学院毕业后,卡特勒在杜邦公司工作。虽然计算机不是他的第一个兴趣,但他在杜邦公司的工作之一是在数字机器上运行模拟。不久之后,卡特勒对软件有了一定的了解,并决定要开发操作系统而不是应用软件。他于 1971 年加入 Digital,在 Digital 位于马萨诸塞州梅纳德的著名“工厂”工作,为 PDP-11 系列开发操作系统。RSX-11M 是第一个操作系统,卡特勒在其中融入了后来在 NT 中出现的主要概念和设计原则。RSX-11M 是为工业和制造控制而开发的 PDP-11 OS Digital。
1975 年,Digital 意识到其竞争对手正在开发 32 位处理器,而这项技术会吸引客户放弃 PDP 的 16 位架构。计算机历史上的传奇人物、时任 Digital 工程副总裁的 Gordon Bell 推动了 32 位处理器的开发,Digital 最终将其命名为 VAX。此时,Cutler 已成为 Digital 的明星,是最初的 VAX 开发团队的一员。Digital 委托 Cutler 以及 Dick Hustvedt 和 Peter Lipman 设计 VAX 的操作系统 VMS。Digital 对 VAX 硬件的主要设计目标包括与 PDP-11 处理器的向后兼容性和足够的灵活性,使 VAX 可以成为低端桌面工作站和企业级服务器的基础。Digital 还使 VMS 向后兼容 RSX-11M,并设计了 VMS 以在不同尺寸的机器上运行。在这个发展时期,Digital 在其公司历史中称其“将业务押注”在 VAX 和 VMS 上。比尔·盖茨最近声称,微软正在 NT 5.0 上“赌上生意”,这与 Digital 的声明有异曲同工之妙。
1977 年,Digital 发布了 VAX-11/780 和 VMS 1.0,并于 1978 年首次出货。作为项目负责人和 VMS 的主要架构师之一,Cutler 继续致力于 VMS 的连续发布,但他在 Digital 变得焦躁不安。1981 年,卡特勒威胁要离开 Digital。为了留住明星开发人员,Digital 为 Cutler 提供了大约 200 名硬件和软件工程师。卡特勒把他的团队搬到了西雅图,并开始了一个开发中心。这个精英团队的目标是设计一种新的 CPU 架构和操作系统,将 Digital 带入 1990 年代。Digital 将 Cutler 小组的硬件项目称为 Prism,并将其称为 OS Mica。
1988 年,Digital 的高管取消了 Cutler 的项目并解雇了许多团队成员。Cutler 决定离开 Digital,但在他离开之前,Microsoft 高管了解了事态发展并意识到他们有一个理想的机会来聘用 Cutler。在 Cutler 离开 Digital 时,VMS 的发布版本是 5.0(截止文章发布日期前最新版本是 7.1)。
1988 年 8 月,比尔盖茨聘请了卡特勒。卡特勒跳槽到微软的条件之一是他可以带上大约 20 名前 Digital 员工,其中包括几名 Prism 硬件工程师。微软欣然满足了这一要求——公司知道聘请像卡特勒这样的操作系统架构师是一个妙招,而且很少有工程师拥有卡特勒这样的业绩记录。此外,盖茨认为微软的长远未来取决于开发可与 UNIX 匹敌的新操作系统。
Microsoft 新操作系统的内部项目名称是 OS/2 NT,因为 Microsoft 的意图是让新操作系统接替 OS/2,但保留 OS/2 API 作为其主要接口。1990 年 4 月 Windows 3.0 的成功改变了微软的想法及其与 IBM 的关系。微软发布 Windows 3.0 六周后,微软将 OS/2 NT 更名为 Windows NT,并指定 Win32 API(Windows 3.0 的 16 位 API 的 32 位演变)NT 的官方 API。盖茨认为,除了支持部分 DOS、OS/2 和 POSIX API 之外,与 16 位 Windows API 的兼容性和运行未经修改的 Windows 3.x 应用程序的能力是 NT 的首要目标。从1990年到1993年8月NT公开发布,卡特勒的团队疯狂冲刺完成了NT,图 1显示了 NT 历史上主要事件的时间线。

表 1:VMS 和 NT 术语翻译
左:VMS 右:Windows NT
中断优先级 (IPL) | 中断请求级别 (IRQL)
异步系统陷阱 (AST) | 异步过程调用 (APC)
分叉程序 | 延迟过程调用 (DPC)
I/O 请求包 (IRP) | I/O 请求包 (IRP)
错误检查 | 错误检查
系统服务 | 系统服务
sys.exe ntoskrnl.exe
分页池 | 分页池
非分页池 | 非分页池
Look aside List Section | Look aside List Section
NT 和 VMS
NT 的大多数核心设计师都曾在 Digital 从事过 VMS 的工作;有些人直接与卡特勒合作。这些开发人员如何防止他们的 VMS 设计决策影响他们的 NT 设计和实现?许多用户认为 NT 的开发人员将 VMS 的概念带到了 NT,但大多数人并不知道 NT 和 VMS 在内核级别上有多么相似(尽管 Usenet 开玩笑说如果你递增 VMS 中的每个字母,你最终会得到 WNT(Windows NT)) .
与在 UNIX 和大多数商业操作系统中一样,NT 有两种执行模式,如图2所示。

在用户模式下,应用程序执行,OS/2、DOS 和 POSIX 执行并导出 API 供应用程序使用。这些组件没有特权,因为 NT 控制着它们和它们运行的硬件。没有 NT 的许可,这些组件不能直接访问硬件。此外,组件和硬件不能访问彼此的内存空间,也不能访问与 NT 内核关联的内存。如果用户模式下的组件想要访问硬件或分配物理或逻辑资源,则它们必须调用内核。
内核以特权模式执行:它可以直接访问内存和硬件。内核由几个负责管理资源的执行子系统组成,包括进程管理器、I/O 管理器、虚拟内存管理器、安全引用监视器以及处理调度和中断的微内核。系统动态加载设备驱动程序,这些驱动程序是将 NT 连接到不同外围设备的内核组件。硬件抽象层 (HAL) 向 NT 隐藏了底层 CPU 和主板的特定复杂性。NT 的本机 API 是用户模式应用程序用来与内核对话的 API。这个本机 API 大部分没有记录,因为应用程序应该使用 Win32、DOS、OS/2、POSIX 或 Win16,
VMS 不像 NT 那样具有不同的操作系统特性,但它的内核和执行子系统显然是 NT 的前身。数字开发人员几乎完全用 VAX 汇编语言编写了 VMS 内核。为了跨不同的 CPU 架构可移植,Microsoft 开发人员几乎完全用 C 编写了 NT 的内核。在开发 NT 的过程中,这些设计人员用 C 重写了 VMS,清理、调整、微调,并添加了一些新的功能和能力。这种说法有贬低他们努力的危险;毕竟,设计者构建了新的 API(即 Win32)、新的文件系统(即 NTFS)以及新的图形界面子系统和管理环境,同时保持与 DOS、OS/2、POSIX 和 Win16 的向后兼容性。尽管如此,
这些相似之处可以写满一本书。事实上,您只需将 VMS 术语翻译成 NT 术语,就可以阅读VAX/VMS Internals and Data Structures (Digital Press) 的部分,作为对 NT 内部结构的准确描述。表 1 列出了一些 VMS 术语及其 NT 翻译。虽然我不会详细介绍,但我将讨论 Windows NT 3.1 和 VMS 5.0 之间的一些主要相似点和不同点,VMS 的最后一个版本 Dave Cutler 和他的团队可能会受到影响。本讨论假设您对操作系统概念有一定的了解(有关 NT 体系结构的背景信息,请参阅 1998 年 3 月的“Windows NT 体系结构,第 1 部分”和 1998 年 4 月的“Windows NT 体系结构,第 2 部分”)。

NT 的进程实际上与 VMS 的进程相同(表 2,第 118 页,显示了 VMS 和 NT 进程的比较)。在 NT 中,与在 VMS 中一样,进程调度程序实现了 32 个优先级。具有最高优先级的进程始终运行,具有相同优先级的进程以循环模式进行调度。系统会考虑 16 个高优先级实时或固定优先级,因为进程调度程序不会操纵系统分配给该范围的进程中的优先级。16 个低优先级(0 除外,系统为空闲线程保留它,当没有其他线程可以执行时)是动态的,因为调度程序通常根据设备驱动程序的输入,提高优先级以响应各种条件,例如当进程接收到来自设备的输入时。这种碰撞过程称为提升。NT 和 VMS 调度程序的一个定义方面是它们永远不会将进程的优先级降低到应用程序编程的优先级以下。为了处理 CPU 占用,即一个进程在不考虑系统中的其他进程的情况下消耗 CPU 周期,调度程序提高了在定义的时间段内未执行的饥饿进程的优先级。VMS 5.0 和 NT 3.1 调度程序都支持对称多处理 (SMP),这让它们可以在不同的 CPU 上同时执行进程,以提高应用程序的性能。在一个进程消耗 CPU 周期而不考虑系统中的其他进程的情况下,调度程序提高了在定义的时间段内未执行的饥饿进程的优先级。VMS 5.0 和 NT 3.1 调度程序都支持对称多处理 (SMP),这让它们可以在不同的 CPU 上同时执行进程,以提高应用程序的性能。在一个进程消耗 CPU 周期而不考虑系统中的其他进程的情况下,调度程序提高了在定义的时间段内未执行的饥饿进程的优先级。VMS 5.0 和 NT 3.1 调度程序都支持对称多处理 (SMP),这让它们可以在不同的 CPU 上同时执行进程,以提高应用程序的性能。
NT 进程管理和 VMS 进程管理之间的一个主要区别是 NT 进程包含一个或多个执行线程,并且 NT 的调度程序将 CPU 时间分配给线程,而不是进程。直到 1995 年的 7.0 版,Digital 才将内核线程引入 VMS。这一添加是自 NT 发布以来 Digital 对 VMS 进行的多项增强之一,似乎是为了响应 NT 功能。反过来,Microsoft 在 1996 年向 NT 4.0 添加了轻量级用户模式线程支持,它是从线程的 VMS 实现中复制的。
NT 和 VMS 中的内存管理器也很相似。两个操作系统都实现了系统在当前执行的应用程序和内核之间划分的虚拟内存地址映射。NT 和 VMS 都严重依赖内存映射文件,尤其是映射用于执行应用程序和实现写时复制功能的代码(由于 VAX 硬件限制,VMS 提供的按需复制功能效率较低)。NT 和 VMS 中的物理内存管理依赖于按需分页的虚拟内存。VMS 的内存管理器为每个进程分配系统可以分配给它们的物理内存量的上限和下限(称为工作集)。此功能将应用程序划分开来,以便具有大量内存需求的应用程序对其他进程的影响最小。NT 的内存管理器包含工作集,
与进程管理器一样,NT 和 VMS 的内存管理器之间存在显着差异。VMS 的平衡集管理器将整个进程的内存足迹从内存中移出到分页文件中,然后返回到内存中,以响应系统的整体内存需求。Microsoft 没有将这种称为交换的机制带入 NT 的 Balance Set Manager,尽管 NT 的 Balance Set Manager 的一些次要职责与 VMS 的 Balance Set Manager 的次要职责相同。
NT 的 I/O 管理器紧密地基于 VMS 的 I/O 管理器。两种操作系统的 I/O 管理器都支持遍及不同设备类型的设备驱动程序堆栈的分层驱动程序模型,并实现基于异步数据包的 I/O 命令,其设备驱动程序动态加载和卸载。可堆叠和可加载的驱动程序使 NT 和 VMS 具有很强的可扩展性。任一操作系统都可以在多个设备驱动程序之间划分功能,每个驱动程序实现不同的抽象级别。例如,系统可以在文件系统驱动程序和磁盘驱动程序之间插入一个容错磁盘驱动程序。这种配置让容错磁盘驱动程序接收系统发送到一个逻辑驱动器(例如C盘)的请求,然后将请求发送到多个物理驱动器以实现镜像或条带化。异步 I/O 使应用程序和内核子系统能够发起设备请求并在请求进行时工作,而不是空闲地等待请求完成。NT 的设备驱动程序体系结构和中断请求优先级方案基于 VMS。I/O 管理器这些方面的描述适用于这两种操作系统,几乎没有变化。

通过比较第 117 页的图 2 和图 3可以看出,执行子系统在 VMS 和 NT 之间表现出最显着的相似性。但是存在许多细微的相似之处,很明显 Microsoft 从 VMS 派生了 NT 的功能。例如,NT 和 VMS 都将资源表示为系统通过对象管理器管理的对象,对象管理器实现了统一的引用计数和记帐。对象管理器调节资源分配并调用请求某些对象操作通知的执行子系统功能。VMS 对象管理没有像在 NT 中那样形式化,VMS 对象管理器只是功能的松散连接。Microsoft 扩展了 NT 的对象管理器,以便它为所有内核资源提供统一的命名模型。
NT 的安全子系统基于具有任意访问控制列表的对象。DACL 确定哪些用户可以对这些对象执行各种操作。Digital 在 1984 年的 4.0 版中为 VMS 的安全模型添加了 DACL 增强功能。因此,VMS 的安全实现是 NT 的前身。Microsoft 甚至包括类似于 NT 中的 VMS 的系统工具,包括基于 MONITOR 的性能监视器,即可扩展的 VMS 性能监视器。早在 Microsoft 开发 NT 的备份实用程序之前,VMS 就包含了一个名为 BACKUP 的实用程序。
“为什么最快的芯片没有获胜”(商业周刊, 1997 年 4 月 28 日)指出,当 Digital 工程师注意到 VMS 和 NT 之间的相似之处时,他们将他们的观察报告给了高级管理层。Digital 没有起诉,而是与微软达成了协议。1995 年夏天,Digital 宣布了 Affinity for OpenVMS,该计划要求 Microsoft 帮助培训 Digital NT 技术人员,帮助将 NT 和 Open-VMS 作为三层客户端/服务器网络解决方案的两个部分进行推广,并承诺维护 NT支持 Alpha 处理器。微软还向 Digital 支付了 6500 万至 1 亿美元。
NT和VMS的演变
尽管 Microsoft 将 NT 描述为自主开发的操作系统,但 NT 实际上比其 1993 年的官方诞生日期要早得多。NT 包含来自另一家公司的旗舰操作系统的架构和设计影响。有趣的是,在整个 20世纪 90 年代,Digital 向 VMS 引入了许多 NT 功能,Microsoft 也将 VMS 开发添加到 NT。例如,VMS 在 1984 年提供了本地集群支持,在 1996 年提供了 64 位内存和系统 API。微软直到去年年底才将集群支持引入 NT,并且只是在有限的范围内,并且在微软发布 64 位 NT 之前可能要过几年. 相应地,Microsoft 发布了 NT 的第一个版本,支持内核模式线程、系统范围的事件日志记录和称为注册表的配置数据库。VMS 在 1995 年的 VMS 7.0 和 VMS 7 中引入了内核模式线程。
传奇还在继续。现在 Compaq 已经收购了 DEC,VMS 会继续发展,还是 NT 会终结其前身的命运?有一件事是肯定的:NT 将继续发展,将它的起源抛得越来越远。

原文章发布于1998年12月
http://www.win2000mag.com/Articles/Print.cfm?ArticleID=4494