Windows NT 和 VMS: 其余的故事 (The Rest of the Story)

Windows NT 和 VMS: 其余的故事 (The Rest of the Story)

(从左至右)David Solomon、David Cutler和Mark Russinovich

 

本文译自 Mark Russinovich 的 "Windows NT and VMS: The Rest of the Story"
原文见: http://www.win2000mag.com/Articles/Print.cfm?ArticleID=4494
译者: Xuming (at) users.sourceforge.net, 转载请保留出处.

 

Windows NT 和 VMS: 其余的故事 (The Rest of the Story)
NT 真的是新技术吗?
当 Microsoft 于 1993 年四月发布 Windows NT 第一个版本的时候, 公司的市场和
公关部门极其强调操作系统里面 NT 一词 (指新技术). Microsoft 力推 NT 为
性能优越的操作系统, 包含了用户所期待的, 用在工作站和中小型服务器上的操作系统
的所有特性. 虽然 NT 在 1993 年是一个新的操作系统, 拥有新的API(Win32 API),
新的用户和系统管理工具, 但是 NT 的核心体系与实现的根源却要回溯到七十年代中期.
现在......其余的故事: 我带领你简短的回顾一次 NT 的家世, 这将追溯到 Digital
公司和它的 VMS 操作系统. 大多数 NT 的重要开发人员, 包括 VMS 的首席设计师,
来自 Digital, 因而他们的背景极大影响了 NT 的发展. 在我讲述完 NT 的根源后,
我将讨论 NT 和 VMS 之间不仅仅是巧合的相似, 以及 Digital 在 NT 发布后的反应.
NT 简史
NT 的历史和 David N. Cutler 的工作密不可分, 他是 NT 的首席设计师. 1965 年自
Michigan 州的 Olivet 大学毕业后, Cutler 为 DuPont (杜邦)公司工作. 虽然计算机
不是他的主要兴趣, 他在 DuPont 公司的工作之一是在 Digital 的机器上运行模拟程序.
没过多久 Cutler 就对软件有了丰富的知识, 他决定去开发操作系统而不是应用程序.
1971 年他加入了 Digital, 在 Massachusetts 州 Maynard 市 Digital 著名的 "磨坊"
工作, 为 PDP-11 系列开发操作系统. RSX-11M 是让 Cutler 结合总体概念和设计原则
的第一个操作系统, 后来这些概念和原则都出现在 NT 上. RSX-11M 是 Digital 为
工业控制和制造控制开发的 PDP-11 操作系统.
到了 1975 年, Digital 发觉它的竞争对手正在开发 32 位处理器, 这种技术将把客户
从 PDP 的 16 位系统结构上拉走. Gordon Bell, 计算机史上的传奇人物, 也是 Digital
工程部的副主席, 要求开发 32 位处理器, 也就是后来 Digital 命名的 VAX. 作为当时
Digital 里面的新秀, Cutler 参加了最初的 VAX 开发组. Digital 让 Cutler 以及
Dick Hustvedt 和 Peter Lipman 负责设计 VAX 的操作系统 VMS. VAX 硬件的主要设计
目标包括向下兼容 PDP-11 处理器并具有足够的灵活性, VAX 可以成为从低端工作站到
企业级服务器的基础. Digital 同样要求 VMS 向下兼容 RSX-11M, 可以在不同大小的
机器上运行. Digital 叙述它的公司史, 对 VAX 和 VMS "压上了一切". 和 Digital
遥相呼应, Bill Gates 最近声称 Microsoft 对 NT 5.0 "压上了一切".
Digital 在 1977 年公布了 VAX-11/780 和 VMS 1.0, 并在 1978 年交付了第一批产品.
作为项目领导和 VMS 的主要设计者之一, Cutler 继续研制 VMS 的后续版本, 但是他对
Digital 变的不安心. 到了 1981 年 Cutler 威胁要离开 Digital. 为了挽留它们的明星
开发者, Digital 给了 Cutler 大约 200 个软硬件工程师. Culter 把他的小组搬到
西雅图, 并建立了一个开发中心. 这个精英小组的目标是设计一个新的 CPU 体系结构和
操作系统, 可以把 Digital 带到九十年代. Digital 把 Cutler 小组的硬件项目称为
Prism, 操作系统为 Mica.
1988 年, Digital 执行层取消了 Cutler 的项目, 裁去了许多小组成员. Cutler 决定
离开 Digital. 在他这么做之前, Microsoft 执行层得到这个消息, 并且意识到他们
有了绝佳的机会去雇用 Cutler. Cutler 离开 Digital 的时候, VMS 发布的是 5.0 版
(今天的版本是 7.1).
1988 年八月, Bill Gates 雇用了 Cutler. Cutler 去 Microsoft 的条件之一是可以
带上大约 20 名 Digital 的前雇员, 包括一些 Prism 硬件工程师. Microsoft 爽快地
同意了这个要求, 公司知道雇用 Cutler 这种境界的操作系统设计师妙不可言, 极少
有人能达到 Cutler 的记录. 另外, Bill Gates 感到 Microsoft 的长远未来将依靠
开发能够匹敌 UNIX 的新型操作系统.
新操作系统在 Microsoft 的内部项目名称曾经是 OS/2 NT, 因为 Microsoft 的意图是
继承 OS/2, 保留 OS/2 的 API 作为新操作系统的主要接口. 1990 年四月 Windows 3.0
的成功改变了 Microsoft 的想法以及它和 IBM 的关系. Microsoft 发布 Windows 3.0
六个星期后, OS/2 NT 改名为 Windows NT, 并且确认 Win32 API (从 Windows 3.0 的
16 位 API 进化来的 32 位版本) 为 NT 的正式 API. Gates 决定, NT 最重要的目标是
兼容 16 位 Windows API, 能够不加修改的运行 Windows 3.x 应用程序. 另外再加上对
DOS, OS/2 和 POSIX API 的支持. 从 1990 年到 1993 年八月公布 NT, Cutler 的小组
以疯狂的速度开发 NT, 项目增长到多达 200 名工程师和测试员. 图一显示 NT 历史上
的主要事件.

