第一章 引论
Thank lyrh!!!
更新日期:2004年5月24日
操作系统是一种管理计算机硬件的程序,它为应用程序提供了基本的运行条件,并且在计算机用户和计算机硬件之间扮演着中介的角色。操作系统的一个让人感到惊奇的方面就是它们所表现出来的丰富的多样性。大型计算机操作系统的首要设计目标是优化对硬件的使用。个人计算机(PC)操作系统则提供了对复杂的游戏、商业应用,以及对介于二者之间的所有应用软件的支持。手持计算机操作系统则向用户提供了一个环境,用户在此可以方便的利用计算机运行程序。这样,有些操作系统追求易用性,有些追求效率,还有些则是两者的折衷。
要理解什么是操作系统,必须要首先清楚它们是如何发展的。在本章中,我们将从最初的hands-on系统开始,经过多道程序系统和分时系统,到个人计算机系统和手持计算机系统,以此来追寻操作系统的发展。我们也将讨论操作系统的变种,比如,并行系统、实时系统和嵌入式系统。在跨越各种各样的平台时,我们会看到作为一种自然而然的解决方案操作系统是怎样在早期的计算机系统中发展的。
1.1 操作系统是什么?
操作系统几乎是所有的计算机系统的一个重要组成部份。大体上可以将一个计算机系统分为四部分:硬件、操作系统、应用程序和用户(图1.1)。
图1.1
中央处理单元(CPU)、存储器和输入输出(I/O)设备等硬件提供了基本的计算资源。字处理软件、电子制表软件、编译器和网页浏览器等应用程序定义了利用这些资源来解决用户计算问题的方法。操作系统为用户在各种应用程序之间控制和协调着对硬件的使用。
计算机系统由硬件、软件和数据组成。在计算机系统的运行中,操作系统提供了利用这些资源的合理途径。操作系统与政府十分相似。像一个政府,其本身并不能做什么。操作系统仅仅提供了一个环境,其它程序可以在此做有用的工作。可以从两个视角来研究操作系统:用户视角和系统视角。
1.1.1 用户视角
计算机的用户视角随应用接口的不同而变化不一。大多数计算机用户坐在一台由显示器、键盘、鼠标和系统单元组成的个人计算机前面。这样的系统针对独占资源的单个用户,以求最优化用户的工作(或娱乐)。这样,操作系统的主要设计目标是易用性,同时也兼顾了性能,而没有为利用资源考虑太多。对用户来说,性能是非常重要的,但是并不介意系统是不是频繁处于空闲状态,等待缓慢的I/O处理。
有些用户使用连接到大型计算机或小型计算机的终端。有些用户通过终端访问同一台计算机,他们共享资源并且可以进行信息交流。这种操作系统的设计目标是最优化资源利用,以保证对现有的所有CPU时间、存储器和I/O设备的高效利用,使每个用户都公平地分享资源。
有些用户使用工作站,并与其它工作站或服务器的网络互联。这些用户在他们的工作中互相提供资源,也共享资源,例如:网络和服务器(文件、计算和打印服务器)。所以这种操作系统的设计是为了协调个人的可用性和资源的利用率。
最近,各种各样的手持计算机流行起来。这些设备大多独立运行,一般由个人用户独自使用。有些通过有线(这种更为普遍)或无线的方式与网络连接。受到电源容量和操作界面的限制,他们仅能执行相关的远程操作。这种操作系统主要面向个人应用,节能也是件很重要的事情。
有些计算机没有或者仅有很少的用户视角。例如:家用设备和汽车上的嵌入式计算机可能仅仅有一个数字键盘和能够开关表示状态的指示灯。但是,它们和它们的操作系统的运行大多不需要用户的介入。
1.1.2 系统视角
从计算机视角看来,操作系统是与硬件最为密切的程序。我们可以视操作系统为资源分配程序。一个计算机系统有许多资源(硬件和软件,系统工作时可能会需要它们):CPU时间、内存空间、文件存储空间、I/O设备等等。操作系统扮演着这些资源的管理者的角色。面对为数众多而且可能相互冲突的资源请求,操作系统必须决定如何为特定的程序和用户分配资源,力求高效、公平。
操作系统视角与用户视角的一个轻微的不同点在于它强调了对各种I/O设备和用户程序的控制需求。操作系统是一种控制程序。控制程序管理用户程序的运行,以防止发生错误和对计算机的不合理利用。它尤其关注对I/O设备的操作和控制。
然而,通常我们没有对操作系统完全充分的定义。操作系统之所以存在是因为他们是构造便于使用的计算环境的合理途径。计算机系统的基本目标是执行用户程序和简化用户问题。基于这个目标构建了计算机硬件。因为纯粹的硬件并不易于使用,于是开发了应用程序。这些应用程序需要一些公共的操作,比如控制I/O设备。于是控制和分配资源的公共功能就被整合到了一个软件中,这就是操作系统。
另外,对于操作系统应该包含哪些部分,我们还没有达成共识。一个简单的观点认为当你向商家订购“操作系统”时就包含了一切。存储器(内存、磁盘和磁带) 的需求和特性包含其中,然而随着系统的不同而差异巨大。(系统的存储容量以吉为单位度量。(1千字节或1KB相当于1,024字节,1兆字节或1MB相当于1,0242字节,1吉字节或1GB相当于1,0243字节,但是计算机制造商往往简单的称1兆为1百万字节,吉为10亿字节。))有些系统拥有不足一兆的存储空间,甚至缺少一个全屏幕的编辑器,相反,有些则需要数百兆的存储空间,并且基于图形视窗系统。一个更为普遍的定义是:操作系统是一个自始至终在计算机中运行的程序(通常称之为内核),其它程序则属于应用程序。操作系统应该由那些部件组成,变得越来越重要了。1998年,美国司法部起诉了微软,状告微软在她的操作系统中集成了太多应用程序,阻碍了应用程序开发商与她的竞争。
1.1.3 系统目标
通过说明它做什么比它是什么更容易给操作系统做定义,但是这样也很困难。有些操作系统的首要目标是用户的易用性。操作系统存在是因为它们被假定为较容易的计算手段。当你看待个人计算机时,这种观点就会异常清晰。
其它操作系统的首要目标是计算机系统的高效性。这是对大型、共享、多用户的系统而言的。这些系统非常昂贵,所以希望它们尽可能的高效。易用性和高效性这两个目标有时相互冲突。过去效率要比易用性更为重要(1.2.1节)。因此许多操作系统理论更为注重对计算资源的优化使用。随着时间的推移,操作系统也在发展,例如UNIX开始时以键盘和打印机作为它的用户接口,限制了用户的易用性。随着时间的过去,硬件变了,UNIX也移植到了新硬件上并提供了更加友好的界面。许多图形用户界面(GUI)诞生了,这允许UNIX在保持其高效性的前提下为用户提供更佳的易用性。
设计操作系统是件相当复杂的工作。设计者要在设计和实现的过程中面对众多的利弊权衡,许多人不仅仅满足于实现,他们还不断的修订和更新操作系统。对于某个操作系统是否达到了其设计目标的讨论时公开的,而且不同的用户各持己见。
要领会操作系统是什么和做什么,让我们考虑它在过去的45年中是如何发展的。通过回顾这个发展,我们可以明确操作系统的共同点,并且理解这些系统如何和为什么会有这样的经历。
操作系统和计算机体系结构在很大程度上相互影响。为了推动对计算机硬件的利用,研究人员开发了操作系统。而后操作系统用户提议改变硬件的设计以求简化他们的工作。在这个简短的历史回顾中,要注意到为了解决操作系统的问题而导致了一些新硬件的引入。
1.2 大型计算机系统
大型计算机系统是最早在商业和科学领域应用的计算机系统。我们在这一节从简单的批处理系统到分时系统来追寻大型计算机系统的成长过程(批处理系统运行一个且仅仅一个应用程序;分时系统允许用户与计算机系统交互)。
1.2.1 批处理系统
早期的计算机是通过控制台运行的体积巨大的机器。通用的输入设备是读卡器和磁带驱动器。输出设备是行式打印机、磁带驱动器和卡片穿孔机。用户不直接与计算机系统交互,而是准备好一个作业(由程序、数据和一些控制信息(控制卡片)组成)并提交给计算机操作员。作业一般以穿孔卡片的形式提交。一段时间之后(数分钟、数小时或数天之后)结果就会出来。输出由程序结果和用于调试的最后的内存和寄存器内容组成。
这些早期计算机中的操作系统相当的简单。它主要的任务是自动的一个一个的传送作业。操作系统总是驻留在内存中(图1.2)。
图1.2
为了提高处理速度,操作员根据作业的需求的相似性将它们分批,然后以组为序来运行它们。这样,程序员只需要把程序留给操作员。操作员根据程序的需求将它们分批,当计算机可用时,运行每一批程序。作业的执行结果将返回给相应的程序员。
因为机械I/O设备的速度本质上就要比那些电子设备慢,所以在这种运行环境中CPU经常处于等待状态。甚至一个慢速的CPU也要以微秒级的速度运行,可以每秒执行数千个指令。而另一方面,即使快速读卡机也只可能每分钟读1200张卡(每秒钟20张)。这样,CPU和I/O设备的速度大约就相差三个数量级或者更多。随着时间的推移,技术的进步和磁盘的引入造就了更快速的I/O设备。然而CPU速度的提高远为迅速,所以问题不但没有解决,反而加剧了。
磁盘的引入允许操作系统将所有的作业保留在一张磁盘上,这胜于串行读卡器。由于直接读取多个作业,操作系统可以实现作业调度,能够高效的利用资源和执行任务。我们讨论了作业和CPU调度的几个重要方面;在第六章中将有详细的讨论。
1.2.2 多道程序系统
作业调度最重要的方面就是多道程序设计。一般而言,单个用户不能总是保持CPU或I/O设备忙碌。通过组织多个作业,多道程序设计提高了CPU的利用率。如此,CPU总是有一个作业可以执行。
其思想是:操作系统同时在内存中保留多个作业(图1.3)。因为可同时保存在内存中的作业数要远小于作业池中的作业数,所以内存中的作业集是作业池中的作业集的一个子集。操作系统从内存中挑选一个作业并执行。最终,作业可能必须等待一些工作(比如说I/O操作)事先完成。而在非多道程序系统中,CPU将处于等待状态。在多道程序系统中,CPU简单的转向执行另外一个作业。当一个作业需要等待时,CPU就执行另外一个,以此类推。最终,第一个作业结束等待并重新获得CPU。既然至少有一个作业需要执行,那么CPU就不会空闲下来。
图1.3
这种思想在日常生活中是很普遍的。一个律师不会每次只为一个委托人工作。当一个案子等待审判或打印文件时,律师可以为另一个案子工作。如果有足够的委托人,就不会因为缺乏工作而无事可做。(空闲的律师往往会成为政客,因为那儿有确定的社会价值保持律师整天忙碌。)
多道程序设计是操作系统必须为用户做出选择的第一个实例。多道程序操作系统也因此有相当大的改进。所有作业在进入系统之后保存在作业池中。作业池中包含了所有存储在磁盘中等待分配内存的进程。如果几个作业准备完毕要被放到内存中,但是有没有足够的空间全部容纳,这时系统必须要从中选择。作业调度做出这个选择,这将在第六章中进行讨论。操作系统从作业池中选择一个作业后就将这个作业调入内存执行。因为同时有多个程序在内存中,所以就需要某种形式的内存管理,第九章和第十章中涉及到这些内容。另外,如果多个作业同时准备好,系统就必须从中做出选择。这是CPU调度的任务,将在第六章中讨论。最后,多个作业的并发运行只能够影响到操作系统的某些部分, 包括进程调度、磁盘存储器和内存管理等。对这些事项的讨论贯穿全书。
1.2.3 分时系统
多道程序系统和批处理系统提供了一个可以高效利用系统资源(例如CPU、存储器和外围设备)的环境,但是没有为用户提供与计算机系统交互的能力。分时技术(或者说是多任务处理)是对多道程序设计的逻辑扩展。通过在多个作业间转换,CPU可以同时执行多个作业,但是这种转换发生的如此频繁以至于用户在程序运行的同时可以与计算机交互。
交互式(或hands-on)计算机系统为用户提供了直接与计算机通信的能力。通过键盘或鼠标,用户直接向操作系统或程序发出指令,然后等待会立即出现的结果。因此,响应时间应该较短——典型的大约在一秒钟之内。
分时操作系统允许多个用户同时共享计算机。因为分时系统中的每个操作或命令往往都非常短,所以每个用户仅仅需要一点CPU时间。系统快速的从一个用户转向另外一个,每个用户却感觉到自己独占了整个计算机系统,即便此时是由多个用户共享。
分时操作系统利用CPU调度和多道程序设计为每个用户提供了分时系统资源的一小部分。每个用户至少有一个独立的程序在内存中。程序在装入内存并执行后通常被视为进程。当一个程序正在运行时,在它结束或需要进行I/O操作之前往往只会执行一小段时间。输入输出可能是交互式的;换句话说,输出要显示给用户,输入则来自用户的键盘、鼠标或其它设备。因为交互式的输入输出典型的运行在一个“人的速度”上,它可能需要很长的时间才能完成。例如,输入可能会受限于用户的打字速度;对人们来说,每秒8个字符是很快的,但对计算机来说却相当缓慢。当交互式输入发生时,与其让CPU闲置还不如让操作系统快速的将CPU转向其他用户的程序。
分时操作系统甚至比多道程序操作系统更加复杂。二者都必须在内存中同时保留多个作业,所以系统必须要有内存管理和保护(第九章)。为了获得一个合理的响应时间,作业可能需要在主存和作为主存的后备存储器的磁盘之间换进换出。为达到这个目标,一个通用的方法是虚拟内存,这是一种允许将作业部分内容装入内存就可以运行的技术(第十章)。虚拟内存策略的主要优点是程序可以比物理内存更大。更进一步讲,它将主存抽象到一个大的、统一的存储队列中,从而分开来看待逻辑内存和物理内存。这种方案使程序员免于内存容量的限制。
分时系统也必须提供一个文件系统(第11章和第12章)。文件系统驻留在磁盘中;因此,必须要提供磁盘管理(第14章)。而且分时系统提供了一个并行运行机制,这需要完善的CPU调度策略(第6章)。为了保证作业有序运行,系统必须提供作业的同步和通信机制(第7章),并且要确保作业不会在死锁发生时困住而永远处于相互等待状态(第8章)。
早在1960年就论证了分时思想,但那时构建分时系统不但困难而且昂贵,这种状况一直持续到70年代早期。虽然批处理系统依然存在,但今天的大多数系统是分时系统。因此多道程序设计和分时技术是现代操作系统的主题,也是本书的主题。
1.3 桌面系统
个人计算机出现在70年代。在最初的十年中,个人计算机中的CPU缺少保护操作系统不受用户程序损伤的特性。个人计算机操作系统因此而不支持多用户和多任务处理。然而随着时间的推移,这种操作系统的目标有所变化;取代对CPU和外围设备的最优化利用,用户的易用性和响应性成为系统的主要设计目标。这些系统包括运行Microsoft Windows和Apple Macintosh的个人计算机。微软的MS-DOS操作系统被同样来自微软的多个产品取代,而IBM则使用OS/2多任务处理系统替代了MS-DOS。Apple Macintosh操作系统引入了更多的先进的硬件,并且包含了新的特征,例如:虚拟内存和多任务处理。随着MacOS X的发布,现代操作系统的内核为了可测量性、性能和特性而基于Mach和FreeBSD UNIX,但也保留了丰富多彩的图形用户界面。Linux是一个用于个人计算机的类UNIX操作系统,最近也十分流行。
通过借鉴大型计算机操作系统的开发成果,个人计算机操作系统受益匪浅。微型计算机可以很快采用为更大型的操作系统研发的一些技术。另一方面,微型计算机的硬件价格已经足够低了,个人可以单独的使用计算机,CPU的利用率不再是主要问题。因此,大型计算机操作系统中的一些设计可能不适用于更小型的系统。
其它的一些设计依然应用,例如:文件保护。最初,文件保护在个人机上不是必需的。然而,现在这些计算机经常要与其它的计算机通过局域网或因特网连接在一起。当其他的计算机和其他的用户能够访问一台个人计算机中的文件时,文件保护开始成为操作系统的一个重要特征。缺少了这种保护,恶意程序就可以轻易的破坏系统(比如:MS-DOS和Macintosh)中的数据。恶意程序可以自我复制,能够通过蠕虫或病毒机制快速传播,并且可能会破坏公司或全世界的网络。仅仅依靠像内存保护和文件许可这样的高级分时特征并不充分。近来频繁出现的安全漏洞再次证明了这一点。这些内容将在第十八章和第十九章中展开讨论。
1.4 多处理机系统
到此为止,大多数系统是单处理机系统;也就是说,他们仅仅拥有一个主CPU。然而多处理机系统(通常称之为并行系统或紧密耦合系统)的成长是非常重要的。这样的系统拥有多个密切通讯的处理器,这些处理器共享计算机总线、时钟和外围处理机,有时也共享内存。
多处理机系统有以下三个主要优点:
1. 提高了系统的吞吐量。通过增加处理器的数目,我们希望能够在更短的时间里完成更多的工作。N个处理器的加速比不是N;而是要小于N。当多个处理器协同处理一个任务时,保证所有部分正确工作会导致一个固定的开销。这个开销,再加上对共享资源的竞争,降低了增加处理器所期望获得的性能提高。相似的,N个程序员协同工作不会产生N倍的工作效率。
2. 节省投资。多处理机系统要比多个单处理机系统节省费用,因为它们可以共享外围处理机、存储器和电源。如果几个程序对相同的数据进行操作,将数据存储在磁盘并由所有的处理器共享要比使用多台计算机利用本地磁盘储存多个拷贝便宜。
3. 提高了系统的可靠性。如果能够将工作适当地跟配给多个处理器,那么当一个处理器出现故障时就不会到这整个系统崩溃。如果我们有十个处理器,当一个有故障时剩下的九个处理器必须要得到有故障处理器所负责工作的一部分。这样,整个系统的运行速度仅仅会降低10%,而不会全盘瘫痪。这种持续提供服务的能力被称为故障弱化,它与所剩硬件与整个系统的比例有关。这种设计也被称为容错。
故障发生时的延续运行需要一个允许故障探测、分析和纠错(在可能的情况下)的机制。Tandem系统通过使用硬件和软件副本以确保在发生故障时可以继续运行。系统由两个同样的处理器组成,每个都有自己的本机存储器。它们通过总线连接,一个处理器为主处理器,另一个作为后备。每个进程留有两个拷贝:一个在主处理器中,另一个在后备处理器中。在系统执行的确定的检查点上,主处理器中每个作业的状态信息(包括内存映象的拷贝)被拷贝到备份处理器中。如果探测到一个故障,就激活备份并从最近的检查点重新开始。因为这种方案包含了相当可观的硬件副本,所以代价高昂。
今天的大多数通用多处理机系统采用了对称多处理(SMP)技术,每个处理器运行一个同样的操作系统拷贝,而且这些拷贝在需要时相互通讯。有些系统采用了非对称多处理,每个处理器有着明确的任务。一个主处理器控制着系统;其它的处理器照应着主处理器或者有预定义的任务。这种方案定义了一种主从关系。主处理器调度从处理器并为其分配工作。
SMP意味着同等对待所有的处理器;处理器之间没有主从关系。每个处理器并行的运行一份操作系统拷贝。图1.4例举了一种典型的SMP体系结构。SMP系统的一个例子是为Multimax计算机设计的UNIX的Encore版。这种计算机可以使用数十个处理器,它们都运行UNIX的拷贝。这种模型的优点是可以同时运行多个进程,有N个处理器就可以运行N个进程,而不会引起严重的性能恶化。然而,我们必须小心控制输入输出,以保证处理器对数据的正确接收。而且,因为CPU是独立的,就可能当一个超负载时另一个却无事可做,导致系统的低效。如果处理器共享确定的数据结构,那么这种低效就可以避免。这种形式的多处理机系统将允许进程和资源(如内存)由多个处理器共享,并且能够降低处理器之间的差异。开发这种系统必须要十分小心,这就像我们将在第7章中看到的那样。实际上所有的现代操作系统(包括Windows NT、 Solaris、 Digital UNIX、OS/2和Linux)都提供了对SMP的支持。
图1.4
对称多处理和非对称多处理的不同可能与硬件或软件有关。专用硬件能够区分多个处理器,或者可以开发软件以允许一个主处理器和多个从处理器。例如,Sun的操作系统SunOS第4版提供了对非对称多处理的支持,而基于同样硬件的第5版(Solaris 2)是对称多处理系统。
因为微处理器变得更便宜更强大,附加的操作系统功能从从处理器(后端处理器)中去掉了。例如,添加一个处理器并为其配备自己的存储器以控制磁盘系统是相当容易的。这个微处理器可以从主CPU接收请求队列并实现自己的磁盘队列和调度算法。这种方案减轻了主CPU的磁盘调度开销。个人计算机在键盘中包含了一个微处理器来将击键转换成编码并发送给CPU。事实上,微处理器的这种应用变得如此广泛,以至于我们不再考虑多处理技术了。
1.5 分布式系统
以一种最简单的术语来讲,网络就是两个或多个系统通讯的路径。分布式系统依靠网络来实现其功能。通过通信,分布式系统能够共享计算任务,并且为用户提供了丰富的特性。
不同的网络采用的协议、节点间距离和传输介质各不相同。虽然ATM和其它的一些协议应用广泛,但是TCP/IP是最通用的网络协议。同样,操作系统对协议的支持也不尽相同。包括Windows和UNIX在内的大多数操作系统支持TCP/IP协议。有些系统为了适应自己的需求而支持专有的协议。对一个操作系统来说,网络协议仅仅需要一个简单的接口设备——网络适配器,例如:设备驱动程序对它进行管理,在通信协议中软件将数据打包发送和解包接收。对这些概念的讨论贯穿全书。
网络的分类基于它们的节点间的距离。局域网(LAN)在一个房间、一个楼层或者是一个建筑物中。广域网(WAN)通常在建筑物、城市或国家间。一个跨国公司可以有一个WAN来连接世界范围内的办公室。这些网络可以运行一个或多个协议。新技术的不断涌现带来了新的网络形式。例如,城域网(MAN)可以连接一个城市的建筑。蓝牙设备在几步远的短距离内进行通信,这在本质上就构建了一个小范围网络。
网络介质同样各种各样。这包括铜线、光纤和在卫星、微波天线和无线电接收装备之间的无线传输。甚至射程较短的红外线通讯也能够用来构建网络。未来,计算机可以随时随地的使用网络或者建立网络来通信。根据它们的性能和可靠性,这些网络也不尽相同。
1.5.1 客户端/服务器系统
因为个人计算机变得更快、更强,并且更便宜,设计者已不再将精力集中在系统结构上。现在,个人计算机取代了连接到中心计算机的终端。相应的,原先由中心计算机直接控制的用户交互功能现在越来越多的交给PC来处理。结果,中央计算机现在作为一个服务系统来满足客户系统发起的请求。图1.5描述了一个客户端/服务器系统的公用结构。
图1.5
服务器系统可以概括性的分为计算服务器和文件服务器两类。
·计算服务系统提供了一个客户端接口,客户端通过此接口发送要执行的操作,计算服务器执行这个操作并将结果返回给客户端。
·文件服务系统提供了一个文件系统接口,客户端可以在此创建、更新、读取和删除文件。
1.5.2 对等网络系统
计算机网络的成长,特别是因特网和环球网(WWW),对最近的操作系统的发展产生了深远的影响。当个人计算机在70年代引入时,它们的设计是为了“个人”应用并且通常作为独立计算机。随着在80年代开始的电子邮件、ftp和gopher等因特网公共应用的普及,许多个人计算机连接到了计算机网络上。随着90年代中期互联网的出现,网络连接成为计算机系统的必要组成部分。
实际上所有的现代个人计算机和工作站都具有运行一个网络浏览器以访问Web上的超文本文档的能力。目前的操作系统(例如:Windows、OS/2、MacOS和UNIX)也包含了系统软件(例如:TCP/IP和PPP),这些软件可以使计算机通过局域网或电话线访问因特网。这包括了网页浏览器、远程登录和文件传输客户端和服务器。
与在1.4节讨论的紧密耦合系统对比,在这些应用中使用的计算机网络由处理器集合组成,它们不共享内存或时钟,而是每个处理器有它自己的内存。处理机之间通过各种各样的通信线路进行通信,比如:高速总线或电话线。这些系统通常被称为松散耦合系统(或分布式系统)。
一些操作系统具备了网络和分布式系统的概念,而远不止提供网络连接。网络操作系统是一种操作系统,它提供了像跨越网络的文件共享这样的特征,并且包含了一个允许不同计算机间的不同进程相互交换信息的通讯方案。虽然一台运行网络操作系统的计算机注意到网络的存在并且能够与其它联网的计算机通信,但它却独立于网络上其它的所有的计算机。分布式操作系统具有更低的独立性:不同的操作系统密切联系,以至于让人感觉只有一个独立的操作系统在控制网络。我们将在第十五章和第十七章中讨论计算机网络和分布式操作系统。
1.6 集群系统
与并行系统相似,集群系统也集中了多个CPU来完成计算工作。与并行系统不同,集群系统由两个或更多独立的计算机连接在一起组成。对术语“集群”的定义并不具体;对于什么是集群系统和为什么一种优于另一种,多个商业包互相竞争。通常公认的定义是集群计算机共享存取器,并且通过局域网紧密连接。
通常集群系统实现了对高可用性的支持。集群软件层运行在众多节点之上。每个节点能够监控一个或多个其它节点(通过局域网)。如果被监控的机器出现故障,那么监控的机器能够获取被监控机器的存储器,并重新开始运行被监控机器中所运行的应用程序。有故障的机器可以维持在这种故障状态,但是用户和客户端应用程序仅仅会感受到一个简短的服务中断。
在非对称集群中,当其它的计算机运行应用程序时有一台计算机处于开机备用模式。备用主机除了监控其它活动服务器外什么也不做。如果这个服务器出现故障,备用机就会成为活动服务器。在对称模式中,两个或更多的主机同时运行应用程序并且相互监控。因为利用了所有可利用的硬件,这种模式显然更加高效。它就需要多个可以运行的应用程序。
其它形式的集群包括并行集群和构建在广域网上的集群。并行集群允许多个主机通过共享存储器访问数据。因为大多数操作系统缺乏对多个主机同时访问数据的支持,所以并行集群通常由软件和应用程序的特别版本实现。Oracle并行服务器是Oracle数据库的一个用于运行在并行集群系统上的版本。每个机器有完全访问数据库所有数据的权力。
尽管分布式系统已取得了长足的进步,大多数系统并没有提供多方面的分布式文件系统。因此,大多数集群系统不允许共享访问磁盘上的数据。为此,分布式文件系统必须提供对文件的访问控制和锁定,以避免互相矛盾的操作。这种类型的服务通常被认为是分布式锁定管理(DLM)。针对分布式通用文件系统的研发工作正在进行,像SUN这样的开发商已经宣布了在其操作系统中包含DLM。
集群技术发展迅速,其中包括了全球集群,在这种系统中,机器可以遍布全世界(或者是WAN所能到达的任何地方)。这样的工程依然是研究和发展的主题。
随着存储区域网络(SAN,在14.6.3节中详细描述)变得更为流行,集群系统的用途和特性将有更大程度的扩展。SAN可以很容易的在多个主机和多个存储器单元之间建立连接。由于连接的复杂性,当前的集群系统通常限制2到4台主机共享数据。
1.7 实时系统
另外一种具有特殊用途的操作系统是实时系统。如果对运算或数据流有严格的时间要求的话,就需要使用实时系统;因此它经常作为控制设备出现在专门的应用中。传感器获取数据并发送给计算机。计算机必须分析数据并在需要的情况下调整控制。实时系统在科学实验控制、医学成像、工业控制和某些显示系统中应用广泛。有些汽车引擎燃油喷射控制系统、家用控制器和武器系统也是实时系统。
实时系统具有明确定义的、不变的时间约束。处理过程必须在规定的时间内完成,否则系统就失效了。例如,实时系统必须在一个用于汽车制造的机器人手臂与正在制造的汽车相撞之前停止它。一个实时系统只有在规定的时间内返回正确的结果才算是能够正确工作。实时系统的这个要求跟分时系统和批处理系统不同,在这点上注意跟分时系统和批处理系统对比,我们期望(不是强制的)分时系统能够快速响应,而对批处理系统则根本就没有时间限制。
实时系统分为两种:硬实时系统和软实时系统。硬实时系统要保证按时完成关键性的任务。为此,需要限制系统中所有的延迟,从数据检索到操作系统结束请求模式的时间需求。这样的时间约束限定了硬实时系统的功能。辅助存储器通常十分有限或者没有使用,这样数据就存储在短期存储器或只读存储器(ROM)中。ROM是一种非易失性的存储设备,即使在掉电情况下它也可以保存数据;大多数其它类型的存储器是易失性的。大多数的高级操作系统特性往往将用户和硬件分离,这样就会造成许多不确定的时间需求,因此它们也不会出现在硬实时系统中。例如,在实时系统中几乎找不到虚拟内存(第10章)。因此硬实时系统与分时系统是相互冲突的,并且二者不能混为一体。由于现有的操作系统中没有提供对硬实时支持的,所以在本书中我们就没有涉及此方面内容。
软实时系统是一种限制较少的实时系统,其关键任务的优先权要高于其它任务,并保持拥有这个优先权直到结束。在硬实时系统中,实时任务不能无休止的等待着系统内核来执行它,因此需要限制操作系统的内核延迟。软实时系统可以与其它类型的系统混为一体,这是可以实现的。然而软实时系统比硬实时系统有着更多受限的应用。介于它们缺乏对操作时限的支持,在工业控制和机器人中应用软实时系统是比较危险的。然而软实时系统通常在其它几个领域中应用广泛,这包括了多媒体、虚拟现实和高级科学项目(例如:海底探险和行星探测)。这些系统需要一些硬实时系统无法支持的高级操作系统特性。由于软实时系统应用的不断扩展,当前的大多数操作系统都包含了该技术,其中包括UNIX的主要版本。
我们将在第6章中涉及到在操作系统中实现软实时功能所需的调度机制;在第10章中描述软实时计算中的内存管理。最后,在第21章中描述Windows 2000操作系统的实时部分。
1.8 手持系统
手持系统,包括像PalmPilot这样的个人数字助理(PDA)或连接到某种网络(比如:因特网)的蜂窝电话。手持系统和应用程序的开发者要面对许多挑战,其中大多来自于这种设备的体积限制。比如,典型的PDA大约长5英寸,宽3英寸,重量不足0.5磅。由于受到尺寸的限制,大多数手持系统包含了一个小容量存储器、一个低速处理器和一个尺寸小显示屏。我们将逐一讨论这些限制。
许多手持设备的内存容量在512KB到8MB之间。(与此相比,典型的个人计算机或工作站可能拥有几百兆内存!)这样,操作系统和应用程序必须能够高效的管理内存,这包括在不再使用内存时将所有获得的内存归还给内存管理程序。我们将在第10章中研究虚拟内存,这是一种允许开发者的程序好像运行在比物理内存更多的系统之上的技术。目前,多数手持设备没有使用虚拟内存技术,这就迫使开发者受到物理内存容量的限制。
手持系统开发者所关注另外一个的问题是处理器速度。大多数手持设备的处理器运行速度通常为个人计算机处理器运行速度的几分之一。更快的处理器需要更强劲的电源。在手持设备中使用更快的处理器就需要配备更大容量的电池,而且需要更频繁的更换电池(或者是充电)。为了尽可能减小手持设备的尺寸,经常使用体积更小、速度更慢、能耗更低的处理器。为此,操作系统和应用程序就必须减轻处理器的负担。
手持设备程序的开发者所面临的最后一个问题是要面对所使用的小尺寸显示屏。家用计算机显示器的尺寸可能会达到21英寸,而手持系统的显示屏通常不足3英寸。像阅读电子邮件和浏览网页这样的常见的工作必须要精简到更小的显示屏中。显示网页内容的一种方法是网页裁剪技术,就是只将网页中的一小部分内容传送并显示在手持设备上。
一些手持设备可以使用像BlueTooth(1.5节)这样的无线技术,允许远程访问电子邮件和浏览网页。与Internet连接的蜂窝电话也是这种类型。当前很多PDA没有提供无线访问的支持。为了向这种设备中下载数据,往往首先将数据下载到个人计算机或工作站,然后再传到PDA中。有些PDA允许通过红外线相互直接传输数据。通常PDA的这些功能上的限制根据手持设备的易用性和便携性来折衷。随着网络连接越来越广泛,手持系统的应用也日渐广泛,照相机和MP3等一些其它的设备不断发展也扩大了它们的应用。
1.9 特征迁移
总的来说,对大型计算机和微型计算机操作系统的比较显示:微型计算机已采用了过去大型计算机所独有的特性。同样的概念适用于不同类型的计算机:大型计算机、小型计算机,微型计算机和手持计算机。图1.6所描述的许多概念将在稍后介绍。然而,要开始理解现代操作系统,你需要了解特征迁移,并且认识到许多操作系统特征的发展史。
图1.6
一个典型的特征迁移的例子是多路复用信息与计算服务(MULTICS)操作系统。MULTICS是MIT(Massachusetts Institute of Technology)在1965年到1970年间开发的一个计算工具。它运行在一个大型的复杂的大型计算机(GE 645)上。许多为MULTICS开发的技术后来被贝尔实验室(一个开发MUTICS的合作伙伴)用在了UNIX的设计上。UNIX操作系统大约在1970年为PDP-11小型计算机研制。大约在1980年,UNIX的许多特征成了用在微型计算机中的类UNIX操作系统的基础,这包括近来的许多操作系统,比如:Microsoft Windows NT, IBM OS/2和Macintosh。如此,随着时间的推移,为大型计算机系统设计的许多技术移用到了微型计算机上。
在大型操作系统的特性被按比例缩小以适应个人计算机的同时,更强、更快、更完善的硬件系统也在发展。个人工作站是一种大型的个人计算机,比如:Sun SPARCstation、HP/Apollo、IBM RS/600和运行Windows NT或UNIX派生系统的Intel Pentium系列。许多大学和企业拥有相当数量的工作站,这些工作站又通过局域网紧密连接。当个人计算机拥有更完善的硬件和软件时,大型计算机和微型计算机的分类变得模糊不清了。
1.10 计算环境
从最初的hands-on系统到多道程序系统和时分系统,再到个人计算机和手持计算机,我们回顾了操作系统的发展,那么现在就应该能够给出一个综述:这样的系统是怎样在多样化的计算环境中应用的。
1.10.1 传统计算
随着信息处理技术的成熟,传统计算环境的概念变得模糊了。考虑一下“典型的办公环境”。仅仅在数年前,这个环境由连接到提供打印服务网络的个人计算机构成。远程访问并不好用,而膝上型计算机提供了便携的工作环境。在许多公司中,连接到大型机的终端的应用也非常的普遍,它们的远程访问和便携能力还要差一些。
当前的趋势向着提供更多的访问这些环境的能力发展。互联网技术扩展了传统计算。公司实现了通过互联网访问他们内部服务器的入口。网络计算机是能够解释Web计算的必要的终端。便携式计算机能够与PC同步,这样就可以轻便的使用公司的数据。 它们也能够连接到无线网络以利用公司的互联网入口(也有其它无限的互联网资源)。
大多数用户在家里使用一台独立的计算机,利用慢速调制解调器连接到办公室、因特网或二者都有。网络连接速度曾经非常昂贵,现在就便宜多了,这就允许在公司内部或通过互联网访问更多的数据。这些快速的数据连接允许家用计算机充当Web网页服务,并且包含了打印机、客户端PC和服务器。有些家庭甚至拥有防火墙来保护这些家庭环境免收侵害。这种防火墙在数年前价值数千美元,而十年前甚至还没有。
1.10.2 基于Web的计算
Web已经变得无处不在,导致了人们通过各种各样的设备访问网络的情形,这与比我们在过去的几年中所梦想的有过之而无不及。个人计算机依旧是最普遍的访问设备,工作站(高档的面向图形的PC)、手持个人数字助理,甚至蜂窝电话也提供了访问支持。
网络计算提高了网络连接的重要性。先前没有网络连接的设备现在拥有有线或无线访问能力。网络设备现在有了更快的网络连接,这来自于提高网络技术、优化网络实现代码,或二者都有。
基于Web运算的实现促使了各种新型设备的出现,例如:负载均衡器,它在众多类似的服务器之间分配网络连接。像Windows 95这样的操作系统扮演着Web客户端的脚色,它已经发展到了Windows ME和Windows 2000,Windows 2000不但可以作为客户端,还可以作为服务器。通常Web提高了设备的复杂性,因为用户需要它们能够连接到Web。
1.10.3 嵌入式计算
嵌入式计算机是现在最为流行的计算机形式,它们运行嵌入式实时操作系统。从汽车引擎和工业机器人到录像机和微波炉,这些设备随处可见。嵌入式计算机往往有着特殊的任务。它们运行的系统通常很简单并缺少一些高级特征,比如虚拟内存,甚至是磁盘。这样,操作系统仅仅提供了有限的特性。它们的用户接口通常很少或者没有,而更多的是在监控和管理硬件设备,比如汽车引擎和机器人手臂。
作为一个例子,考虑前述的防火墙和负载均衡器。有些就是通用计算机,它们运行标准的操作系统(比如:UNIX)和特殊用途的应用程序来实现它们的功能。其它的是一些使用特殊用途的嵌入式操作系统的硬件设备,这些设备仅仅提供了所需的功能。
嵌入式系统的应用仍在不断扩展。这些设备,不管是作为独立的单元还是网络或Web的成员,它们的能力必定会提高。整个住宅能够实现计算机化,这样,不管是通用计算机还是嵌入式系统都可以控制供热、照明、报警系统,甚至能够控制咖啡壶。家庭成员可以在回到家之前通过Web使室内升温。也许会有一天,电冰箱在牛奶用光时会自动通知食品店。
1.11 摘要
因为两个主要的原因,操作系统在过去的45年中持续发展。首先,操作系统尝试调度计算活动,以确保计算系统的优良性能。其次,它为程序的开发和运行提供了一个便利的环境。最初,通过前端控制台使用计算机系统。汇编程序、装载程序、连接程序和编译程序等软件使程序设计更加便利,但是也需要很多配制时间。为了减少配置时间,就要雇佣操作员,对相似的作业打包。
批处理系统允许常驻内存的操作系统对工作自动排序,大大提高了计算机的整体利用率。计算机就不再需要等待人工操作了。然而,对于CPU来说,I/O设备的速度太慢了,所以CPU的利用率仍旧很低。脱机操作使得单个CPU可以同时控制读卡机、磁带驱动器、打印机等多个低速设备。脱机操作使得单个CPU以控制数据从读卡机到磁带再到打印机的方式来控制多个低速设备。
为了提高整个计算机的性能,引入了多道程序设计,可以同时在内存中保留多个作业。CPU在这些作业之间来回转换,减少了执行作业的总时间。
多道程序技术也允许分时。而分时操作系统允许多个用户(从一个到几百个)同时交互式的使用计算机。
个人计算机是微型计算机;它明显比大型机系统更小,更便宜。这种计算机的操作系统在多个方面受益于大型机操作系统的发展。然而,因为个人单独的使用计算机,CPU利用率不再是首要问题。因此,大型计算机操作系统中的一些设计就不适于这些更小的系统。由于个人计算机现在能够通过网络和Web连接到其它的计算机和用户,这样,其它的一些设计则对小型系统和大型系统同样适用,比如:安全策略。
并行系统拥有多个密切通讯的CPU;CPU共享计算机总线和外围处理机,有时也共享内存。这样的系统提高了吞吐量并增强了可靠性。分布式系统允许在地理上分散的主机共享资源。集群系统允许多台机器同时对共享数据进行运算,并且能够在某些子集群成员出现故障的情况下维持计算持续运行。
硬实时系统通常作为控制设备出现。硬实时操作系统具有详细定义的确定的时间限定。进程必须要在限定的时间内完成,否则系统就失效了。软实时系统则具有较少的时间限制,而且不支持限期调度。
最近,出于Internet和WWW的影响,整合了网页浏览、网络连接和通讯软件的现代操作系统的开发备受鼓舞。
CPU的发展需要更高级的功能,通过这条主线我们讨论了操作系统的发展过程。随着硬件价格的进一步降低,计算机的特性也有所改变,这个趋势可以通过现在PC的发展感受到。
词汇
并行系统:parallel system
操作系统:operating system
超文本:hypertext
城域网:metropolitan-area network, MAN
存储器:memory
存储区域网络:storage-area network, SAN
大型计算机:mainframe
大型计算机系统:mainframe computer system
对称多处理:symmetric multiprocessing, SMP
对等网络:Peer-to-Peer
对等网络系统:Peer-to-Peer system
多处理机系统:multiprocessor system
多道程序设计:multiprogramming
多路复用信息与计算服务:MULTIplexed Information and Computing Service, MULTICS
多任务处理:multitasking
非对称多处理:asymmetric multiprocessing
分布式锁定管理:distributed lock manager, DLM
分布式系统:distributed system
分时:time sharing
分时系统:time-shared system
服务系统:server system
辅助存储器(二级存储器):secondary storage
高可用性(高效率):high availability
个人工作站:personal workstation
个人计算机:personal computer, PC
个人数字助理:personal digital assistant, PDA
工作站:workstation
功能退化,故障弱化:graceful degradation
广域网:wide-area network,WAN
后端:back-end
环球网:World Wide Web, WWW
集群系统:clustered system
计算服务系统:compute-server system
交互式计算机系统:interactive computer system
紧密耦合系统:tightly coupled system
进程:process
局域网:local-area networks,LAN
客户端/服务器系统:client-server system
客户系统:client system
控制程序:control program
蓝牙:BlueTooth
内核:kernel
批处理系统:batch system
容错:fault tolerant
容错:fault tolerant
入口:portal
软件:software
软实时系统:soft real-time system
实时系统:real-time system
手持系统:handheld system
输入输出设备:input/output (I/O) device
松散耦合系统:loosely coupled system
图形用户界面:graphic user interface, GUI
网络:network
网络操作系统:network operating system
网络计算机:network computer
文件服务系统:file-server system
物理内存(物理存储器):physical memory
响应时间:response time
小范围网络:small-area network
小型计算机:minicomputer
异步传输模式:Asynchronous Transmission Mode, ATM
因特网:Internet
硬件:hardware
硬实时系统:hard real-time system
中央处理单元:central processing unit, CPU
资源分配程序:resource allocator
资源利用:resource utilization
作业调度:job scheduling
作业调度程序:job scheduler