Modern Operating System 4th 中译

1.2.4 第四代(1980-今):个人电脑

随着LSI circuit(Large Scale Integration circuit,大规模集成电路)——芯片中一平方厘米的硅片上可以包含上千个晶体管——的发展,个人电脑的时代来临了。在体系架构上,个人电脑(起初被称为微型计算机)与PDP-11等微机并没有太多不同,然而价格区别很大。是个人电脑使得公司部门或大学可以有自己的电脑,微处理器芯片也令个人拥有电脑成为可能。

在1974年,当Intel推出8080,第一枚通用的8位CPU时,Intel想要一个8080运行的操作系统用于测试。Intel要求他们的顾问Gary Kildall编写一个。Kildall和他的一个朋友一开始构建了一个新推出的8英寸软盘的驱动器并且连接到8080,由此产生了第一台有磁盘的微机。Kildall之后写了一个基于磁盘的操作系统,称为CP/M(Control Program for Microcomputers)。由于Intel不认为基于磁盘的微机有什么前途,当Kildall向Intel索要CP/M的版权时Intel答应了这个要求。Kildall之后成立了一家公司Digital Research,专门开发销售CP/M。

在1977年,Digital Research重写了CP/M,使它可以运行在众多使用8080,Zilog Z80以及其他CPU芯片的微机之上。由于众多程序均设计于CP/M系统上运行,所以CP/M完全统治了微机操作系统大约5年。

80年代初,IBM设计了IBM PC并且寻求可以运行的程序。IBM的人联系了Bill Gates,购买了他的BASIC解释器程序,并且询问是否知道可以运行在PC上的操作系统。Gates向IBM推荐了Digital Research,几乎垄断的操作系统公司。然而Kildall拒绝同IBM的人见面,指派他的下属来,使得这成为了有史以来最糟糕的一单生意。让事情变得更糟的是,他的律师甚至拒绝同IBM签署关于尚未公布的PC的保密协议。于是IBM询问Gates是否可以为他们编写操作系统。

IBM的人走后,Gates意识到当地的一家计算机厂商Seattle Computer Products有一套合适的操作系统DOS(Disk Operating System)。他提出购买DOS(据说只花了75000美元),Seattle Computer Products爽快地答应了。Gates向IBM提供DOS/BASIC套装,IBM接受了。IBM想做一些更改,于是Gates雇佣了DOS的作者Tim Paterson到他的公司Microsoft做员工,完成这项工作。改进后的系统被更名为MS-DOS(MicroSoft Disk Operating System)并且很快统治了IBM PC市场。一个关键因素是Gates决定(现在看来非常明智)将MS-DOS卖给计算机厂家,与他们的硬件一同附送。与此相比,Kildall尝试将CP/M卖给终端用户。在此之后,Kildall因为这些并没有完全公布的事情迅速而又意外地退出了竞争。

当IBM PC的继任者,IBM PC/AT于1983年推出,使用Intel 80286 CPU,MS-DOS的地位被进一步巩固,而CP/M在苟延残喘。之后MS-DOS被广泛用于80386和80486。虽然MS-DOS起初的版本非常落后,但是其后期版本包含了众多的高级功能,其中许多来自于UNIX。(Microsoft意识到了UNIX,甚至在公司早期销售过UNIX的微机版本,称为XENIX。)

早期的微机系统如CP/M,MS-DOS都基于用户从键盘敲击命令的方式。由于60年代 Stanford Research Institute 的Doug Engelbart的工作,这种命令行交互逐渐改变。Engelbart发明了图形用户界面,由窗口,图标,菜单,鼠标组成。这些概念被Xerox PARC的研究员采纳,并用于他们制造的计算机中。

有一天Steve Jobs,Apple computer的联合创始人之一,参观了PARC,看到了GUI,并且立刻意识到了它的商业价值,而这是Xerox的管理层所没有意识到的。这个巨大的战略失误导致了一本书,题为摸索未来(Smith and Alexander, 1988)。Jobs随后致力于为Apple开发GUI,最终造出了Lisa。Lisa太过昂贵以至于商业上并不成熟。Jobs的第二次尝试,Apple Macintosh,取得了巨大的成功。不仅仅是因为它比Lisa便宜很多,更因为它对用户更加友好,这意味着它不仅仅是为了那些对电脑一无所知的用户,更是为了那些丝毫无意学习的用户。在图形设计,专业摄影以及专业视频处理等创意市场,Macintosh使用非常广泛,并且用户对此非常热心。在1999年,Apple使用了Carnegie Mellon University的Mach微内核,其设计目的是取代BSD UNIX的内核。由此,Mac OS X成为了一个基于UNIX的操作系统,尽管有着非常独特的用户接口。

当Microsoft决定开发MS-DOS的继任者时,他们受到了Macintosh成功的强烈影响,开发了一个基于GUI的系统,称为Windows。Windows起初运行在MS-DOS之上(相较于一个操作系统,它更像是一个shell)。从1985到1995的10年间,Windows只是MS-DOS之上的一个图形界面。然而从1995年开始的一个Windows独立版本,Windows 95,包含了许多操作系统的功能,仅用MS-DOS启动和运行老的MS-DOS程序。1998年,推出了这个系统的一个轻微修改的版本,称为Windows 98。然而不论Windows 95还是Windows 98都包含了大量的16位Intel汇编代码。

