服务器 频道

二十六年历程 20个版本Windows完全解析

*本页有很多技术性的内容:)

  在1988年开始,微软在研发Windows 2.0的时候,同时也在寻找新的道路,盖茨一直渴望研发一个可以运行在大多数处理器上,并具有Unix系统上的多种强大功能的、运行在PC机上的全新的操作系统。这或许是对比Unix和Windows下得到的结果的影响。盖茨对Unix和Windows都很了解,盖茨曾开发过一个叫做Xenix的Unix操作系统。


IBM OS/2 2.0,1992年

  在1988年10月31日,比尔·盖茨做了一个现在来看非常重要的决定:雇用一群以David Cutler为首的来自DEC的员工,Cutler领导开发了DEC VMS系统。很快他们加入了和IBM合作的OS/2 2.0开发,OS/2 2.0是一个纯32位的操作系统,它大概就是盖茨梦想中的强大的高端桌面操作系统,而Windows 2.0/3.0则算是低端的桌面操作系统。然而后来在开发方向上的分歧,最后两家终于分道扬镳。

  合作决裂之前,微软本来负责OS/2 3.0的开发,在决裂之后,这些来自原DEC的人马开始专心制作盖茨梦想中的操作系统,新的操作系统部分基于OS/2 3.0,同时还带有DEC VMS的因素,这个操作系统被命名为Windows NT,NT就是New Technology新技术的意思。从现在来看,在名字中出现New这个单词不算是一个好主意,因为新旧总是相对的,昔日的新到了现代就很难称之为新。因此现在沿袭Windows NT架构的系统都已经不再使用Windows NT这个名字,而是千奇百怪,无所不有。


Microsoft Windows NT 3.1,1993年,一直到现在,发展了16年

  为此什么称之为NT呢?Windows NT采用了全新的设计思想,这牵涉到操作系统内核上的理念。在80年代前,主流的操作系统,要么是属于原始的没有内核的产品,要么属于单内核产品,到了80年代,学术界开始流行一种微内核的风潮,出现了如Mach(1985年)这样的经典微内核操作系统。典型的单内核系统则有各种Unix和类Unix。

  在一个分层设计的操作系统中,为其他组件提供最基本的系统功能的部件就叫做内核。单内核就是单个大的进程映像中集成了操作系统中所有基础功能,而微内核就是在内核中仅集成了经过挑选的、基本的功能,其它的操作系统功能构建在其上——用户应用程序再构建其上。微内核的设计可以让系统变得更模块化,带来可移植性和新功能开发上的好处,此外操作系统层次更明晰,维护也会更加方便。


微内核架构:Windows NT架构图,适合3.1~3.51版本

  谈到了内核之后,必须介绍一下特权等级(Privilege Level)和双模式(Dual Mode)的概念,操作系统必须安全地在多个程序间共享资源。资源不能让应用程序随意访问而必须由操作系统进行管理,它需要具有特殊的权限,因此在一些处理器上,设计了多种指令等级,不同的等级可以运行的指令并不相同。在80386处理器上,除了以前提到的各种改变之外,还有一个重要的改进就是在保护模式下引进了特权等级的概念:一共四个,从Ring 0到Ring 3,特权依次下降。Ring 0是被用于运行操作系统最核心的部分:内核,Ring 1和Ring 2用于不那么关键的部分:操作系统服务,Ring 3则用于应用程序。然而实际上很多当时的RISC处理器都只有两个特权等级,所以大多数操作系统包括Windows NT都只使用了两个等级,即Ring 0和Ring 3,如下图所示。

  Windows NT之前的Windows由于并不支持这个设计,任意程序都可以直接操作硬件并破坏其它软件,系统十分脆弱。运行在两种特权等级下的系统模型就叫做双模式(Dual Mode),分别是用户模式(User Mode)和监察者模式(Monitor Mode)或者系统模式(System Mode ),后者通常叫做核心模式(Kernel Mode)。基于种种强大的特性,很多比较高级的操作系统都构建在386之上。


Ring 0~Ring 3:80386处理器引入的四层特权等级架构

  特权模式也让真正的多任务功能成为了可能:处理器的定时器每隔一段时间就会产生一个中断,操作系统内核通过管理这个中断来获得不断的对系统的控制权,并根据特定的策略来调度多个程序的执行。Windows NT实现了基于优先级的抢先式多任务,操作系统可以随时中断其它程序的运行;而Windows 1.x/2.x/3.x只能实现协同多任务,也就是说一个程序愿意放出控制权的时候,其他程序才能继续执行,操作系统也一样。微内核设计给Windows NT带来了更好的灵活性和健壮性。


Windows NT 3.1的界面和Windows 3.x的界面很相像
  基于可移植性和健壮性的要求,Windows NT还引入了新的内核模式驱动程序体系,它在实际的硬件上放加入了一层叫做硬件抽象层(Hardware Abstraction Layer)的东西,或许它也可以认为是内核的一部分,这取决于你怎么定义。硬件抽象层建立在驱动程序和实际的硬件之间,为驱动程序隐藏了硬件的不同,这样就可以编制出跨处理器(比如Intel x86和DEC Alpha、IBM PowerPC等)、源代码兼容的设备驱动程序,每一种硬件体系都有着不同的HAL版本,这部分需要针对不同的架构针对编写。这些依赖于具体硬件的部分使用了汇编语言来编写。在硬件抽象层之上,就是设备无关的部分了,在不同的体系之间进行移植至需要重新编译。
 
  总的来说,Windows NT是一个全新的、基于微内核的、模块化分层的纯32位操作系统,符合了盖茨当年的想法:强大、健壮,可移植,功能齐全。Windows NT很快获得了学术界的认可。
 

Microsoft Windows NT Advanced Server 3.1,1993年
  Windows NT发布后的第二年,微软发布了开发代号为Daytona的Windows NT 3.5,从这个版本开始,微软把NT操作系统分为了工作站版本和服务器版本,它们在系统服务上有些不同,同时,内核的任务调度策略选择上也有不同的倾向。Windows NT 3.5包括了新的开机画面和类似于Windows for Workgroups 3.x的用户界面,以及改进的OLE (对象链接环境) 技术。Windows NT实质上是一个基于对象的操作系统,在内核内部,资源都按照Object对象为单位进行管理,管理对象的凭据叫做Handle句柄。Windows NT部分代码采用了C++,由于性能方面的考虑,大部分代码仍然使用了C。设备相关以及性能关键的部分则是汇编。

Windows NT Server 3.5,1994年

Windows NT Workstation 3.5,1994年

Microsoft Windows NT Server 3.51,1995年

  *关于Windows NT的更多架构细节,请期待Lucifer的下一篇文章;)

0
相关文章