《操作系统之哲学原理(第2版)》——— 操作系统的发展历史

Posted SSIrreplaceable

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《操作系统之哲学原理(第2版)》——— 操作系统的发展历史相关的知识,希望对你有一定的参考价值。

《操作系统之哲学原理(第2版)》本书对操作系统的核心内容进行了全面分析,包括操作系统的发展历史和基本概念、进程与线程、内存管理、文件系统、输入与输出、多核环境下的进程调度和操作系统设计。本书用大量生活实例,生动地解释了操作系统中的主要难点和模糊点:锁的实现、同步机制的发展轴线、纯粹分段到段页式的演变、多核环境下的进程同步与调度和操作系统设计等内容。下面介绍操作系统的发展历史。

第一阶段:状态机操作系统(1940年以前)

这是计算机处在萌芽时期出现的操作系统。这种操作系统运行在英国人巴贝斯(Babbes)想象中的自动机中。所谓状态机操作系统实际上算不上是我们现在通常所定义的操作系统,而是一种简单的状态转换程序:根据特定输入和现在的特定状态进行状态转换而已。这个时候的计算机也不是现代意义上的计算机,而是所谓的自动机,其功能非常简单,可以用原始来形容。能做的计算也只限于加减法。这个时代的操作系统没有什么功能,不支持交互命令输入,也不支持自动程序设计,甚至这个时候还没有存储程序的概念。

驱动这一阶段操作系统的动力是个人英雄主义。因为此时尚无任何计算机工业、计算机研究及计算机用户。计算机及其操作系统的发展完全是某些人的个人努力。

这个阶段因为计算机刚刚出现,没有多少人能够接触到计算机,自然不存在什么安全问题。

这个阶段没有操作系统。如果非要说有的话,人就是这个时代的操作系统:因为自动机的一切动作均是人在操控的。

第二阶段:单一操作员单一控制端操作系统(20世纪40年代)

这种单一操作员单一控制终端(Single Operator,Single Console,SOSC)的操作系统是在刚出现计算机时人们能想到的最直观的控制计算机的方式。这个时候的代表机型为美国宾夕法尼亚大学与其他机构合作制作的ENIAC计算机。这是第一台电子计算机,但不是第一台计算机。在这之前有个英国人造了一部机械计算机,通过手柄摇动进行计算。在ENIAC刚造出来的时候,谁都不知道计算机是怎么回事,所以没有操作系统的整体概念,唯一能想到的就是提供一些标准命令供用户使用,这些标准命令集合就构成了我们的原始操作系统SOSC。

SOSC操作系统的设计目的是满足基本功能,并提供人机交互。在这种操作系统下,任何时候只能做一件事,即不支持并发和多道程序运行。操作系统本身只是一组标准库函数而已。操作系统本身并不自我运行,而是等待操作员输入命令再运行。用户想使用什么服务,就直接在命令行键入代表该服务的对应操作系统的库函数名(文件名)即可。这种操作系统的资源利用率很低:你输入一个命令就执行一个库函数,拨一下动一下。当操作员在思考时或进行输入输出时,计算机则安静地等待。当然了,从人的角度来看,效率并不低,你键入什么,计算机就立即执行什么。但从机器的角度考虑,因为时刻都等着人相对较慢的动作,效率就太低了。

由于这个时代的计算机很稀少,整个世界也只有几台,而人却不是,提高计算机的利用率就变得十分重要。

第三阶段:批处理操作系统(20世纪50年代)

为了提高单一操作员单一控制终端的操作系统SOSC的效率,人们提出了批处理操作系统。在仔细考察了SOSC后,人们发现,SOSC效率之所以低下,是因为计算机总是在等待人的下一步动作,而人的动作总是很慢。因此,人们觉得,如果去掉等待人的时间,即让所有的人先想好自己要运行的命令,列成一个清单,打印在纸带上,然后交给一个工作人员来一批一批地处理,效率不就提高了吗?这样就形成了批处理操作系统。

