本节,我们讨论操作系统如何用于各种计算环境。
随着计算不断成熟,传统计算的许多划分已变得模糊了。看一看“典型办公环境”。几年前,这种环境包括一组联网的 PC,其中服务器提供文件和打印的服务;远程访问很不方便,可移动性是通过釆用笔记本电脑来实现的。许多公司也有与主机相连的终端,远程访问能力和可移动性选项则会更少。
当前趋势提供更多方法,以便访问这些计算环境。Web 技术及不断提高的 WAN 带宽,日益拓展着传统计算的边界。公司设置门户网站(web portal),以便提供内部服务器的 Web 访问。网络计算机(network computer)或瘦客户端(thin client)可以实现 Web 计算,当要求更高安全和更便捷维护时,可以用于取代传统的工作站。移动计算机可与 PC 同步,允许移动使用公司信息。移动计算机也可连到无线网络(wireless network)和蜂窝数据网络,以便使用公司的门户网站(和其他网站资源)。
过去,大多数用户家里都有一台计算机,通过低速调制解调器连到办公室或 Internet。现在,曾经很贵的高速网络在许多地方都已很便宜了,这样用户可以更快地访问更多数据。这些快速数据连接允许家用计算机提供 Web 服务并且具有自己的网络(包括打印机、客户端 PC 和服务器)。许多家庭还有防火墙(firewall),保护家庭内部环境以便避免破坏。
20 世纪的下半叶,计算资源相对贫乏。(在此之前它们根本就不存在!)有一段时间,系统或是批处理的,或是交互式的。批处理系统以批量方式来处理作业,这些作业具有事先定义的输入(从文件或其他数据资源)。而交互式系统等待用户输入。为了优化计算资源的使用,多个用户共享这些系统的时间。分时系统采用定时器和调度算法,让各个进程快速循环使用 CPU 及其他资源。
现在,传统的分时系统不太常见。虽然同样的调度技术依然用于桌面计算机、笔记本电脑、服务器及移动计算机,但是所有进程通常属于同一用户(或一个用户和操作系统)。用户进程,还有提供用户服务的系统进程,都要加以管理,以便获得一定的计算时间。例如,一个用户使用一台 PC 时,可以创建许多窗口,以便同时执行不同任务。一个网页浏览器甚至会有多个进程组成,每个进程访问各自网站,这些进程也参与系统的分时。
移动计算(mobile computing)就是智能手机或平板电脑的计算。这类设备都有两个明显物理特性:便携与轻巧。
以前,与桌面计算机和笔记本电脑相比,移动系统在屏幕大小、内存容量及总体功能等方面虽然有所欠缺,但是能够处理 email 和浏览网页。近来,移动设备的功能已有明显提高,甚至很难区分笔记本电脑和平板电脑。事实上,可以说有的移动设备的功能就连桌面计算机和笔记本电脑都是没有的。
现在,移动系统不但用于处理 email 和浏览网页,而且还能播放音乐和视频、阅读电子书、拍照、录制高清视频等。相应地,移动设备的应用程序发展迅猛。许多开发商都在设计应用程序,以充分利用移动设备的特点,如 GPS(Global Positioning System)定位、加速度传感器、陀螺仪传感器等。内嵌 GPS 芯片允许移动设备采用卫星精确确定它的地理位置。
这种功能在导航应用程序中是很有用的,例如,告诉用户向哪里步行或开车,或者向哪个方向可以到达附近餐馆等。加速度传感器可为移动设备检测相对地面的方位,并检测其他数据,如倾斜和摇动等。对于采用加速度传感器的计算机游戏,玩家控制系统不是通过鼠标或键盘,而是通过倾斜、旋转和摇动移动设备!或许,这些特点会更多地用于增强现实(augmented-reality)的应用程序,这类程序可在当前环境上叠加一层信息。很难想象在传统桌面计算机或笔记本电脑上如何开发这种程序。
为了提高在线访问服务,移动设备通常采用符合 IEEE 802.11 标准的无线网络或蜂窝数据网络。不过,移动设备的内存容量和处理速度还是不如 PC。虽然智能手机或平板可能有 64GB 的存储,但是桌面计算机通常具有 1TB 的存储。类似地,由于需要考虑电池消耗,移动设备通常使用较小、较慢的处理器,所用的处理核数量也要少于传统桌面计算机或笔记本电脑。
移动计算现有两个主要操作系统:苹果 iOS(Apple iOS)和谷歌安卓(Google Android)。iOS 用于苹果公司的 iPhone 和 iPad。Android 支持很多厂家的智能手机和平板电脑。
分布式系统是物理上分开的、可能异构的、通过网络相联的一组计算机系统,可供用户访问系统维护的各个资源。共享资源的访问可提高计算速度、功能、数据可用性及可靠性。有的操作系统将网络访问简化为文件访问,而网络细节则包含在网络接口驱动程序中;而其他的操作系统则让用户自己调用网络功能。
通常,系统对这两种模式都会支持,如 FTP 和 NFS。构建分布式系统的协议可以极大影响系统的实用和普及。
简单地说,网络(network)就是两个或多个系统之间的通信路径。分布式系统通过网络提供功能。由于通信协议、节点距离、传输媒介的不同,网络也会不同。传输控制协议/网间协议(Transport Control Protocol/Internet Protocol,TCP/IP)是最为常用的网络协议,为因特网提供了基础架构。大多数的操作系统都支持 TCP/IP,包括所有通用协议。有的系统支持专用协议,以满足特定需求。对于操作系统而言,一个网络协议只是需要一个接口设备(如网络适配器),通过驱动程序以便管理它以及处理数据的软件。这些概念后面会加以讨论。
网络可以根据节点之间的距离来划分:
例如,一个全球性的公司可以用 WAN 将其全球内的办公室联接起来。这些网络可以采用单个或多个协议。不断出现的新技术也带来新的网络类型。例如,城域网(Metropolitan-Area Network,MAN)可以将一个城市内的楼宇连接起来。蓝牙和 802.11 设备采用无线技术,实现在数米内的无线通信,进而创建了个人局域网(Personal-Area Network, PAN),以连接电话和耳机或连接智能手机和桌面计算机。
网络的连接媒介同样很多,它们包括铜线、光纤、卫星之间的无线传输、微波和无线电波。当计算设备连接到手机时,就创建了一个网络。即使非常近距离的红外通信也可用来构建网络。总之,无论计算机何时通信,它们都要使用或构建一个网络。这些网络的性能和可靠性各不相同。
有的操作系统不但提供网络连接,而且进一步拓广了网络和分布式系统的概念。网络操作系统(network operating system)就是这样一种操作系统,它提供跨网络的文件共享、不同计算机进程的消息交换等功能。虽然运行网络操作系统的计算机知道有网络且能与其他联网的计算机进行通信,但是相对于网络上的其他计算机而言却是自治的。分布式操作系统提供较少的自治环境。不同的计算机紧密通信,以致于好像只有一个操作系统控制整个网络。
随着 PC 变得更快、更强大和更便宜,设计人员开始放弃基于集中式系统的架构。与中心系统相连的终端也在让位给 PC 和移动设备。相应地,用户接口功能过去直接由中心系统所处理,现在也更多地由 PC 所取代,通常为 Web 接口。因此,许多现代系统可作为服务器系统(server system),以满足客户机系统(client system)的请求。这种形式的专用分布式系统称为客户机-服务器系统(client-server system),具有如图 1 所示的通用结构。
服务器系统可大致分为计算服务器和文件服务器:
分布式系统的另一结构是对等(Peer-to-Peer,P2P)系统模型。这个模型并不区分客户机与服务器。所有系统节点都是对等的,每个节点都可作为客户机或服务器,这取决于它是请求还是提供服务。对等系统与传统的客户机-服务器相比有一优点:在客户机-服务器系统中,服务器是个瓶颈;但是在对等系统中,分布在整个网络内的多个节点都可提供服务。
一个节点在加入对等系统时,就应首先加入对等网络。节点一旦加入对等网络,就可以开始为网络的其他节点提供服务或请求服务。判断哪些服务可用包括两种基本方法:
提供文件共享服务的对等网络在 20 世纪 90 年代后期很受欢迎,如 Napster 和 Gnutella,可让对等节点互相交换文件:
文件交换的未来发展并不明朗,因为对等网络可以用于传播有产权保护的资料(如音乐),而这些授权资料的传播是有法律限制的。值得一提的是,Napster 已陷入侵权案件,其服务也在 2001 年关停。
另一个对等计算的例子是 Skype。它采用了 IP 语音(Voice Over IP,VoIP)技术,客户可以在Internet上进行语音通话、视频通话、发送文本消息等。Skype 采用了混合方式:它有集中登录服务器,也支持分散节点之间的通信。
通过虚拟化技术,操作系统可以在其他操作系统上运行应用程序。乍一看,这种功能似乎没有道理。然而,虚拟化不仅产业巨大,而且发展很快,这也说明了它的实用性和重要性。
广义而言,虚拟化技术是一种软件技术,用于实现模拟。当原有 CPU 与现有 CPU 类型不同时,就可采用模拟(emulation)。
例如,在 Apple 公司将其桌面电脑和笔记本的 IBM Power CPU 换成 Intel x86 CPU 时,就增加了一个称为“Rosetta”的模拟软件,以允许为 IBM CPU 而编译的应用程序能够运行在 Intel CPU 上。这一概念的进一步延伸是,允许某一平台的操作系统可以运行在另一平台上。不过,模拟的代价还是很高的。可在原来系统上运行的每个机器层的指令,应转换成现有系统的指令,而且常常会变为多个指令。如果原 CPU 和现 CPU 的性能级别相似,那么模拟代码要比原机代码慢不少。
模拟的一个常见例子是:一种计算语言不能编译成原机代码,而是要转换成中间形式或按高级形式来执行。这称为解释(interpretation)。例如,BASIC 可编译也可解释,而 Java 总是解释的。解释是一种模拟,允许高级语言代码转换成原 CPU 的指令;这不只是模拟 CPU,而是创建了一个理论上的虚拟机器,可以直接运行高级语言。因此,我们能在 Java 虚拟机上运行 Java 程序,尽管这种虚拟机只是 Java 模拟程序。
不过,通过虚拟化(virtualization),为某一 CPU 而编译的操作系统可以运行在为另一相同 CPU 而编译的操作系统上。虚拟化技术首先用在 IBM 大型机上,以便多个用户并发运行任务。运行多个虚拟机,允许许多用户在为单用户设计的系统上运行任务。
后来,为了解决在 Intel x86 CPU 上运行多个微软 Windows XP,VMWare 公司采用了一种新的虚拟化技术,并开发了可运行 XP 的应用程序。该应用程序可以运行一个或多个 Windows 或其他用于 x86 的客户操作系统(guest operating system),而每个操作系统者阿运行自己的应用程序(见图 3)。Windows为主机操作系统(host operating system),而VMware应用程序为VMM。VMM运行客户操作系统,管理资源使用,并且提供保护。
虽说现代操作系统完全能够可靠运行多个应用,但是虚拟化技术的使用还是继续增长。在笔记本和桌面电脑上,VMM 允许用户安装多个操作系统来用于研究工作,或运行为客户操作系统而编写的应用程序。
例如,在 x86CPU 上运用 Mac OS X 操作系统的 Apple 笔记本,可以运行一个客户 Windows,以便运行 Windows 的应用程序。为多个操作系统编写软件的公司可以采用虚拟化技术,在单个物理服务器上运行多个操作系统,以便开发、测试和调试。在数据中心,虚拟化技术常常用于运行和管理计算环境。如 VMwareESX 和 Citrix XenServe r的 VMM 不再运行在主机操作系统上,而是直接运行在主机上。
云计算(cloud computing)可以通过网络提供计算、存储甚至应用程序等服务。从某些方面来看,它是虚拟化技术的延伸,因为它以虚拟化技术为基础来实现功能。例如,Amazon Elastic Compute Cloud(EC2)有数千个服务器,数百万个虚拟机,数千万亿字节的存储,可供任何 Internet 用户来使用。用户根据使用资源多少,按月付费。
云计算实际上有许多类型,包括如下:
这些云计算类型可以组合,这样一个云计算环境可以提供多种类型的服务。例如,一个公司可能同时提供 SaaS 和 IaaS 作为公共可用服务。
当然,许多类型的云基础设施使用一些传统操作系统。除了这些,VMM 可以管理虚拟机,以供用户运行进程。在更高层,管理 VMM 本身有云管理工具,如 VwarevCloud Director 和开源 Eucalyptus 工具集。这些工具管理云内的资源,为云组件提供接口;这也提供一个好的理由,让其成为一种新的操作系统。
图 4 为一个提供 IaaS 的公云。注意:云服务与云用户的接口是用防火墙来保护的。
嵌入式计算机是目前最为普遍的计算机。从汽车引擎和制造机器人,到录像机和微波炉,到处可以找到它们的身影。它们往往具有特定任务,运行系统通常很简单,因此操作系统提供了有限的功能。通常,它们很少有甚至没有用户界面,主要关注监视和管理硬件设备,如汽车引擎和机器手。
这些嵌入式系统差别相当大。有的是通用计算机,具有标准的操作系统如 Linux,并运行专用应用程序来实现功能。还有的硬件设备具有专用的嵌入式操作系统,以提供所需功能。此外,还有其他的硬件设备,不采用操作系统,而采用专用集成电路(Application Specific Integrated Circuit,ASIC)来执行任务。
嵌入式系统的使用继续扩大。无论是作为独立单元还是作为网络或Web的组件,这些设备的性能也在增强。现在,整个房屋可以由计算机来控制,这样一台中心计算机,无论是通用计算机还是嵌入式计算机,可以控制取暖、照明、报警甚至咖啡机等。通过 Web 访问,房主可告诉房子在他回家之前加好温度。将来,冰箱也可能在发现牛奶没有时,通知食品杂货店送货。
嵌入式系统几乎总是采用实时操作系统(real-time operating system)。当处理器执行或数据流动具有严格时间要求时,就要使用实时系统,通常用作特定应用的控制设备。计算机从传感器获得数据,接着分析数据,然后通过控制调整传感器输入。科学试验的控制系统、医学成像系统、工业控制系统和有些显示系统等,都是实时系统。有些汽车喷油系统、家电控制器和武器系统等也是实时系统。
实时系统具有明确的、固定的时间约束。处理必须在固定时间约束内完成,否则系统就会出错。如果机器手在打坏所造汽车之后才停止,那么就不行了。只有在时间约束内返回正确结果,实时系统的运行才是正确的。与之不同的是,分时系统只是要(而不是一定)响应快,而批处理系统则没有任何时间约束。