Windows NT 和 VMS: 其余的故事 (The Rest of the Story)
表一: VMS 和 NT 的术语翻译


VMS 术语 NT 译本
Interrupt Priority Level (IPL) Interrupt Request Level (IRQL)
Asynchronous System Trap (AST) Asynchronous Procedure Call (APC)
Fork Procedure Deferred Procedure Call (DPC)
I/O Request Packet (IRP) I/O Request Packet (IRP)
Bug Check Bug Check
System Service System Service
sys.exe ntoskrnl.exe
Paged Pool Paged Pool
Nonpaged Pool Nonpaged Pool
Look aside List Look aside List
Section Section


NT 和 VMS
大多数 NT 的核心设计人员在 Digital 的时候设计并使用了 VMS; 某些人直接为 Cutler
工作. 他们怎么能避免 VMS 的设计思路影响 NT 的设计和开发呢? 许多用户相信 NT
的开发者把 VMS 的概念搬到了 NT, 只不过多数人不清楚在内核层 NT 和 VMS 到底有多
相似. (尽管新闻组里有笑话指出把 VMS 的每个字母加一就可以得到 WNT, Windows NT)
如图二所示, 同 UNIX 和大多数商业操作系统一样, NT 有两个执行模式. 在用户模式
可以执行应用程序, 可以执行 OS/2, DOS, 和 POSIX, 提供 API 让应用程序使用.
这些组件没有特权, 因为 NT 控制它们以及它们所需的硬件资源. 没有 NT 的许可, 这些
组件无法直接访问硬件设备. 另外, 组件和硬件无法访问各自的内存空间, 也无法访问
NT 内核的内存空间. 用户模式下的软件如果要访问硬件, 分配物理或逻辑资源, 它们
必须调用内核.

Windows NT 和 VMS: 其余的故事 (The Rest of the Story)
内核在特权模式上运行: 它可以直接访问内存和硬件. å†…æ  ¸ç”±ä¸€äº›æ‰§è¡Œå­ç³»ç»Ÿ
(Executive subsystem) 组成, 它们负责管理各种资源, 包括进程管理器, I/O管理器,
虚存管理器, 安全引用监视器(Security Reference Monitor), 以及一个处理调度和
中断的微内核. 系统动态的装载设备驱动程序, 设备驱动程序是给不同的互连设备提供
NT 接口的内核部件. 硬件抽象层 (HAL) 对 NT 隐藏了 CPU 和主板上特别错综复杂
的东西. 用户模式的应用程序通过 NT 的本地 API 和内核交谈. 本地 API 多数未公开,
因为应用程序被认为在和 Win32, DOS, OS/2, POSIX, 或 Win16 打交道. 这些 OS
操作环境代替应用程序访问内核.
VMS 不象 NT 那样 具有不同的操作系统特征, 但是很明显, 它的内核和执行子系统是
NT 内核和执行子系统的前身. Digital 的开发人员几乎用 VAX 汇编语言写了整个 VMS
内核. 为了能够在不同的 CPU 体系结构间移植, Microsoft 的开发人员几乎用 C 语言
写了整个 NT 内核. 开发 NT 的时候, 这些设计师用 C 重写了 VMS, 使它变的干净,
协调, 有效, 并加入一些他们想要的功能和性能. 这样描述显得他们的付出无足轻重;
毕竟设计师们建立了新的 API (就是说 Win32), 新的文件系统(NTFS), 新的图形界面
子系统和管理环境, 同时仍然向下兼容 DOS, OS/2, POSIX, 和 Win16. 然而, 从 VMS
内部迁移到 NT 做的那么彻底, 以至于 NT 发表几个星期后, Digital 的工程师就注意到
这些惊人的相似.
这些相似能够填满一本书. 事实上, 只要简单的做个 VMS 术语和 NT 术语替换, 你就
可以阅读 <>(Digital出版)作为 NT 内部描述精确的替代.
表一列出了一些 VMS 术语和 NT 术语的对照. 尽管我不打算进入细节, 我在后面还将
讨论一些介于 Windows NT 3.1 和 VMS 5.0 之间的主要相似和差异, VMS 5.0 可能是
Dave Cutler 和他的小组涉及到的最后一个版本. 这个讨论需要你对操作系统的概念
比较熟悉 (想了解 NT 系统结构的背景知识, 请参考 1998 年 3 月出版的
"Windows NT Architecture, Part 1" 和1998年4月出版的"Windows NT Architecture, Part 2").