批处理操作系统的代表、第二代通用计算机IBM的 1401和7094等,就是这样通过减少人机交互的时间而达到CPU和输入输出利用率的改善。批处理的过程是:用户将自己的程序编在卡片或纸带上,交给计算机管理员处理。管理员在收到一定数量的用户程序后,将卡片和纸带上的程序和数据通过IBM 1401机器读入,并写到磁带上。这样每盘磁带通常会含有多个用户的程序。然后,计算机操作员将这盘磁带加载到IBM 7094上,一个一个地运行用户的程序,运行的结果写在另一个磁盘上。所有用户程序运行结束后,将存有结果的磁盘取下来,连到IBM 1401机器上打印结果,然后就可以将打印结果交给各个用户了。

很显然,在批处理下,操作系统的功能和复杂性均得到提升。在SOSC环境下,每个用户自己控制程序的开始和结束。而在批处理下,很多用户的程序一个接一个地存放在磁带上,用户本人并不在场,无法自己控制程序的开始和结束。而这个任务就交给了批处理操作系统。负责这个任务的操作系统功能就称为批处理监视器(batch monitor)。而整个批处理操作系统就是由批处理监视器和原来的操作系统库函数组成的,如图2-1所示。

批处理监视器的功能就是按部就班地执行用户的程序。这个时代的操作系统仍然只能在同一时间执行一个程序,但此时文件的概念已经出现。之前在SOSC诞生时期没有文件的概念。为什么到批处理时期出现了文件的概念呢?因为磁带上的多个用户程序必须以某种方式进行隔离,这需要一个抽象的东西来区分。这个抽象的东西不是别的,就是文件。除了文件管理外,此时的操作系统还能够管理读卡机、磁带、打印机等。此种操作系统的任务就是加载一个程序、运行、打印结果,然后执行下一个程序。批处理操作系统的两个部分的关系也很清楚:一部分是控制程序执行,一部分是支持程序执行。

批处理操作系统的重要代表有IBM开发的FORTRAN 监视系统FMS,用于IBM 709;IBM开发的基于磁带的工作监控系统IBSYS,用于IBM 7090 和7094;以及密歇根大学开发的UMES(密歇根大学执行系统),用于IBM 7094。

密歇根大学执行系统(UMES):操作系统的黎明

在当时,世界上最先进的计算机是IBM 7094。作为礼物,IBM分别给密歇根大学(UM)和麻省理工学院(MIT)各捐赠了一台。密歇根大学坐落在密歇根湖和伊犁湖旁,麻省理工学院紧邻大西洋。IBM的高管喜欢搞帆船比赛。每次搞帆船比赛都需要使用计算机来安排赛程、计算成绩、打印名次等。因此,IBM在捐赠机器给UM和MIT时有一个要求:平时归学校使用(MIT的机器还需要与新英格兰周围的学校如达特茅斯学院等共享),一旦进行帆船比赛就得停下一切计算任务为IBM服务。这当然使得学校很恼火。因为那个时候很难在程序执行中间停下来,将中间结果保留等以后再执行。只要停下来,就要从头再来。

于是,密歇根大学的R.M.Graham、Bruce Arden和Bernard Galler在1959年开发出了当时著名的MAD/UMES系统,即密歇根算法译码器和密歇根大学执行系统。密歇根算法译码器是一种可扩展的程序设计语言,而密歇根大学执行系统是一个能够保存中间结果的操作系统。有了这个系统,密歇根大学的计算机运行基本上不受IBM帆船比赛所造成的中断的影响。MIT在知道这个系统后,将其安装到自己的7094机器上。MAD编程语言随后又进一步移植到Philco、Univac和CDC等机器上,其很多功能后来被加入到FORTRAN语言里。

驱动这个阶段操作系统发展的动力是改善效率。因为机器的昂贵,我们不能容忍机器在操作员思考或I/O设备工作期间闲置起来。

