1.1 操作系统导论
在计算机执行满足用户所需功能的工作过程中,主要是以计算机物理硬件为载体,运行计算机程序来实现的。那么,程序是怎样运行的呢?首先,需要使用称为“计算机程序设计语言”的编程语言进行编写程序,如C、C++、Java等。但由于计算机硬件并不认识高级语言编写的程序,需要通过编译将这些源程序“翻译”成计算机能够识别的机器语言程序,这就需要借助编译器和汇编器来完成。其次,机器语言需要加载到内存,形成一个运行中的程序(即进程),而这需要操作系统的帮助。进程需要在计算机芯片CPU上执行才算是真正在执行,而将进程调度到CPU上运行则必须由操作系统来完成。最后,在CPU上执行的机器语言指令,需转换成能够在一个个时钟脉冲里执行的基本操作,这必须由指令集结构和计算机硬件的支持来完成。而整个程序的执行过程,还需要操作系统所提供的服务与程序语言支撑环境(Runtime Environment)。这样,一个从源程序到微指令执行的全过程就完成了,如图1-1所示。
图1-1 计算机中从程序到结果的演变
图1-1线性描述了从程序到结果的简单过程,没有考虑计算机中各种因素之间的穿插、交互等复杂过程,主要是用来帮助计算机专业初学者,更好地理解用户需求是如何通过程序在计算机上执行的。
1.1.1 什么是操作系统
计算机系统能够按用户的要求接收和存储信息,经过处理、计算,输出结果信息,整个工作过程的完成,依赖的是硬件和软件两部分。硬件是指处理器、存储器、输入/输出设备和通信装置等;软件是指为完成特定任务而由硬件执行的程序、数据和其他相关文档。
虽然计算机的体系结构一直在发展变化,但占主流地位的仍是以存储器程序原理为基础的冯·诺依曼型计算机,其存储程序的基本思想是:程序由指令组成,并与数据一起存放在计算机存储器中;计算机加电启动,就能按照程序规定的逻辑顺序,从存储器中读出指令逐条执行,自动完成程序所描述的工作。
计算机软件按照功能划分,可分为三大类:系统软件、支持软件和应用软件。系统软件的功能实现是直接与硬件发生联系,而与具体应用领域无关,主要包括操作系统、设备驱动程序、通信处理程序等;支持软件用于支撑具体应用软件程序的开发和维护,包括软件编译器、开发环境工具(如 JDK、Visual Studio.NET)等,有时支持软件和系统软件之间并没有严格的界限;应用软件则是针对特定应用领域问题的软件工具程序,包括文字处理程序(如 Word)、医疗行业软件、办公自动信息系统等。如图1-2所示的是一个计算机系统的软/硬件层次结构,其中每层都具有一组功能并对外提供相应的接口,接口对层内隐蔽实现细节,对层外提供特定的应用规范。
图1-2 计算机系统的软/硬件层次结构
通过以上对软件程序在计算机系统中执行过程的描述,可以看出,操作系统是计算机系统的核心系统软件,能够有效地控制和管理计算机系统中的硬件和软件资源,并合理组织计算机工作流程,为用户方便而有效地使用计算机提供良好、高效的运行环境。使用操作系统的主要目标可归结为以下几点。
(1)方便用户使用。通过提供用户与计算机之间的友好界面来方便用户使用。
(2)扩充机器功能。通过扩充硬件功能为用户提供服务。
(3)管理各类资源。有效地管理系统中的所有软、硬件资源,使之得到充分的利用。
(4)提高系统效率。合理地组织计算机的工作流程,改进系统性能,提高系统效率。
(5)构筑开放环境。遵循国际标准来设计和构造一个开发环境,其具体含义是:遵循相关的国际工业标准和开放系统标准;支持体系结构的可伸缩性、可扩展性;支持应用程序在不同平台上的可移植性和互操作性。
操作系统与支持软件及应用软件之间的主要区别如下:虽然它们都是程序,但其功能意图不同,操作系统有权分配资源,而其他程序只能使用资源,两者之间是控制与被控制的关系;操作系统直接作用于硬件之上,隔离其他层上的软件,并为其提供接口和服务,所以操作系统是软件系统的核心,是各种软件运行的基础平台,而支持软件及应用软件在这方面的差别并不严格;操作系统对共性服务功能提供支持,与硬件相关但同应用领域无关,因此它可以支持很多应用领域;支持软件及应用软件只能通过操作系统来使用计算机系统的物理资源;操作系统实现资源管理机制,允许应用程序提供资源管理策略。
1.1.2 应用程序与操作系统
为了更好地理解操作系统,下面深入讨论一下用户应用程序和操作系统的关系。通过对计算机系统层次结构的描述,可以看出用户是通过操作系统来使用计算机的,操作系统为用户程序提供了一个虚拟的机器界面,应用程序运行在这个界面之上。但这个现象似乎太抽象,并不能帮助理解它们之间的关系。操作系统是一个“程序”(即程序集合),而用户程序也是程序,程序与程序之间是什么关系呢?实质上二者是调用与被调用的关系。
从用户的角度,操作系统通过虚拟的机器界面给应用程序提供各种服务功能,应用程序在运行过程中不断使用操作系统提供的服务来完成自己的任务。例如:用户应用程序在运行过程中需要读、写磁盘数据,这时就需要调用相应的系统调用(即系统服务函数),来完成该磁盘读、写操作;如果需要通过网络收、发数据包,就需要调用操作系统相应的网络协议服务功能来完成数据的通信。当调用操作系统的某项服务功能时,计算机的控制权从用户应用程序将转移到操作系统,而操作系统在完成这些应提供的功能后,将控制权再返回给应用程序。如图1-3所示,此时用户应用程序为主程序,操作系统成为子程序。
图1-3 用户应用程序为主程序,操作系统为子程序
以上用户应用程序的执行过程,是在整个系统都已正常运行情况下进行的,那么计算机在加电启动后,最先启动的程序是什么呢?是操作系统,用户的应用程序是不能在操作系统启动之前执行的。在此之后,每当启动执行一个应用程序,都相对于操作系统将控制权转移给用户程序,当其执行完毕再返回给操作系统。从计算机系统启动之初,操作系统的先运行角度看,操作系统成为了主程序,在计算机开机期间,都是它在不断调用用户的各种程序,循环往复,直到计算机关闭,如图1-4所示。
图1-4 操作系统为主程序,用户应用程序为子程序
下面深入介绍操作系统在计算机系统中的功能,从而加深理解操作系统的内涵。
操作系统在计算机系统中承担着“管理员”和“服务员”的角色。对内作为“管理员”,操作系统完成计算机系统各种资源的管理、控制与调度,提高系统效率和资源利用率。计算机资源主要包括两大类:硬件资源和信息资源。其中,硬件资源有处理器、存储器、外部设备(输入/输出型设备、存储型设备)等;信息资源则可分为软件程序和数据等。为了使应用程序能够正常运行,操作系统必须对其分配足够的资源;为了提高系统效率,操作系统必须支持多任务程序设计,合理调度和分配各种资源,充分发挥并行性能,使各种部件和设备最大限度地执行操作和保持忙碌。
对外作为“服务员”,操作系统是用户与硬件之间的接口(即人机界面),为用户提供尽可能友好的运行环境和最佳服务。操作系统不仅能够合理组织计算机的工作流程,协调各个机器部件有效地工作,为应用程序提供良好的运行环境,而且通过提供友善的人机接口,使用户能够方便、安全、高效地使用硬件和运行应用程序。
从资源管理的观点,操作系统具有以下六项主要功能。
1)处理器管理
处理器是计算机系统中最为稀有和宝贵的资源,应该最大限度地提高其利用率,可以采用多任务(多道)程序设计技术,组织多个作业同时执行,解决处理器的调度、分配和回收等问题。随着多处理器系统的出现,处理器的管理变得更加复杂。为了描述多道程序的并发执行,操作系统引入了进程的概念,处理器的分配、调度和执行都是以进程为基本单位。随着并行处理技术的发展,在提高资源利用率、系统效率的基础上,把并发执行单位进行进一步细化引入了线程的概念。对处理器的管理和调度最终归结为对进程和线程的管理和调度。
2)存储管理
存储管理的主要任务是管理存储资源,为多道程序运行提供有力的支撑,提高存储空间的利用率。存储管理的重点是内部存储器管理。如果系统不断地完成已有程序的执行、接受新程序的执行请求,那么对内存资源的要求各不相同,操作系统必须正确地分配和回收内存。通常,程序中所表示的地址不同于该程序运行时的实际内存地址,操作系统要负责这两种地址之间的转换。当多个执行程序需要共享内存时,操作系统要保证它们彼此隔离、互不干扰。当用户程序的存储需要容量超过系统当前可提供的物理内存空间时,操作系统必须设法利用外存来满足用户程序的需要。简而言之,存储管理的主要功能包括存储分配、地址转换与存储保护、存储共享与扩充等。
3)设备管理
设备管理的主要任务是:管理各种外部设备,完成用户所提出的输入/输出(I/O)请求;加快数据传输速度,发挥设备的并行性,提高设备的利用率;提供设备驱动程序和中断处理程序,为用户隐蔽硬件操作细节,提供简单的设备使用方法。
4)文件管理
上述三种管理是针对计算机硬件资源的管理,文件管理则是针对信息资源的管理。在现代操作系统中,通常把程序和数据以文件形式存储在外存储器(如硬盘)上,以供用户使用。这样,外存储器上保存大量文件,如果对这些文件不能采取合理的管理方式,就会导致混乱或使系统遭受破坏,造成严重后果。为此,在操作系统中配置文件系统,主要任务是:对用户文件和系统文件进行有效管理,实现按名存取;实现文件的共享、加密/解密和压缩,保证文件的安全性;向用户提供一整套能够方便使用文件的操作命令。
5)网络与通信管理
计算机网络起源于计算机技术与通信技术的结合,近些年来,从单机之间的运程通信,到全世界成千上万台计算机的联网工作,网络应用领域已经十分广泛。操作系统至少应具有与网络有关的功能有:网络资源管理,实现网上资源共享,管理用户对资源的访问,保证信息的安全性和完整性;数据通信管理,按照通信协议的规定,通过通信软件来实现网络上计算机之间的信息传递。
6)用户接口
为了使用户能够灵活、方便地使用计算机硬件和系统所提供的功能服务,操作系统向用户提供一种使用手段,即用户接口。用户接口包括两类:程序接口和操作接口。用户通过这些接口能够方便地调用操作系统功能,有效地组织用户任务及其处理流程,使得整个计算机系统高效地运转。
1.1.3 为什么学习操作系统
在认识了什么是操作系统,操作系统与用户应用程序的关系,及其主要功能后,读者应体会到操作系统的重要性。如果仅仅是因为操作系统重要就学习它吗?我们生活的世界上重要的事情太多了,难道都要学吗?在计算机专业的学生中,有些不学操作系统也照样可以编写软件。那我们为什么还要学呢?
首先,操作系统的功能在很多领域都需要使用。例如,做基于We b的并发程序开发(We b Services方面的应用开发),这个领域就应用了大量的操作系统的概念和技术。如果你已经对操作系统学有所成,那么就可以充满信心地进行具有复杂功能程序的开发工作了。
其次,操作系统的思想及实现技巧应用在很多领域,如抽象、缓存、并发等。操作系统简单来讲,就是实现抽象、进程抽象、文件抽象、虚拟存储抽象等。而在其他领域中也使用抽象,如软件开发过程中,数据结构和算法设计就大量应用抽象,再如面向对象软件开发中的类/对象的抽象。
不过最重要的学习操作系统的理由,应是对操作系统知识的强烈求知欲所产生的浓厚的专业学习兴趣。对于一个从事计算机专业领域的人来说,难道不想知道自己编写的程序是如何在计算机上运行的吗?对于一个程序设计员,有没有考虑过为什么计算机能进行计算?在自己组装一台新计算机或者购买了一台新品牌计算机时,打开主机箱的盖子,看到一堆硬件:芯片、主板、布线等,这些硬件并不会告诉你太多有关计算机运转的信息。如果非常好奇地想知道计算机是如何运转的,就请学习操作系统吧!