表二: VMS 和 NT 间的明显相似处

VMS NT
进程调度器采用32级优先级, 分成两半. 进程调度器采用32级优先级, 分成两半.
进程调度器决不会把进程的优先级降低到 进程调度器决不会把进程的优先级降低到
低于程序编制时的优先级. 低于程序编制时的优先级.
使用优先级提升对付CPU独占. 使用优先级提升对付CPU独占.
支持 SMP. 支持 SMP.

Digital 在 VMS 7.0 引入内核线程. NT 3.1 使用内核线程.
强烈依赖于内存映射文件. 强烈依赖于内存映射文件.
物理内存管理器采用请页虚内存. 物理内存管理器采用请页虚内存.
使用工作集和基于时钟的替换算法. 使用工作集和基于时钟的替换算法.
平衡集合管理器用交换解决系统的内存请求. 平衡集合管理器不使用交换.
支持设备驱动程序栈的分层驱动模型. 支持设备驱动程序栈的分层驱动模型.
采用基于包的异步 I/O 命令. 采用基于包的异步 I/O 命令.
通过对象管理器使资源表现为对象. 通过对象管理器使资源表现为对象.
安全子系统基于访问控制列表(ACL)的对象. 安全子系统基于访问控制列表(ACL)的对象.
MONITOR Performance Monitor
BACKUP NT Backup

NT 的进程事实上就是 VMS 的进程 (118页, 表二显示 VMS 和 NT 进程的比较). NT 和
VMS 一样, 进程调度器采用了 32 级优先级. 具有最高优先级的进程始终在运行, 同级
进程采用轮转调度(round-robin). 系统把高 16 级优先级看作实时或固定优先级,
因为进程调度器不处理系统分配在这个范围的进程的优先级. 低 16 级优先级 (除了 0
级, 这是系统保留, 当没有什么可执行的时候, 用来调度空闲线程) 是动态的, 因为
调度器, 通常配合设备驱动程序的输入, 作为对环境变化的反应, 如进程从设备获取输入
的时候, 提高进程的优先级. 这个行为叫做提升(boosting). NT 和 VMS 调度器的一个
明确特点是它们不会把进程的优先级降低到低于程序编制时的优先级. 为了对付 CPU 独占,
即某个进程消耗所有的 CPU 时间而不分配给系统的其他进程, 调度器会提升饥饿进程
(在预定的时间段内没有得到执行)的优先级. VMS 5.0 和 NT 3.1 的调度器都支持对称多处理
(SMP), 即为了增加程序性能, 在不同的 CPU 上同时执行进程.
NT 进程管理器和 VMS 进程管理器的一个主要区别是, NT 的进程包含了一个或多个
执行线程, 而 NT 的任务调度器把 CPU 时间分配给线程, 而不是进程. Digital 直到
1995 年的 VMS 7.0 才引入内核线程. 这是自从 NT 发布后 Digital 对 VMS 的几项
改进之一, 看上去是对 NT 功能的回答. 作为答复, Microsoft 于 1996 年的 NT4.0
增加了轻量级用户模式线程, 是从 VMS 采用的线程上抄来的.
NT 和 VMS 的内存管理器也同样的相似. 它们都实现了虚内存地址映射, 系统分为正在
执行的应用程序和内核两个部分. 无论 NT 还是 VMS 极大程度上依赖于内存映射文件,
尤其是映射某些代码, 用来执行应用程序以及实现 copy-on-write 功能 (由于 VAX 的
硬件限制, VMS 提供了效率较低的请求即复制功能). NT 和 VMS 的物理内存管理器基于
请页虚内存(demand-paged). VMS 的内存管理器为每个进程分配上下限(称为工作集),
即系统能够分配给它们的物理内存数量. 这个特性把进程和进程隔开, 使消耗大量内存
的进程对其他进程的影响降低到最小. NT 的内存管理器整合了工作集, 以及许多 VMS
工作集调节算法的精华.
和进程管理器一样, NT 和 VMS 的内存管理器之间存在着显著的不同. VMS 的平衡集合
管理器(Balance Set Manager)把进程覆盖的全部内存交换到分页文件中, 然后根据系统
整体的内存需求交换回来. Microsoft 没有把这种机制(既内存交换)引入NT 的平衡集合
管理器中, 虽然 NT 平衡集合管理器的某些第二职能和 VMS 平衡集合管理器的第二职能
一模一样.
NT 的 I/O 管理器很大程度上基于 VMS 的 I/O 管理器. 两者为了支持不同的设备类型,
设备驱动程序栈都采用了分层驱动模型, 它们都采用了基于包的异步 I/O 命令, 支持设备
驱动程序的动态加载和卸除. 栈架化和可加载化驱动程序使 NT 和 VMS 具有极佳的
延伸性. 两者都能够在多个驱动程序间划分功能, 各自实现不同的抽象层. 例如, 系统
可以把一个容错磁盘驱动程序插到文件系统驱动程序和磁盘驱动程序之间. 容错磁盘
驱动程序将收到系统发给某个本地磁盘驱动器(比如说C驱)的请求, 然后把请求分发到
多个物理驱动器上, 以实现镜像或 Striping. 异步 I/O 使应用程序和内核子系统发出
设备请求, 并在处理请求的时候继续工作, 而不是傻等. NT 的设备驱动结构和中断请求
优先级策略都基于 VMS. I/O 管理器的描述文档除了小小的区别, 对两者均适用.
你可以比较图二和图三, 执行子系统明确展示了 VMS 和 NT 的显著相似. 许多细节表明
NT 从 VMS 继承了这些东西. 例如, NT 和 VMS 都把资源描述为对象, 通过对象管理器
管理, 这样就实现了一致的引用计数和记账. 对象管理器规范资源的分配, 并且调用
执行 子系统的功能, 请求某些对象操作. VMS 的对象管理没有象 NT 那样正式, VMS 对象
管理器仅仅是一组函数的松散集合. Microsoft 扩展了 NT 对象管理器, 使其对所有的
内核资源提供一致的命名模型.