第四代:多道批处理操作系统(20世纪60年代)

虽然批处理操作系统无需人机交互过程就能在一定程度上提高计算机的效率,但还是不那么令人满意。因为CPU和I/O设备的运行是串行的,即在程序进行输入输出时,CPU只能等待。CPU需要不断地探询I/O是否完成,因而不能执行别的程序。

由于I/O设备的运行速度相对于CPU来说实在太慢,这种让高速设备等待低速设备的状况令人颇感痛心。人们又想,能否将CPU和I/O进行并发呢?即在一个程序输入输出时,让另一个程序继续执行。换句话说,能否将CPU运行和I/O设备的运行重叠起来而改善整个系统的效率呢?答案是肯定的,不过需要付出代价。因为CPU和I/O重叠需要我们将多个程序同时加载到计算机内存里,从而出现了多道批处理操作系统。

在多道批处理操作系统时代,同一时间可以运行多个程序(宏观上),但控制计算机的人还是一个,即用户将自己的程序交给计算机管理员,由管理员负责将用户的程序加载到计算机里并执行。由于多个程序同时执行,因此操作系统需要能够在多个程序(工作)之间进行切换,并且能够管理多个I/O设备,同时还需要能够保护一个进程不被另一个进程干扰。

显而易见,操作系统的功能和复杂性都比简单批处理时复杂得多:既要管理工作,又要管理内存,还要管理CPU调度。

OS/360(M):划时代的多道批处理操作系统

典型的多道批处理操作系统是IBM的OS/360(M),它由密歇根大学为IBM公司开发(这是该操作系统名称后面的M所代表的意义)。它运行在IBM的第三代计算机System/360、System370、System 4300等上。OS/360在技术上和理念上都是划时代的操作系统,引进了内存的分段管理,但在商业上没有获

得广泛使用。因为它有很多错误。这些错误很难避免,划时代、崭新的东西很难一次做到完美。尽管如此,OS/360还是被公认为一个划时代的操作系统,它同时支持商业和科学应用,而之前的操作系统只能支持科学计算。IBM随后对OS/360(M)进行了改进,使其逐渐演变为一个功能强大、性能可靠的操作系统。这个改进的版本被命名为OS/390。该操作系统提供了资源管理和共享,允许多个I/O同时运行,以及CPU和磁盘操作可以并发。390获得了广泛的商业应用,一直到今天。

驱动这个阶段操作系统发展的动力仍然是改善效率。因为机器的昂贵,我们不能容忍机器(CPU)在I/O设备工作期间闲置起来。同时,我们对计算机的要求也开始多起来。因此,这个阶段还伴随着对用户不断增长的要求进行满足。

第五代之一:分时操作系统(20世纪70年代)

多道批处理操作系统的出现使计算机的效率(主要是吞吐率)大大提高。不过这时人们又提出了另外一个问题:将程序制作在卡片上交给计算机管理员来统一运行,将使得用户无法即时获知程序运行的结果。而这是一个大问题。想想如果你编写了一个程序,却需要让别人去运行,并等上若干天才能知道结果,这个滋味显然不好受。万一计算机管理员疏忽了,忘记运行你的程序,或者操作错误,导致程序丢失,情况就更加糟糕。

基于上述原因,人们考虑能否让人回到计算机前面来,每个人自己管自己的程序,但是,大家的程序可以同时运转。人的因素又引了回来。这看上去与原始的SOSC似乎一样,但有个关键的不同:多个人同时连在计算机上,每个人看做另外的一个I/O终端而已。每个用户拥有一个终端显示器,这些终端显示器经过RS232穿行线缆与计算机连接。终端显示器只能接收和发送文本命令和信息。计算机在所有连接的终端用户之间进行分时,即分给每个人有限的时间,只要时间到了,就换一个进程。这种时分切换下的操作系统就是分时操作系统。

