目录
1.前言
2.第一代(1945~1955):真空管和穿孔卡片
3.第二代(1955~1965):晶体管和批处理系统
4.第三代(1965~1980):集成电路和多道程序设计
5.第四代(1980年至今):个人计算机
6.第五代(1990年至今):移动计算机
1.前言
操作系统已经存在许多年了。在下面的小节中,我们将简要地考察操作系统历史上的一些重要之处,操作系统与其所运行的计算机体系结构的联系非常密切。我们将分析连续几代的计算机,看看它们的操作系统是什么样的。把操作系统的分代映射到计算机的分代上有些粗糙,但是这样做确实有某些作用,否则没有其他好办法能够说清楚操作系统的历史。
下面给出的有关操作系统的发展主要是按照时间线索叙述的,且在时间上是有重叠的。每个发展并不是等到先前一种发展完成后才开始。存在着大量的重叠,更不用说还存在有不少虚假的开始和终结时间。请读者把这里的文字叙述看成是一种指引,而不是盖棺定论。
第一台真正的数字计算机是英国数学家Charles Babbage(1792-1871)设计的。尽管Babbage花费了他几乎一生的时间和财产,试图建造他的“分析机”,但是他始终未能让机器正常运转,因为它是一台纯机械的数字计算机,他所在时代的技术不能生产出他所需要的高精度轮子、齿轮和轮牙。毫无疑问,这台分析机没有操作系统。
有一段有趣的历史花絮,Babbage认识到他的分析机需要软件,所以他雇佣了一个名为Ada Lovelace的年轻妇女,这是世界上第一个程序员,而她是著名的英国诗人Lord Byron的女儿。程序设计语言Ada是以她命名的。
2.第一代(1945~1955):真空管和穿孔卡片
从Babbage 失败之后一直到第二次世界大战,数字计算机的建造几乎没有什么进展,第二次世界大战刺激了有关计算机研究工作的爆炸性开展。艾奥瓦州立大学的John Atanasoff教授和他的学生Clifford Berry建造了被认为是第一台可工作的数字计算机。该机器使用了300个真空管。大约在同时,Konrad Zuse在柏林用继电器构建了Z3计算机。
1944年,一群科学家(包括Alan Turing)在英格兰布菜切利庄园构建了Colossus并为其编程,Howard Aiken在哈佛大学建造了Mark I,宾夕法尼亚大学的William Mauchley和他的学生J.Presper Eckert建造了ENIAC。这些机器有的是二进制的,有的使用真空管,有的是可编程的,但是都非常原始,甚至需要花费数秒时间才能完成最简单的运算。
在那个年代里,同一个小组的人(通常是工程师们)设计、建造、编程、操作并维护一台机器。所有的程序设计是用纯粹的机器语言编写的,甚至更糟糕,需要通过将上千根电缆接到插件板上连接成电路,以便控制机器的基本功能。没有程序设计语言(甚至汇编语言也没有),操作系统则从来没有听说过。
使用机器的一般方式是,程序员在墙上的机时表上预约一段时间,然后到机房中将他的插件板接到计算机里,在接下来的几小时里,期盼正在运行中的两万多个真空管不会烧坏。那时,所有的计算问题实际上都只是简单的数学运算,如制作正弦、余弦、对数表或者计算炮弹弹道等。
到了20世纪50年代初有了改进,出现了穿孔卡片,这时就可以将程序写在卡片上,然后读入计算机而不用插件板,但其他过程则依然如旧。
3.第二代(1955~1965):晶体管和批处理系统
20世纪50年代晶体管的发明极大地改变了整个状况。计算机已经很可靠,厂商可以成批地生产并销售计算机给用户,用户可以指望计算机长时间运行,完成一些有用的工作。此时,设计人员、生产人员、操作人员、程序人员和维护人员之间第一次有了明确的分工。
这些机器,现在被称作大型机(mainframe),锁在有专用空调的大房间中,由专业操作人员运行。只有少数大公司、重要的政府部门或大学才接受数百万美元的标价。
要运行一个作业(job,即一个或一组程序),程序员首先将程序写在纸上(用FORTRAN语言或汇编语言),然后穿孔成卡片,再将卡片盒带到输入室,交给操作员,接着就喝咖啡直到输出完成。
计算机运行完当前的任务后,其计算结果从打印机上输出,操作员到打印机上撕下运算结果并送到输出室,程序员稍后就可取到结果。然后,操作员从已送到输入室的卡片盒中读入另一个任务。如果需要FORTRAN编译器,操作员还要从文件柜把它取来读入计算机。当操作员在机房里走来走去时许多机时被浪费掉了。
由于当时的计算机非常昂贵,人们很自然地要想办法减少机时的浪费。通常采用的解决方法就是批处理系统(batch system)。其思想是:在输入室收集全部的作业,然后用一台相对便宜的计算机如IBM 1401计算机将它们读到磁带上。IBM1401计算机适用于读卡片、复制磁带和输出打印,但不适用于数值运算。另外用较昂贵的计算机如IBM 7094来完成真正的计算。这些情况如图1-3所示。
- 在收集了大约一个小时的批量作业之后,这些卡片被读进磁带,然后磁带被送到机房里并装到磁带机上。
- 随后,操作员装入一个特殊的程序(现代操作系统的前身),它从磁带上读入第一个作业并运行,其输出写到第二盘磁带上,而不打印。
- 每个作业结束后,操作系统自动地从磁带上读入下一个作业并运行。
- 当一批作业完全结束后,操作员取下输入和输出磁带,将输入磁带换成下一批作业,并把输出磁带拿到一台1401机器上进行脱机(不与主计算机联机)打印。
典型的输入作业结构如图1-4所示。
- 一开始是$JOB卡片,它标识出所需的最大运行时间(以分钟为单位)、计费账号以及程序员的名字。
- 接着是$FORTRAN卡片,通知操作系统从系统磁带上装入FORTRAN语言编译器。
- 之后就是待编译的源程序,然后是$LOAD卡片,通知操作系统装入编译好的目标程序。
- 接着是SRUN卡片,告诉操作系统运行该程序并使用随后的数据。
- 最后,$BND卡片标识作业结束。这些基本的控制卡片是现代shell和命令解释器的先驱。
第二代大型计算机主要用于科学与工程计算,例如,解偏微分方程。这些题目大多用FORTRAN语言和汇编语言编写。典型的操作系统是FMS(FORTRAN Monitor System,FORTRAN监控系统)和IBSYS (IBM为7094机配备的操作系统)。
4.第三代(1965~1980):集成电路和多道程序设计
20世纪60年代初,大多数计算机厂商都有两条不同并且完全不兼容的生产线。
- 一条是面向字的大型科学用计算机,诸如IBM7094,主要用于工业强度的科学和工程计算。
- 另一条是面向字符的商用计算机,诸如IBM1401,银行和保险公司主要用它从事磁带归档和打印服务。
开发和维护两种完全不同的产品,对厂商来说是昂贵的。另外,许多新的计算机用户一开始时只需
要一台小计算机,后来可能又需要一台较大的计算机,而且希望能够更快地执行原有的程序。
IBM公司试图通过引入System/360来一次性地解决这两个问题。360是一个软件兼容的计算机系列,其低档机与1401相当,高档机则比7094功能强很多。这些计算机只在价格和性能(最大存储器容量、处理器速度、允许的I/O设备数量等)上有差异。由于所有的计算机都有相同的体系结构和指令集,因此,在理论上,为一种型号机器编写的程序可以在其他所有型号的机器上运行。(但就像传言Yogi Berra曾说过的那样:“在理论上,理论和实际是一致的;而实际上,它们并不是。”)
既然360被设计成既可用于科学计算,又可用于商业计算,那么一个系列的计算机便可以满足所有用户的要求。在随后的几年里,IBM使用更现代的技术陆续推出了360的后续机型,如著名的370、4300、3080和3090系列。zSeries是这个系列的最新机型,不过它与早期的机型相比变化非常之大。
360是第一个采用(小规模)集成电路(IC)的主流机型,与采用分立晶体管制造的第二代计算机相比,其性能/价格比有很大提高。360很快就获得了成功,其他主要厂商也很快采纳了系列兼容机的思想。这些计算机的后代仍在大型的计算中心里使用。现在,这些计算机的后代经常用来管理大型数据库(如航班订票系统)或作为Web站点的服务器,这些服务器每秒必须处理数千次的请求。
“单一家族”思想的最大优点同时也是其最大的缺点。原因在于所有的软件(包括操作系统OS/360)原本都打算能够在所有机器上运行。从小的代替1401把卡片复制到磁带上的机器,到用于代替7094进行气象预报及其他繁重计算的大型机;从只能带很少外部设备的机器到有很多外设的机器;从商业领域到科学计算领域等。总之,它要有效地适用于所有这些不同的用途。
IBM无法写出同时满足这些相互冲突需要的软件(其他公司也不行)。其结果是一个庞大的又极其复杂的操作系统,它比FMS大了约2~3个数量级规模。其中包含数千名程序员写的数百万行汇编语言代码,也包含成千上万处错误,这就导致IBM不断地发行新的版本试图更正这些错误。每个新版本在修正老错误的同时又引入了新错误,所以随着时间的流逝,错误的数量可能大致保持不变。
OS/360的设计者之一Fred Brooks 后来写过一本既诙谐又尖锐的书(Brooks,1995),描述他在开发OS/360过程中的经验。我们不可能在这里复述该书的全部内容,不过其封面已经充分表达了Fred Brooks的观点——一群史前动物陷入泥潭而不能自拔。Silberschatz等人(2012)的封面也表达了操作系统如同恐龙一般的类似观点。
抛开OS/360的庞大和存在的问题,OS/360和其他公司类似的第三代操作系统的确合理地满足了大多数用户的要求。
同时,它们也使第二代操作系统所缺乏的几项关键技术得到了广泛应用。其中最重要的应该是多道程序设计(multiprogramming)。
- 在7094机上,若当前作业因等待磁带或其他I/O操作而暂停,CPU就只能简单地踏步直至该I/O完成。对于CPU操作密集的科学计算问题,I/O操作较少,因此浪费的时间很少。
- 然而,对于商业数据处理,I/O操作等待的时间通常占到80%~90%,所以必须采取某种措施减少(昂贵的)CPU空闲时间的浪费。
解决方案是将内存分几个部分,每一部分存放不同的作业,如图1-5所示。当一个作业等待I/O操作完成时,另一个作业可以使用CPU。如果内存中可以同时存放足够多的作业,则CPU利用率可以接近100%。在内存中同时驻留多个作业需要特殊的硬件来对其进行保护,以避免作业的信息被窃取或受到攻击。360及其他第三代计算机都配有此类硬件。
第三代计算机的另一个特性是,卡片被拿到机房后能够很快地将作业从卡片读入磁盘。于是,任何时刻当一个作业运行结束时,操作系统就能将一个新作业从磁盘读出,装进空出来的内存区域运行。这种技术叫作同时的外部设备联机操作(Simultaneous Peripheral Operation On Line,SPOOLing),该技术同时也用于输出。当采用了SPOOLing技术后,就不再需要IM1401机,也不必再将磁带搬来搬去了。
第三代操作系统很适用于大型科学计算和繁忙的商务数据处理,但其实质上仍旧是批处理系统。许多程序员很怀念第一代计算机的使用方式,那时他们可以几个小时地独占一台机器,可以即时地调试他们的程序。而对第三代计算机而言,从一个作业提交到运算结果取回往往长达数小时,更有甚者,一个逗号的误用就会导致编译失败,而可能浪费了程序员半天的时间,程序员并不喜欢这样。
程序员的希望很快得到了响应,这种需求导致了分时系统(timesharing)的出现。它实际上是多道程序的一个变体,每个用户都有一个联机终端。
在分时系统中,假设有20个用户登录,其中17个在思考.谈论或喝咖啡,则CPU可分配给其他三个需要的作业轮流执行。由于调试程序的用户常常只发出简短的命令(如编译一个五页的源文件),而很少有长的费时命令(如上百万条记录的文件排序),所以计算机能够为许多用户提供快速的交互式服务,同时在CPU空闲时还可能在后台运行一个大作业。
第一个通用的分时系统——兼容分时系统(Compatible Time Sharing System,CTSS),是MIT(麻省理工学院)在一台改装过的7094机上开发成功的(Corbat6等人,1962)。但直到第三代计算机广泛采用了必需的保护硬件之后,分时系统才逐渐流行开来。
在CTSS成功研制之后,MIT、贝尔实验室和通用电气公司(GE,当时一个主要的计算机制造厂商)决定开发一种“公用计算服务系统”,即能够同时支持数百名分时用户的一种机器。它的模型借鉴了供电系统——当需要电能时,只需将电气设备接到墙上的插座即可,于是,在合理范围内,所需要的电能随时可提供。该系统称作MULTICS (MULTiplexed Information and Computing Service),其设计者着眼于建造满足波士顿地区所有用户计算需求的一台机器。在当时看来,仅仅40年之后,就能成百万台地销售(价值不到1000美元)速度是GE-645主机10000倍的计算机,完全是科学幻想。这种想法同现在关于穿越大西洋的超音速海底列车的想法一样,是幻想。
MULTICS是一种混合式的成功。尽管这台机器具有较强的I/O能力,却要在一台仅仅比Intel386 PC性能强一点的机器上支持数百个用户。可是这个想法并不像表面上那么荒唐,因为那时的人们已经知道如何编写精练的高效程序,虽然这种技巧随后逐渐丢失了。有许多原因造成MULTICS没有能够普及到全世界,至少它不应该采用PL/1编程语言编写,因为PL/1编译器推迟了好几年才完成,好不容易完成的编译器又极少能够成功运行。另外,当时的MULTICS有太大的野心,犹如19世纪中期Charles Babbage的分析机。
简要地说,MULTICS在计算机文献中播撒了许多原创的概念,但要将其造成一台真正的机器并想实现商业上的巨大成功的难度超出了所有人的预料。贝尔实验室退出了,通用电气公司也退出了计算机领域。但是MIT坚持下来并且最终使MULTICS成功运行。MULTICS最后成为商业产品,由购买了通用电气公司计算机业务的公司Honeywell销售,并安装在世界各地80多个大型公司和大学中。尽管MULTICS的数量很小,但是MULTICS的用户却非常忠诚,例如,通用汽车、福特和美国国家安全局直到20世纪90年代后期,在试图让Honeywell更新其硬件多年之后,才关闭了MULTICS系统,而这已经是在MULTICS推出之后30年了。
到20世纪末,计算服务的概念已经被遗弃,但是这个概念却以云计算(cloud computing)的形式回归。在这种形式中,相对小型的计算机(包括智能手机、平板电脑等)连接到巨大的远程数据中心的服务器,本地计算机处理用户界面,而服务器进行计算。回归的动机可能是多数人不愿意管理日益过分复杂的计算机系统,宁可让那些运行数据中心的公司的专业团队去做。电子商务已经向这个方向演化了,各种公司在多处理器的服务器上经营各自的电子商场,简单的客户端连接着多处理器服务器,这同MULTICS的设计精神非常类似。
尽管MULTICS在商业上失败了,但MULTICS对随后的操作系统(特别是UNIX和它的衍生系统,如FreeBSD、Linux、iOS以及Android)却有着巨大的影响,详情请参阅有关文献和书籍(Corbat6等人,1972;Corbató和Vyssotsky,1965;Daley和Dennis,1968;Organick,1972;Saltzer,1974)。还有一个活跃的Web站点www.multicians.org,上面有大量关于系统、设计人员及其用户的信息资料。
另一个第三代计算机的主要进展是小型机的崛起,以1961年DEC的PDP-1作为起点。PDP-1计算机只有4K个18位的内存,每台售价120000美元(不到IBM7094的5%),该机型非常热销。对于某些非数值的计算,它和7094几乎一样快。PDP-1开辟了一个全新的产业。很快有了一系列
列机不同,它们互不兼容),其顶峰为PDP-11。
曾参与MULTICS研制的贝尔实验室计算机科学家Ken Thompson,后来找到一台无人使用的PDP-1机器,并开始开发一个简化的单用户版MULTICS。他的工作后来导致了UNIX操作系统的诞生。接着UNIX在学术界、政府部门以及许多公司中流行。
现在,有充分的理由认为,由于到处可以得到源代码,多个机构发展了自己的(不兼容)版本,从而导致了混乱。UNIX有两个主要的版本,即AT&T的System V和加州大学伯克利分校的BSD(Berkeley Software Distribution)。当然还有一些小的变种。
为了使编写的程序能够在任何版本的UNIX上运行,IEEE提出了一个UNIX的标准,称作POSIX,目前大多数UNIX版本都支持它。POSIX定义了一个凡是UNIX必须支特的小型系统调用接口。事实上,某些其他操作系统也支持POSIX接口。
顺便值得一提的是,在1987年,Andrew S. Tanenbaum发布了一个UNIX的小型克隆,称为MINIX,用于教学目的。在功能上,MINIX非常类似于UNIX,包括对POSIX的支持。从那时以后,MINIX的原始版本已经演化为MINIX3,该系统是高度模块化的,并专注于高可靠性。它具有快速检测和替代有故障甚至已崩溃模块(如D/O设备驱动器)的能力,不用重启也不会干扰运行着的程序。它致力于提高可靠性和可用性。在www.minix3.org 上,MINIX 3是免费使用的(包括所有源代码)。
对UNIX版本免费产品(不同于教育目的)的愿望,促使芬兰学生Linus Torvalds编写了Linux。这个系统直接受到在MINIX上开发的启示,而且最初支持各种MINIX的功能(例如MINIX文件系统)。尽管它已经被很多人通过多种方式扩展,但是该系统仍然保留了某些与MINIX和UNIX共同的基本结构。
5.第四代(1980年至今):个人计算机
随着LSI(大规模集成)电路的发展,在每平方厘米的硅片芯片上可以集成数千个晶体管,个人计算机时代到来了。从体系结构上看,个人计算机(最早称为微型计算机)与PDP-11并无二致,但就价格而言却相去甚远。以往,公司的一个部门或大学里的一个院系才配备一台小型机,而微处理器却使每个人都能拥有自己的计算机。
1974年,当Intel 8080——第一代通用8位CPU出现时,Intel希望有一个用于8080的操作系统,部分是为了测试目的。Intel请求其顾问Gary Kildall编写。Kildall和一位朋友首先为新推出的Shugart Associates 8英寸软盘构造了一个控制器,并把这个软磁盘同8080相连,从而制造了第一个配有磁盘的微型计算机。然后Kildall为它写了一个基于磁盘的操作系统,称为CP/M(Control Program for Microcomputer)。由于Intel不认为基于磁盘的微型计算机有什么前景,所以当Kildall要求CP/M的版权时,Intel同意了他的要求。Kildall于是组建了一家公司Digital Research,进一步开发和销售CP/M。
1977年,Digital Research重写了CP/M,使其可以在使用8080、Zilog Z80以及其他CPU芯片的多种微型计算机上运行,从而完全控制了微型计算机世界达5年之久。
在20世纪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)。他联系对方并提出购买(宣称75000美元),对方接受了。然后Gates提供给IBM成套的DOS/BASIC,IBM也接受了。IBM希望做某些修改,于是Gates雇佣了写DOS的作者Tim Paterson进行修改。修改版称为MS-DOS (MicroSoft Disk Operating System),并且很快主导了IBM PC市场。同Kildall试图将CP/M每次卖给用户一个产品相比(至少开始是这样),这里一个关键因素是Gates极其聪明的决策——将MS-DOS与计算机公司的硬件捆绑在一起出售。在所有这一切烟消云散之后,Kildall突然不幸去世,其原因从来没有公布过。
1983年,IBM PC后续机型IBM PC/AT推出,配有Intel80286 CPU。此时,MS-DOS已经确立了地位,而CP/M只剩下最后的支撑。MS-DOS后来在80386和80486中得到广泛的应用。尽管MS-DOS的早期版本是相当原始的,但是后期的版本提供了更多的先进功能,包括许多源自UNIX的功能。(微软对UNIX是如此娴熟,甚至在公司的早期销售过一个微型计算机版本,称为XENIX。)
用于早期微型计算机的CP/M、MS-DOS和其他操作系统,都是通过键盘输入命令的。由于Doug Engelbart于20世纪60年代在斯坦福研究院(Stanford Research Institute)工作,这种情况最终有了改变。Doug Engelbart发明了图形用户界面,包括窗口、图标、菜单以及鼠标。这些思想被Xerox PARC的研究人员采用,并用在了他们所研制的机器中。
一天,Steve Jobs(他和其他人一起在车库里发明了苹果计算机)访问PARC,一看到GUI,立即意识到它的潜在价值,而Xerox管理层恰好没有认识到。这种战略失误的庞大比例,导致名为《摸索未来》一书的出版(Smith和Alexander,1988)。Jobs随后着手设计了带有GUI的苹果计算机。这个项目导致了Lisa的推出,但是Lisa过于昂贵,所以在商业上失败了。Jobs的第二次尝试,即苹果Macintosh,取得了巨大的成功,这不仅是因为它比Lisa便宜得多,而且它还是用户友好的(user friendly),也就是说,它是为那些不仅没有计算机知识而且根本不打算学习计算机的用户准备的。在图形设计、专业数码摄影以及专业数字视频制作的创意世界里,Macintosh得到广泛的应用,这些用户对苹果公司及Macintosh有着极大的热情。1999年,苹果公司采用了一种内核,它来自本是为替换BSD UNIX内核而开发的卡内基·梅隆大学的Mach微核。因此,尽管有着截然不同的界面,但MAC OS X是基于UNIX的操作系统。
在微软决定构建MS-DOS的后继产品时,受到了Macintosh成功的巨大影响。微软开发了名为Windows的基于GUI的系统,早期它运行在MS-DOS上层(它更像shell而不像真正的操作系统)。在从1985年至1995年的十年间,Windows只是运行在MS-DOS上层的一个图形环境。然而,到了1995年,一个独立的Windows版本——具有许多操作系统功能的Windows95发布了。Windows 95仅仅把底层的MSDOS作为启动和运行老的MS-DOS程序之用。1998年,一个稍做修改的系统Windows 98发布。不过Windows 95和Windows98仍然使用了大量16位Intel汇编语言。
另一个微软操作系统是Windows NT (NT表示新技术),它在一定的范围内同Windows95兼容,但是内部是完全新编写的。它是一个32位系统。Windows NT的首席设计师是David Cutler,他也是VAX VMS 操作系统的设计师之一,所以有些VMS的概念用在了NT上。事实上,NT中有太多来自VMS的思想,所以VMS的所有者DEC公司控告了微软公司。法院对该案件判决的结果引出了一大笔需要用多位数字表达的金钱。微软公司期待NT的第一个版本可以消灭MS-DOS和其他的Windows版本,因为NT 是一个巨大的超级系统,但是这个想法失败了。只有Windows NT 4.0踏上了成功之路,特别在企业网络方面取得了成功。1999年年初,Windows NT 5.0改名为Windows 2000。微软期望它成为Windows98和Windows NT4.0的接替者。
不过这两个版本都不太成功,于是微软公司发布了Windows 98的另一个版本,名为Windows Me(千年版)。2001年,发布了Windows 2000的一个稍加升级的版本,称为Windows XP。这个版本的寿命比较长(6年),基本上替代了Windows所有原先版本。
版本的更替还在继续。在Windows 2000之后,微软将Windows家族分解成客户端和服务器端两条路线。客户端基于XP及其后代,而服务器端则包括Windows Server 2003和Windows2008。为嵌入式系统打造的第三条路线也随后出现。这些Windows版本都以服务包(service pack)的形式派生出各自的变种。这足以让一些管理员(以及操作系统书籍作者)发疯。
2007年1月,微软公司发布了Windows XP的后继版,名为Vista。它有一个新的图形接口、改进的安全性以及许多新的或升级的用户程序。微软公司希望Vista能够完全替代XP,但事与愿违。相反,由于对系统要求高、授权条件严格以及对数字版权管理(Digital Rights Management,一种使用户更难复制被保护资料的技术)的支持,Vista受到了大量批评,负面报道不断。
随着全新的且并不那么消耗资源的操作系统Windows7的到来,很多人决定跳过Vista。Windows并没有引进很多特性,但它相对较小且十分稳定。不到三周时间,Windows 7就抢占了比Vista七周获得的还多的市场份额。2012年,微软发布了它的后继者,即针对触摸屏、拥有全新外观和体验的Windows8微软希望这个全新设计会成为台式机、便携式电脑、笔记本电脑、平板电脑、手机、家庭影院电脑等各种设备上的主流操作系统。然而,到目前为止,其市场渗透相比Windows7而言要慢很多。
个人计算机世界中的另一个主要竞争者是UNIX(及其各种变种)。UNIX在网络和企业服务器等领域很强大,在台式机、笔记本电脑、平板电脑以及智能手机上也很常见。在基于x86的计算机上,Linux成为学生和不断增加的企业用户替代Windows的流行选择。
顺便说明一下,在本专栏中我们使用x86这个术语代表所有使用指令集体系结构家族的现代处理器这类处理器的源头可以追溯到20世纪70年代的8086芯片。很多像AMD和Intel这样的公司制造的处理器底层实现大相径庭:32位或64位、核或多或少、流水线或深或浅,等等。然而对程序员而言,它们看起来都是相似的,并且都能运行35年前写的8086代码。在需要强调不同处理器的差异时,我们会提到明确的模型,并且使用x86-32和x86-64分别表示32位和64位的变种。
FreeBSD是一个源自Berkeley的BSD项目,也是一个流行的UNIX变体。所有现代Macintosh计算机都运行着FreeBSD的某个修改版。在使用高性能RISC芯片的工作站上,UNIX系统也是一种标准配置。它的衍生系统在移动设备上被广泛使用,例如那些运行iOS7和Android的设备。
尽管许多UNIX用户,特别是富有经验的程序员更偏好基于命令的界面而不是GUI,但是几平所有的UNIX系统都支持由MIT开发的称为X Window的视窗系统(如众所周知的X11)。这个系统具有基本的视窗管理功能,允许用户通过鼠标创建、删除、移动和变比视窗。对于那些希望有图形系统的UNIX用户,通常在X11之上还提供一个完整的GUI,如Gnome或KDE,从而使得UNIX在外观和感觉上类似于Macintosh或MicrosoftWindows。
另一个开始于20世纪80年代中期的有趣发展是,那些运行网络操作系统和分布式操作系统(Tanenbaum和Van Steen,2007)的个人计算机网络的增长。在网络操作系统中,用户知道多台计算机的存在,能够登录到一台远程机器上并将文件从一台机器复制到另一台机器,每台计算机都运行自己本地的操作系统,并有自己的本地用户(或多个用户)。
网络操作系统与单处理器的操作系统没有本质区别。很明显,它们需要一个网络接口控制器以及一些底层软件来驱动它,同时还需要一些程序来进行远程登录和远程文件访问,但这些附加成分并未改变操作系统的本质结构。
相反,分布式操作系统是以一种传统单处理器操作系统的形式出现在用户面前的,尽管它实际上是由多处理器组成的。用户应该不知晓自己的程序在何处运行或者自己的文件存放于何处,这些应该由操作系统自动和有效地处理。
真正的分布式操作系统不仅仅是在单机操作系统上增添一小段代码,因为分布式系统与集中式系统有本质的区别。例如,分布式系统通常允许一个应用在多台处理器上同时运行,因此,需要更复杂的处理器调度算法来获得最大的并行度优化。
网络中的通信延迟往往导致分布式算法必须能适应信息不完备、信息过时甚至信息不正确的环境。这与单机系统完全不同,对于后者,操作系统掌握着整个系统的完备信息。
6.第五代(1990年至今):移动计算机
自从20世纪40年代连环漫画中的Dick Tracy警探对着他的“双向无线电通信腕表”说话开始,人们就在渴望一款无论去哪里都可以随身携带的交流设备。第一台真正的移动电话出现在1946年并且重达80斤。你可以带它去任何地方,前提是你得有一辆拉着它的汽车。
第一台真正的手持电话出现在20世纪70年代,大约2斤重,绝对属于轻量级。它被人们爱称为“砖头”。很快,每个人都想要一块这样的“砖头”。现在,移动电话已经渗入全球90%人口的生活中。我们不仅可以通过便携电话和腕表打电话,在不久的将来还可以通过眼镜和其他可穿戴设备打电话。而且手机这种东西已不再那么引人注目,我们在车水马龙间从容地收发邮件、上网冲浪、给朋友发信息、玩游戏,一切都是那么习以为常。
虽然在电话设备上将通话和计算合二为一的想法在20世纪70年代就已经出现了,但第一台真正的智能手机直到20世纪90年代中期才出现。这部手机就是诺基亚发布的N9000,它真正做到了将通常处于独立工作状态的两种设备合二为一:手机和个人数字助理(Personal Digital Assistant,PDA)。1997年,爱立信公司为它的GS88“Penelope”手机创造出术语智能手机(smartphone)。
随着智能手机变得十分普及,各种操作系统之间的竞争也变得更加激烈,并且形势比个人电脑领域更加模糊不清。现在,谷歌公司的Android是最主流的操作系统,而苹果公司的iOS也牢牢占据次席,但这并不会是常态,在接下来的几年可能会发生很大变化。在智能手机领域唯一可以确定的是,长期保持在巅峰并不容易。
毕竟,在智能手机出现后的第一个十年中,大多数手机自首款产品出厂以来都运行着SymbianOS。Symbian操作系统被许多主流品牌选中,包括三星、索尼爱立信和摩托罗拉,特别是诺基亚也选择了它。然而,其他操作系统已经开始侵吞Symbian的市场份额,例如RIM公司的Blackberry OS(2002年引入智能手机)和苹果公司的iOS(2007年随第一代iPhone发布)。很多公司都预期RIM能继续主导商业市场,而iOS会成为消费者设备中的王者。然而,Symbian的市场份额骤跌。2011年,诺基亚放弃Symbian并且宣布将Windows Phone作为自己的主流平台。在一段时间内,苹果公司和RIM公司是市场的宠儿(虽然不像曾经的Symbian那样占有绝对地位),但谷歌公司2008年发布的基于Linux的操作系统Android,没有花费太长时间就追上了它的竞争对手。
对于手机厂商而言,Android有着开源的优势,获得许可授权后便可使用。于是,厂商可以修改它并轻松地适配自己的硬件设备。并且,Android拥有大量软件开发者,他们大多通晓Java编程语言。即使如此,最近几年也显示出Android的优势可能不会持久,并且其竞争对手极其渴望从它那里夺回一些市场份额。