Windows NT 和 VMS: 其余的故事 (The Rest of the Story)
NT 的安全子系统基于自由访问控制列表(DACL)的对象. 自由访问控制列表决定哪些用户
对这些对象可以进行各种操作. Digital 在 1984 年的 VMS 4.0 版的安全模型添加了
DACL 增强. 因此, VMS 安全系统是 NT 的先驱. Microsoft 甚至在 NT 里包括了类似
VMS 的系统工具, 如性能监视器, 基于可扩展的 VMS 性能监视器 MONITOR. 远在
Microsoft 开发 NT 的备份工具以前, VMS 就带了 BACKUP 工具.
"为什么最快的芯片不能赢" (Business Week, 1997年4月28日) 叙述了当 Digital 的
工程师注意到 VMS 和 NT 的相似性, 他们把观察结果报告给高层. Digital 没有进行
诉讼, 而是和 Microsoft 达成一项协议. 1995年夏季, Digital 宣布为 OpenVMS 联姻,
要求 Microsoft 帮助 Digital 培训 NT 技术员, 把 NT 和 OpenVMS 升级到客户机/服务器
三级网络解决方案中的两个组成部分, 承诺维持 NT 对 Alpha 处理器的支持. Microsoft
还要偿付 Digital 六千五百万到一亿美圆.
NT 和 VMS 的演变
虽然 Microsoft 把 NT 介绍为自产的 OS, NT 的生日实际上比官方声明的 1993 年更早.
NT 包含的系统构架和设计思路来自另一个公司的旗舰 OS. 有趣的是, 整个90年代 Digital
把 NT 的许多特征引入 VMS, 而 Microsoft 要把 VMS 的能力加进 NT. 例如, VMS 于 1984
年实现了本地集群, 1996 年实现了 64 位内存和系统 API. Microsoft 直到去年下半年才在
NT 中有限的引入集群支持, 而推出 64 位 NT 可能还需要好几年. 相反的是, Microsoft
发布的 NT 第一版就支持内核线程, 系统事件记录, 和称为注册表的配置数据库. 而 1995
年 VMS 7.0 引入内核线程, VMS 7.2 将引入 NT 风格的事件记录和注册表.
传奇在继续. 现在 Compaq 拥有了 Digital, VMS 将继续发展呢, 还是被 NT 终结其命运?
有一件事情是肯定的: NT 将继续成长, 把它的祖先甩的越来越远.

你可能感兴趣的:(windows)