在分时操作系统下,任意时间可以运行多个程序,且用户直接与计算机交互,当场调试程序。这就和单一操作员单一终端不一样了,从人本转成了物本。在单一操作员单一终端的情况下,一切等着人。以前执行一条命令就等人,分时系统就是人等机器。这个模型带来一个直接的结果,就是机器不再等你,等你想问题时机器就切换到别的程序,等你想好了机器我再切换回来,接受你的输入。就这样,计算机就在很多人之间来回转,你敲个命令就响应,然后切换走。如果时间掌握得好,用户输入完一个命令计算机正好回来,用户就无需等待。当然,如果一个用户打字速度足够快,可能会觉得计算机慢;如果打字速度非常慢,就有可能觉得计算机很快。不同的人感觉有可能完全不同。

显然,和前面几代的操作系统比,分时操作系统要复杂得多。相比于多道批处理系统,最主要的变化是资源的公平管理。在多道批处理下,公平不公平没有人知道。大家交了工作后只管回家等结果。至于自己的程序排在谁前谁后,抑或占用了多少CPU时间是无关紧要的。现在,大家都坐在计算机显示终端前面,任何的不公平将立即感觉到。因此,公平的管理用户的CPU时间就变得非常重要。除此之外,池化(pooling)、互斥、进程通信等机制相继出现,使得分时操作系统的复杂性大为增加。

傲慢的代价:MULTICS操作系统

分时操作系统里面最著名的应该是MULTICS和UNIX。前面讲过,IBM在其捐赠7094给UM和MIT时附加了一些条件,而这些附加条件使得学校非常恼火,但又不能拒绝(想想别的学校吧,他们连这种恼火的机会都没有)。为此,UM开发了UMES系统以应对这个问题。MIT则将UMES移植到了自己的7094中。后来大家觉得只保存中间结果还不是最好的办法,毕竟频繁地保存中间结果等帆船比赛结束后再进行重载仍存在麻烦,于是就想开发一个可支持多用户的分时操作系统,以便一劳永逸地解决这个问题。这个时候MIT想到了密歇根的R.M.Graham,将其请来。在R.M.Graham的主持下,来自贝尔实验室、DEC(Digital Equipment Corporation,美国数字仪器公司)和MIT的设计人员同

仇敌忾(针对IBM的傲慢),一起努力,开始了MULTICS分时操作系统的研制。

不过,在MULTICS还没有开发出来时,开发团队内部出现了分歧,贝尔实验室的几个人越来越看不惯DEC和MIT的人,觉得这伙人的思维方式跟自己不一样,做的东西不专业,觉得和他们一起做研究把自己的水平降低了,就自立门户,搞出了UNIX,并因此获得图灵奖。而UNIX的出现,使得MULTICS从一面世,就不能挺立,真是中国历史上“既生瑜,何生亮”在计算机操作系统历史上的完美演绎。不过,MIT最后还是做出了一个应用于部分商用领域的分时操作系统CTSS(Compatible Time Sharing System)。而DEC公司则做出了非常成功的VMS操作系统。

分时操作系统通常运行在第三代计算机PDP、VAX和CRAY上,其中PDP、VAX是DEC公司生产的,不过DEC已经不复存在。CRAY是CRAY公司生产的。

驱动这个阶段操作系统发展的动力是响应时间和对越来越多资源的管理。因为机器的昂贵,我们不能容忍机器(CPU)在I/O设备工作期间闲置。同时,因为人的时间宝贵,我们不能容忍人们坐在机器前漫长等待。因此发明了分时操作系统来解决这两个问题。因为分时引入的多道程序设计,又造成操作系统的空前复杂,我们需要应对竞争、通信、死锁、保护等一系列的新功能。因此,操作系统在本阶段变得相当复杂。

第五代之二:实时操作系统