另外一个Microsoft操作系统,Windows NT(这里的NT代表New Technology),在某种程度上兼容Windows 95,但是是从底层重写的。Windows NT是一个完全32位的操作系统。Windows NT的首席设计师是David Cutler,同时也是VAX VMS操作系统的设计师,所以VMS的一些理念也出现在NT。事实上因为VMS太多的特点出现在NT中,DEC指责Microsoft剽窃。此案最终花费巨额资金达成庭外和解。Microsoft预计Windows NT的第一个版本将会淘汰MS-DOS和其他全部的Windows,因为NT拥有非常强的技术优势,然而事实并非如此。只有Windows NT 4.0达成了这一点,尤其是在企业网络。1999年初,Windows NT的第五版更名为Windows 2000,它的目的是继承Windows 98和Windows NT4.0。

这个策略也并不太成功,于是Microsoft推出了Windows 98的另一个版本,称为Windows ME(Millennium Edition,千禧版)。2001年推出了Windows 2000的一个轻微升级的版本,称为Windows XP。这个版本工作了很长时间(6年),并且基本取代了之前所有的Windows版本。

Windows之后继续推出新的版本。Windows 2000之后,Microsoft将Windows家族分为桌面版和服务器版两个产品线。桌面版即为Windows XP及其继任者,服务器版包括Windows Server 2003及Windows Server 2008。嵌入式版作为第三条产品线出现的略迟。所有的Windows均提供Service Pack形式的升级服务。这已经足以安慰一些系统管理员(以及操作系统教材作者)了。

之后直到2007年1月,Microsoft才发布了Windows XP的下一代产品,称为Windows Vista。Vista提供了全新的图形界面,增强的安全性,以及众多全新或升级的应用程序。Microsoft期望它能够取代Windows XP,然而它究其一生也没有实现这一点。相反,Windows Vista由于它极高的系统需求,严格的授权制度,以及支持数字版权保护,使得用户难以复制受保护的文件而饱受批评。

当Windows 7,一个全新并且系统需求没那么高的版本推出之后,许多人决定跳过Vista直接升级到Windows 7。Windows 7并没有引入太多新功能,但是它相对来说比较小并且稳定。发布不到三周之后,Windows 7的市场份额就超过了Vista发布7个月之后的份额。在2012年,Microsoft推出了新产品Windows 8,设计了全新的外观风格,并且针对触控做了专门优化。Microsoft希望新的设计可以使Windows 8运行在诸多设备之上:桌面计算机,笔记本,上网本,平板电脑,手机,家庭影院等等,一统天下。然而Windows 8的市场表现却赶不上Windows 7。

桌面计算机操作系统的另一个主要竞争者是UNIX(以及它众多的变体)。UNIX的强项在于网络和企业应用,但是也可以用在桌面计算机,笔记本,平板电脑以及智能手机上。Linux作为Windows的替代品也在学生等群体中普及开来。

为简化说明,本书中会使用x86指代所有基于70年代8086指令集家族的现代处理器。这种类型的处理器很多,主要生产商是Intel和AMD,二者有一定区别。处理器可能是32位也可能是64位,可能有很少或很多个核心,流水线可能很长也可能很短。但是无论如何对程序员来说,它们看起来都差不多,并且都可以运行35年前写的8086代码。当区别很重要时我们将严格区分它们——使用x86-32和x86-64分别指代32位和64位变种。

FreeBSD也是一个流行的UNIX变体,起源自Berkeley的BSD工程。所有的现代Macintosh均运行着定制的FreeBSD版本(OS X)。UNIX在使用高性能RISC芯片的工作站上也几乎成为标配。它的变体也运行在多种移动设备上,比如运行iOS 7或者Android的设备。

许多UNIX用户(尤其是有经验的程序员)相比于GUI更偏好于命令行式交互。所以几乎所有的UNIX都提供一套图形系统,称为X Window System(X11),由M.I.T.研发。X负责基本的窗口管理,允许用户使用鼠标创建,关闭,移动以及改变窗体大小。在X11之上一般运行着完整的GUI,比如Gnome或KDE。它们为喜欢GUI的UNIX用户提供类似于Macintosh或Microsoft Windows的交互风格。

80年代中期发生的一个有趣变化是运行网络操作系统和分布式操作系统(Tanenbaum and Van Steen, 2007)的个人计算机网络的增长。在一个网络操作系统中,用户可以发现同网络的其他计算机,可以登录远程计算机并且互相拷贝文件。每台计算机均运行着本地的操作系统并且有本地用户。

网络操作系统与之前的单处理器操作系统并没有本质区别。很明显它们需要一个网络接口控制器和一些底层驱动软件提供类似远程登陆和远程文件访问等服务。但是这并没有改变操作系统的骨架。

而一个分布式操作系统与此相反,它对用户表现为一个传统的操作系统,尽管其实它运行在多个处理器上。用户并不能意识到他们的程序在哪里运行而文件又储存在哪里;这些细节应当交由操作系统自动高效完成。

真正的分布式操作系统不仅仅是传统的单处理器操作系统加几行代码那么简单,因为分布式和集中式系统有本质的不同。例如分布式系统通常允许程序同时运行在多个处理器上,为了优化并行数量需要更为复杂的处理器调度算法。

另外,网络延迟通常意味着这些调度算法必须在数据不完整、不及时、甚至不正确的情况下运行。这个情况同单一处理器系统,调度器拥有系统状态的完整信息完全不同。