4.1 操作系统概述
如果把硬件设想成计算机系统的核心,那么操作系统的主要任务是协助计算机完成基本硬件操作,并且和更外层的应用软件进行交互,完成诸如打印和存储数据等应用操作。操作系统执行不同任务的过程通常称为“服务”,可以分为“外部”和“内部”服务两种。
操作系统提供外部服务以协助用户启动程序、管理被存储的数据和维护安全。操作系统提供选择程序的方法,也能帮助查找、重命名与删除文档和其他在存储介质中的数据。一些计算机操作系统在允许用户访问程序和数据之前,还会检查用户ID和口令以维护程序和数据的安全。
此外,操作系统提供内部服务来保证计算机系统有效运行,这些内部服务一般只受到操作系统本身的控制。操作系统控制输入/输出、分配系统资源、管理程序和数据的存储空间以及检测设备是否失效。操作系统负责分配系统资源,如磁盘空间、内存量或者处理器时间等,以便程序可以有效地运行。
个人计算机通常在出售时预装操作系统(如Mac OS或Microsoft Windows,见图4-1)。Linux操作系统虽然也可以安装在个人计算机上,但主要用在高端工作站和服务器上。
图4-1 预装在联想、惠普等计算机上的Windows 7界面
虽然操作系统也是软件,但诸如Windows软件、Mac软件和Linux软件之类的术语一般指的是应用软件。例如Microsoft Word,它是运行在Windows操作系统中的文字处理程序。
4.1.1 操作系统活动
操作系统最明显的职责就是为软件提供运行环境。操作系统、应用软件和设备驱动程序的工作方式类似于军队中命令的逐级下达。当用户使用某个应用软件发出命令后,应用软件就会命令操作系统该做什么,操作系统再命令设备驱动程序,最后由设备驱动程序驱动硬件,硬件就会开始工作。图4-2说明了打印文档或相片时,命令的链式结构。
图4-2 打印文档的命令会经过包括操作系统在内的多层软件的接力传递,最终到达打印机
操作系统通过与应用软件、设备驱动程序和硬件之间的交互来管理计算机资源。在计算机系统中,资源是指任何能够根据要求完成任务的部件。例如,处理器就是资源,RAM、存储空间和外设也是资源。当用户使用应用软件时,操作系统也在幕后忙着处理各种资源管理任务,例如管理处理器资源、管理内存、记录存储器资源、确保输入输出有序地进行,以及确立用户界面的基本要素等。
1.操作系统管理处理器资源
计算机微处理器的每个周期都是可以用来完成任务的资源。当控制单元指导微处理器内部活动时,操作系统也以稍微高级的形式控制着微处理器的工作。
许多称为“进程”的计算机活动都会争取微处理器的资源。用键盘和鼠标输入时,正在运行的程序会发出命令。与此同时,数据必须传送给显示设备或打印机,来自因特网的网页也会到达计算机,操作系统必须确保每一个进程都能够分享到必要的微处理器周期。
在使用Windows时,可以打开“任务管理器”查看正在执行的进程列表。同时按下〈Ctrl〉、〈Alt〉和〈Del〉键后,Windows操作系统会显示出进程列表(见图4-3)。多数进程是在后台运行的程序,它们可以为操作系统、设备驱动程序和应用软件执行各种任务。而机器人程序和蠕虫有时也会产生异常进程。如果想知道进程是否是正当的,那么可以使用各种搜索引擎来查询进程名称。
2.操作系统处理多进程
在普通的计算会话中,计算机平均运行50个进程。在理想状态下,操作系统能帮助微处理器无缝地切换多个进程。而根据操作系统和计算机硬件的性能差异,管理进程的方式有多任务、多线程以及多重处理。
图4-3 Windows任务管理器
多任务提供了进程和内存管理服务,允许两个或多个任务、作业和程序同时运行。多数操作系统都提供了多任务服务,其中包括个人计算机操作系统。在一个程序中,多线程允许多个部分或线程同时运行。例如,电子表格程序的一个线程可能在等待用户的输入,而其他线程则在后台进行长时间的计算。多线程可以提升单处理器或多处理器计算机的性能。许多新计算机都装有多核处理器或多个处理器。操作系统的多重处理能力会将任务平均分配给所有处理单元。
3.操作系统管理内存
内存是计算机中最重要的资源之一,微处理器处理的数据和执行的指令都存储在内存中。当用户想要同时运行多个程序时,操作系统就必须在内存中为不同程序分配出特定的空间。
当多个程序在运行时,操作系统需要避免内存泄漏,即确保指令和数据不能从内存中的一个区域“溢出”到已经分配给其他程序的另一个区域。如果不能保护每个程序的内存区域,那么数据就将被破坏,程序可能崩溃,计算机将显示出错信息如“General Protection Fault”(一般性保护错误)或“Program Not Responding”(程序没有响应)。有时候同时按下〈Ctrl〉、〈Alt〉和〈Del〉键来关闭遭到破坏的程序,PC能够弥补内存泄漏所造成的后果。
4.操作系统联系存储器资源
在幕后,操作系统负责存储和检索计算机硬盘和其他存储设备上的文件。它能记住计算机中所有文件的名字和位置,并且知道哪里有可以存储新文件的空闲空间。
5.操作系统联系外围设备
每个与计算机相连接的设备都可视作输入或输出资源。操作系统会与设备驱动程序通信,以确保数据在计算机和外围设备间顺畅地传输。如果外围设备或其驱动程序不能正常运行,操作系统会采取适当措施,并在屏幕上显示警告信息。
操作系统会确保有序地处理输入和输出,并在计算机忙于其他任务时使用“缓冲区”来收集和存放数据。例如,通过使用键盘缓冲区,无论用户敲击键盘的速度有多快,或者计算机同时还在做其他事情,计算机都不会漏掉用户按下的任何一个键。所谓“缓冲区”(buffer)指的是内存中用来存放正在等待从一个设备传输到另一个设备中的数据的区域。
6.操作系统分类
为了更好地了解不同操作系统的优点和缺点,下面对操作系统做一个大致分类:
单用户操作系统(例如DOS)处理的是一次只能由一个用户控制的输入设备。掌上电脑和一些个人计算机的操作系统可以归为单用户操作系统。
多用户操作系统允许一台集中式计算机(通常是大型机)处理来自多个用户同时进行的输入、输出和处理请求。多用户操作系统最艰巨的任务之一就是对必须执行的处理请求进行排序。IBM公司的Z/OS就属于大型机多用户操作系统。
服务器操作系统提供了用来管理分布式网络、电子邮件服务器和网站托管的工具。Mac OS X Server、Windows Server 2008 R2和Linux都属于服务器操作系统。从技术上讲,多用户操作系统可对集中式计算机要处理的请求进行排序,而服务器操作系统则仅仅是通过路由将数据和程序发送给每个用户的本地计算机,实际的处理发生在本地计算机上。不过,如今的服务器操作系统既可以配置成集中式处理,也可以配置成分布式处理。
桌面操作系统是指一种为桌面计算机、笔记本电脑和平板电脑等个人计算机设计的操作系统。在家中、学校和工作中所使用的计算机一般都配置了桌面操作系统(如Microsoft Windows或Mac OS)。通常,这些操作系统都被设计成单一用户的,不过它们也可以提供网络功能。现在的桌面操作系统都能提供多任务功能,用户可以同时运行多个应用软件。
尽管操作系统的主要目的是在幕后控制计算机系统的运作,但是许多操作系统仍然提供了称为实用程序的有用工具,帮助用户来控制和定制计算机设备和工作环境。例如,Microsoft Windows为用户提供了对以下行为的控制。
·启动程序。在启动计算机时,Windows会显示图形对象(如图标、“开始”按钮、“程序”菜单等),用户可以使用这些图形对象来启动程序。
·管理文件。“Windows资源管理器”是个有用的实用程序,它允许用户查看文件列表、将文件移动到不同的存储设备上,以及复制、重命名和删除文件。
·获得帮助。Windows提供了“帮助”系统,用户可以用它来了解各种命令是如何执行的。
·定制用户界面和配置设备。Windows“控制面板”提供了帮助用户定制屏幕显示和工作环境的实用程序,还提供了对实用程序的访问,来帮助用户安装和配置计算机的硬件及外围设备。许多Windows实用程序都可以从“控制面板”访问。在“开始”按钮中找到“控制面板”,打开后,其中以图标形式显示了‘控制面板”的实用程序(见图4-4)。
图4-4 Windows控制面板中的实用程序
4.1.2 引导过程
有一些数字设备(如掌上电脑和视频游戏机)的操作系统很小,可以存储在只读存储器(ROM)上。而大多数计算机的操作系统都非常庞大,所以其大部分内容都存储在硬盘上。
在开启计算机与计算机准备完毕并能接受用户发出的命令之间所发生的一系列事件称为引导过程,或“引导”计算机。在引导过程中,操作系统内核会加载到内存中。在计算机运行时,内核会一直驻留在内存中。内核提供的是操作系统中最重要的服务(如内存管理和文件访问)。操作系统的其他部分(如定制实用程序)则只有当需要时才载入。
计算机的小型引导程序内置于计算机系统单元内专门的ROM电路中。开启计算机时,ROM电路通电并通过执行引导程序启动引导过程。引导过程有以下6个主要步骤。
·通电。打开电源开关,电源指示灯变亮,电源开始给计算机电路供电。
·启动引导程序。微处理器开始执行存储在ROM中的引导程序。
·开机自检。计算机对系统的几个关键部件进行诊断测试。
·识别外围设备。计算机能识别与之相连接的外围设备,并检查设备的设置。
·加载操作系统。将操作系统从硬盘读取并复制到随机存取存储器(RAM)中。
·检查配置文件并对操作系统进行定制。微处理器读取配置数据,并执行由用户设置的启动程序。
计算机内存大都属于“易失存的”RAM,如果掉电,存放在RAM上的数据会立刻丢失,存放在RAM中的操作系统副本也会丢失。除了RAM,计算机还有“非易失存的”内存电路(ROM和EEPROM),这种内存在掉电时也能够保存数据,但其大小不足以存储整个操作系统。
由于RAM是易失存的,而ROM和EEPROM的容量又太小,所以操作系统存储在计算机的硬盘上。在引导过程中,操作系统的一个副本被传送到RAM中,计算机在执行输入、输出或存储等操作时,就能够按需要从RAM中快速访问操作系统(见图4-5)。
图4-5 引导程序将操作系统复制到RAM中,以便处理器可以直接访问操作系统
4.1.3 操作系统的组成
操作系统软件肯定是人们所见到的最优秀、最复杂和最庞大的软件之一,所以,真正领会操作系统的概念、原理、方法和技巧等,是有一定困难的。操作系统的设计和实现是所有其他程序设计和实现的基础。程序员如果能理解操作系统的工作原理,就能够编写出更好的中间件和应用程序。此外,无论是为新设备编写驱动程序、创建新的微内核服务器,还是提供能够高效处理发展需求的新系统等,都需要理解基本的操作系统原理和技术。
操作系统原理所涉及的相关主题如图4-6所示。现代操作系统至少具有以下四种职能:存储管理、进程管理、设备管理和文件管理。操作系统的用户界面(GUI)或命令解释程序(shell)负责操作系统与外界的联系,如图4-7所示。
图4-6 操作系统的相关主题组成
图4-7 操作系统的基本组成
1.内存管理
现代操作系统的一个重要职责是存储管理。计算机中存储容量激增,同样所处理的数据和程序也越来越大。存储分配必须进行管理以避免“内存不足”的错误。
2.进程管理
现代操作系统进程管理有三个重要术语:程序、作业和进程。
(1)程序。是由程序员编写的一组稳定的指令,存在硬盘(或磁盘)上,它可能会也可能不会成为作业。
(2)作业。从程序被选中执行,到其运行结束并再次成为程序的这段过程中,程序称为作业。整个过程中,作业可能会或不会被执行。它或者驻留在硬盘上等待被装入内存,或者在内存中等待被CPU执行,或者驻留在硬盘或内存中等待I/O事件。在所有这些情况下程序才称为作业。当作业执行完毕(正常或不正常),作业又变成程序并再次驻留在硬盘中,操作系统不再管理程序。每个作业都是程序,但并不是所有的程序都是作业。
(3)进程。是指执行中的程序,该程序开始运行但未结束。换句话说,进程是驻留在内存中的作业,它是从众多等待作业中选取出来并装入内存中的作业。进程可以处于运行状态或者等待CPU调用。只要作业被装入内存就成为进程。每个进程都是作业,而每个作业未必都是进程。
3.设备管理
设备管理(或者称“输入/输出管理”)负责有效地使用I/O设备。在计算机系统中,I/O设备在数量和速度上受到限制。由于这些设备与CPU和内存比起来速度要慢很多,所以当进程访问I/O设备时,在该段时间内这个设备对其他进程而言是不可用的。设备管理的职责是:
(1)不停地监视所有的I/O设备,以保证它们能够正常运行。同样也需要知道什么时候设备已经完成一个进程的服务,准备为队列中的下一个进程服务。
(2)为每一个I/O设备或是类似的I/O设备维护一个队列或多个队列。例如:如果系统中有两个高速打印机,管理器能够分别用一个队列维护一个设备,或是用一个队列维护两个设备。
(3)使用不同方式访问I/O设备。例如,可以用先入先出法来访问一个设备,而用最短长度优先法来访问另一个设备。
4.文件管理
现代操作系统使用文件管理来控制对文件的访问。文件管理的职能是:
(1)控制对文件的访问。只有获得允许的才能够访问,访问方式也可以不同。例如,进程(用户也称为进程)也许可以读取文件,但不允许写(改变)文件。另一个进程也许被允许执行文件,但不允许查看文件的内容。
(2)管理文件的创建、删除和修改。
(3)可以给文件命名。
(4)管理文件的存储:怎样存储,存在哪里等。
(5)负责归档和备份。