随着人类技术的进步,计算机得到了广泛应用。其中的一种应用称为进程控制系统,即使用计算机监控某些工业进程,并在需要的时候采取行动。所有这些系统都具备一个特点:计算机对这些应用必须在规定时间内做出响应,否则有可能发生事故或灾难。例如,在工业装配线上,当一个部件从流水线上一个工作站流到下一个工作站时,这个工作站上的操作必须在规定时间内完成,否则就有可能造成流水线瘫痪,而影响企业的生产和利润。又例如,在导弹防卫系统中,对来袭导弹的轨迹计算必须在规定时间内完成,否则就可能被来袭导弹击中而无法做出反应。其他对计算机响应时间有要求的系统包括核反应堆状态监视系统、化学反应堆监视系统、航空飞行控制系统等。

这种对计算机响应时间有要求的系统通常称为临界系统或应用。而为了满足这些应用对响应时间的要求,人们开发出了实时操作系统。实时操作系统是指所有任务都在规定时间内完成的操作系统,即必须满足时序可预测性(timing predictability)。需要注意的是,实时系统并不是指反应很迅速的系统,而是指反应具有时序可预测性的系统。当然了,在实际中,实时系统通常是反应很迅速的系统。但这是实时系统的一个结果,而不是其定义。

显然,实时操作系统的最重要部分就是进程或工作调度。只有精确、合理和及时的进程调度才能保证响应时间。当然,对资源的管理也非常重要。没有精密复杂的资源管理,确保进程按时完成就成了一句空话。另外,基于其使用环境,实时操作系统对可靠性和可用性要求也非常高。如果在这些方面出了问题,时序可预测性将无法达到。

实时系统通常又分为软实时系统和硬实时系统。软实时系统在规定时间得不到响应所产生的后果是可以承受的,如流水装配线。即使装配线瘫痪,也只是损失了资金;而硬实时系统在得不到实时响应后则可能产生不能承受的灾难,如导弹防卫系统。如果反应迟钝,结果就可能是严重损失。

商用实时操作系统的代表有VxWorks和EMC的DART系统。

第六代:现代操作系统(1980年以后)

在20世纪80年代后期,计算机工业获得了井喷式的发展。各种新计算机和新操作系统不断出现和发展,计算机和操作系统领域均进入了一个百花齐放、百家争鸣的时代。尤其重要的是工作站和个人机的出现,使计算机大为普及。独享计算机也可以负担得起。这个时候的操作系统代表有:DOS、Windows、UNIX、Linux和各种主机操作系统,如VM、MVS、VMS等。DOS、Windows、UNIX、Linux通常称为开放式系统操作系统,分别运行在PC机、VAX和Workstation上。操作系统也重新回到子函数库的状态。

随着硬件越来越便宜,个人机出现在人们的视野中。人们可以拥有自己的计算机,而无需与他人分享。在刚刚出现个人机的时候,拥有个人机的人感觉很好,而那些需要与别人共享小型机的人则感觉不好。由于个人机由用户一个人独享,分时操作系统的许多功能就无须存在。因此,个人机操作系统又变回到了标准函数库系统。这时最著名的当属DOS、Windows 3X、苹果机操作系统(Mac OS)等。

但在独享了一阵个人机后,人们发现,没有分时功能的操作系统使一些事情无法完成。这是因为,虽然只有一个人在使用机器,但这个人可能想同时做好几件事,例如,同时运行好几个程序,没有分时功能这是不可能的。于是,人们觉得需要对个人机操作系统进行改善,将各种分时功能又加入了操作系统。

这时候就需要对程序进行保护,因为现在运行多个程序。虽然都是你的东西,但是也不能混淆。于是,Windows NT出现了,Xenix出现了,Ultrix出现了。

这个时候的另外一个特征是网络的出现。网络促进了网络操作系统和分布式操作系统的出现。对于网络操作系统来说,其任务是将多个计算机虚拟成一个计算机。传统的网络操作系统是在现有操作系统的基础上增加网络功能,而分布式操作系统则是从一开始就把对多计算机的支持考虑进来,是重新设计的操作系统,所以比网络操作系统效率高。分布式操作系统除了提供传统操作系统的功能外,还提供多计算机协作的功能。

操作系统的演变过程

计算机操作系统的演变可以分为三条发展线索,分别是主机操作系统、服务器操作系统和个人机操作系统。图2-2简略地表示了这三条线索上操作系统的演变历史。

图2-2最左面的3列代表主机操作系统的演变,最右面的两列代表个人机操作系统的演变,中间列出了服务器操作系统的演变。当然,到最后,这三大块的界限也不是很清晰。

主机操作系统的演变从输入输出控制系统IOCS和IBSYS开始,经历OS/360的里程碑式的突破,逐步演变为VS、MVS和VM三个系列(其中VM系列还吸取了UMES和CTSS的某些特征)。目前IBM是这三个系列的开发商和运营商,其VM操作系统经历多代后已经变得十分可靠。美国大型金融证券公司都在使用它们。

服务器操作系统的演变从UMES开始,经CTSS演变为IBM的MVS和VM操作系统,经MULTICS演变为UNIX系统。在20世纪80年代初,UNIX一分为二:由AT&T(美国电话电报公司)提供的System系列和由UCB提供的BSD系列。XENIX为微软公司为PC机而移植的AT&T版的UNIX操作系统。AT&T是UNIX的鼻祖,UCB则在美国国防部的支持下开发了BSD(伯克利软件分配)系列。

IBM和斯坦福大学看到AT&T和UCB的UNIX软件后,也不甘示弱,分别研发了AIX和SUN OS(SUN是Stanford University Networks(斯坦福大学网络)的缩写)。这样UNIX就形成了4个系列:AT&T的System系列、IBM的AIX系列、SUN的SUN OS系列以及UCB的BSD系列。

20世纪90年代中期,在美国国防部停止对BSD的支持后,UCB亦停止了BSD系列的研发,而AT&T也在与BSD焦头烂额的较量中放弃了System系列。Linux则趁AT&T和UCB忙于与对方较量的时候发展起来。卡内基梅隆大学(Carnegie Mellon University)在看到UCB和斯坦福大学都研发了UNIX后,慌忙开发了个MACH操作系统。MACH为微内核操作系统,在学术界得到了一定的使用,但由于其运行效率低下而没有获得商业上的广泛应用。这样UNIX的商业使用版本就剩下AIX、SOLARIS系列(SUN OS的后续版本)和Linux系列。后来由于惠普公司(HP)加入到服务器行列使得UNIX家族又增加了一个版本:HPUX。在UNIX家族中,SUN公司濒临灭亡的命运令SOLARIS的前途堪忧。

个人机操作系统的演变可以说是从DOS开始的。微软公司在1980年以100美元的成本买断了DOS的版权。而DOS的功能很简单:文件没有文件夹,所有文件都保存在同一个地方,谁都可以删除操作系统。当然那时也没有那么多人从事破坏活动。在看到苹果公司的Mac OS的图形界面后,微软公司给DOS增加了一个图形界面,称为Windows。Windows在发展了几个版本后,到Windows 98时,微软公司改变了战略。因为到当时为止,所有的Windows并不是真正的操作系统,而是覆盖在DOS上的一个用户图形界面,并不支持多道编程。微软高管比尔·盖茨亲自打电话给DEC的David Cutler,请其过来主持新一代Windows操作系统的研发工作。

David Cutler是DEC公司VMS操作系统的主要设计人员。他从DEC带过来一批人到微软公司工作,设计出了Windows NT操作系统。这是一个真正的支持多道编程的操作系统。Windows NT继承了VMS的优良结构和Windows 3X的图形界面,在一推出就获得了市场的认可。Windows NT经过几代演变,成为现在的Windows Vista。Windows操作系统系列也从单一的支持个人机演变为支持个人机和服务器的“双料”操作系统。

操作系统的分类

操作系统基本上可以分为:主机操作系统,如OS/260、OS/390、CTSS;服务器操作系统,如UNIX、Windows 2000、Linux;多CPU计算机操作系统,如Novell Netware;个人计算机操作系统Windows 2000、Windows XP、Mac OS;实时操作系统,如VxWorks、DART;嵌入式操作系统,如Palm OS、Windows CE、android、Symbian等。

同一台计算机可以运行不同的操作系统,而同一个操作系统也可以运行在不同的计算机上。例如,个人机上可以运行的操作系统包括DOS、Linux、NeXTSTEP、Windows NT、SCO UNIX等DEC VAX计算机上可以运行的操作系统有VMS、Ultrix32、BSD UNIX等。UNIX操作系统可以运行在XENIX 286、APPLE A/UX、CRAYY/MP、IBM 360/370等计算机上;Windows NT/XP可以运行在Intel 386和Itaninum、DEC的Alpha、摩托罗拉的PowerPC和MIPS计算机的MIPS上。

当然,运行在不同机器上的UNIX版本并不一样,例如运行在IBM 360/370上的UNIX是Amdahl UNIX UTS/580和AIX/ESA,而运行在CRAYY/MP计算机上的UNIX是AT&T System V。

操作系统的未来发展趋势

随着计算机不断普及,操作系统的功能会变得越来越复杂。在这种趋势下,操作系统的发展将面临两个方向的选择:一是向微内核方向发展,二是向大而全的全方位方向发展。微内核操作系统虽然有不少人在研究,但在工业界获得的承认并不多。这方面的代表是MACH系统。在工业界来说,操作系统是向着多功能、全方位方向发展。Windows XP操作系统现在有4000万行代码,Windows 7的代码规模更大,某些Linux版本有2亿行代码,SOLARIS的代码行数也在不断增多。鉴于大而全的操作系统管理起来比较复杂,现代操作系统采取的都是模块化的方式,即一个小的内核加上模块化的外围管理功能。

例如最新的SOLARIS将操作系统划分为核心内核和可装入模块两个部分。其中核心内核分为:系统调用、调度、内存管理、进程管理、VFS框架、内核锁定、时钟和计时器、中断管理、引导和启动、陷阱管理、CPU管理;可装入模块分为:调度类、文件系统、可加载系统调用、可执行文件格式、流模块、设备和总线驱动程序等。

最新的Windows将操作系统划分成内核(kernel)、执行体(executive)、视窗和图形驱动和可装入模块。Windows执行体又划分为:I/O管理、文件系统缓存、对象管理、热插拔管理器、能源管理器、安全监视器、虚拟内存、进程与线程、配置管理器、本地过程调用等。而且,Windows还在用户层设置了数十个功能模块,可谓功能繁多,结构复杂(见图2-3)。

进入21世纪以来,操作系统发展的一个新动态是虚拟化技术和云操作系统的出现。虚拟化技术和云操作系统虽然听上去有点不易理解,它们不过是传统操作系统和分布式操作系统的延伸和深化。虚拟机扩展的是传统操作系统,将传统操作系统提供的一个虚拟机变成多个虚拟机,从而同时运行多个传统操作系统;云操作系统扩展的是分布式操作系统,而这种扩展有两层意思:分布式范围的扩展和分布式从同源到异源的扩展。虚拟机技术带来的最大好处是闲置计算资源的利用,云操作系统带来的最大好处是分散的计算资源整合和同化。

讨论:操作系统虚拟化和虚拟化的操作系统

随着虚拟化及云计算等技术的出现和不断演变,人们心目中的各种传统计算技术、模型和理论都在发生改变。操作系统作为计算机的核心系统软件,其面临的调整或挑战可能更为深刻,也更为细腻。有人断言,虚拟化将迫使操作系统退出历史舞台,因为操作系统的功能将由虚拟机来替换。但情况的发展似乎并没有为这种观点提供佐证。

不论从管理者的角度看,还是从魔术师的角度看,虚拟机本身就是一个操作系统,只要虚拟机在运行,操作系统就在运行,只不过更换了一个名字而已。因此,所谓的操作系统将退出历史舞台一说实属偷换概念。当然,虚拟机与传统的操作系统有所不同,虚拟机设计的侧重点、功能范畴、某些功能的实现哲学并不完全等同于传统的操作系统。也许,那些声称操作系统将退出历史舞台的人指的是传统的非虚拟机操作系统。

事实上,传统的操作系统也不会退出历史舞台。不过,其在虚拟化时代发挥作用的方式有可能发生变化。有迹象表明,传统操作系统扮演的角色在全虚拟化环境下有所收敛并出现专攻趋势。例如,一种已经露出端倪的倾向是将应用软件和操作系统打包发布,即应用程序与其赖以运行的操作系统的部分功能作为一个软件包发布出来。用户运行软件时不再需要先安装操作系统,只需要安装一个虚拟机即可。这样不同的软件包可以打包不同的操作系统,用户无需因为购买了不同的软件而需要安装不同的操作系统。根据应用软件的具体情况,被打包的操作系统功能部分可能很小,也可能较大,但由于一个应用软件常常不会用到一个传统操作系统各方面的功能,因此这种打包里面的操作系统功能将不包括整个传统操作系统的功能。

在这种打包发布模式下,用户的运行环境只有虚拟机,而与传统操作系统剥离。应用软件开发商无需针对不同的操作系统为自己的软件开发多个版本,而只需要支持一种操作系统即可。由于一个应用只为一个操作系统而写,因此应用软件开发商可以选择一个最能增加应用软件稳定性的操作系统作为平台来打包发布。这样一个重要的问题就是应用软件开发商如何选择最合适的操作系统。考虑的因素当然包括安全性、稳定性、易用性、功能性和效率。至于每一个因素所应该占的比重到底是多少,当然是仁者见仁、智者见智,也因软件开发商的不同而不同。

无论虚拟化或者去虚拟化,无论操作系统与应用软件打包还是不打包,一个不变的因素是扮演魔术师与管理者角色的这种软件是不可或缺的,不管这个角色是叫做操作系统,还是叫做虚拟机,或者是其他更加令人匪夷所思的名称。其实,名称叫什么不要紧,关键的问题是学习掌握如何扮演魔术师和管理者。而达到这个目的途径就是——学习操作系统。

操作系统奇异点

随着人们不断提高对信息安全重视程度,如何构建可靠、可用和安全的操作系统就成为一个十分重要的课题。而对可靠、可用和安全的追求无疑将令操作系统更复杂,操作系统的规模也将不断增大。从UNIX的1400行代码到Windows XP的4000万行代码,这完全是一种爆炸式增长。而爆炸式增长的后果就是,操作系统设计已经变得极为复杂和困难。以致商用操作系统在关键机制的实现上都或多或少地进行了偷工减料,从而严重影响了操作系统的稳定性。另外,规模的庞大使得没有什么人能够完全理解一个完整的操作系统,而这种状况同样将限制操作系统的可靠性、可用性和安全性。这迫使我们不得不思考:操作系统能在复杂性和规模不断增加的情况下保持正确性和可靠性吗?它能在今天的云计算时代取得突破,而达到我们所祈望的“操作系统奇异点”(OS singularity)吗?

经上写着,不要预测将来。那就让我们拭目以待吧……

以上是关于《操作系统之哲学原理(第2版)》——— 操作系统的发展历史的主要内容,如果未能解决你的问题,请参考以下文章

操作系统-进程PV操作——哲学家问题

与 Ben Ari 的频道就餐哲学家陷入僵局?

《算法之道》精华 经典算法部分

操作系统的哲学原理,以及一些性能测试中的数据分析

计算机组成原理 第2版 课后答案 唐朔飞

第一部分: 马克思主义哲学原理