操作系统(第3版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-11-30 08:16:30

点击下载

作者:罗宇

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

操作系统(第3版)

操作系统(第3版)试读:

前言

操作系统是计算机系统的核心系统软件,它负责控制和管理整个计算机系统的资源并组织用户高效协调使用这些资源,使计算机各部件极大程度地并行运行。操作系统课程是计算机科学与技术专业的核心课程。随着计算机技术的发展,各类嵌入式系统得到广泛应用,其他相关专业也相继把操作系统作为一门重要的必修或选修课程。

本书阐述了操作系统的基本工作原理及设计方法,以多道程序技术为基础,以通用操作系统主要功能部件为主线,介绍操作系统的概念、功能、设计等内容。在最后一章给出了当前流行的Linux操作系统设计实例。

本书是国防科技大学国家精品课程和国家优秀教学团队的建设成果。作者长期从事计算机操作系统设计开发和操作系统教学工作,根据20多年的科研和教学实践积累的经验,参考了国内外近几年出版的教材和文献,并结合科研开发工作对操作系统教学的要求,注意到当前我国计算机教育、研究与开发、应用的现实情况,编写了本书,剔除了传统操作系统教科书已无实际使用价值的内容,增加了实际操作系统的典型处理方法,使本书的内容具有先进性及实用性。并且本着循序渐进的原则,采用通俗的语言和先进的实例,全面阐述操作系统的基本概念、原理、方法。既注重对操作系统经典内容的论述,又注意介绍操作系统的发展趋势及重要的研究开发成果。全书共分10章,每章之后配有小结及习题,以加深理解。

第1章介绍什么是操作系统及操作系统的形成、发展及现状;

第2章介绍操作系统的运行机制与用户界面;

第3章介绍进程管理及线程的基本思想;

第4章介绍并发及死锁;

第5章介绍存储管理;

第6章介绍设备管理;

第7章介绍文件系统;

第8章介绍并行与分布式操作系统;

第9章介绍保护与安全;

第10章介绍Linux操作系统实例。

附录提供与课程配套的实验参考资料。

其中,前7章是操作系统的核心内容,可根据教学要求及课时安排选择增加第8、9、10章内容。本书适于42~64学时的课堂教学。建议在讲完前4章时布置多进程编程等实验,穿插讲解习题及课程实验内容,本书同步编写了配套实验教材《Linux操作系统实验教程》(ISBN 978-7-121-08217-7),本教材为任课教师免费提供电子课件。

本书是罗宇、邹鹏、邓胜兰等编著的《操作系统》(第2版)的修订版。修订中,参考了全国硕士研究生入学统一考试操作系统大纲和实用新技术要求,对所有章节进行了改编和补充。本次修订由罗宇、邹鹏、邓胜兰完成,罗宇负责统稿;陈燕晖、文艳军、晏益慧、张辉、许祥为本书修订提供了素材,做出了贡献。

本书可作为高等院校计算机及相关专业教材,对于具有高级程序设计语言初步知识和对计算机有一定了解的专业人士,亦是较全面的参考书。书中疏漏谬误之处恳请专家、读者指正。

编著者

于长沙·国防科技大学计算机学院

第1章 绪论

计算机系统在国民经济和人们生活中起着越来越重要的作用。操作系统是计算机系统不可或缺的系统软件,是计算机系统的调度、控制中心。一方面,操作系统将裸机改造成为功能强大、系统各部件高效运行、使用方便灵活、安全可靠的虚拟机,为用户提供计算机系统的良好使用环境;另一方面,操作系统采用合理有效的方法组织多个用户任务共享计算机的各种资源,最大限度地提高资源的利用率。

自世界上第一台计算机 ENIAC 于 1946 年问世以来,计算机在运算速度、存储容量、元器件工艺及系统结构等方面都有了惊人的发展。以前,人们按照计算机元器件工艺的演变过程将计算机的发展划分为4个时代:电子管时代、晶体管时代、集成电路时代和大规模集成电路时代。与硬件发展相类似,人们也将操作系统的演变和发展过程划分为4个时代:单道批处理时代,多道批处理、分时和实时系统时代,同时具有多方面功能的多方式系统时代,并行与分布式系统时代。

本章将介绍什么是操作系统及操作系统在计算机系统中的地位和作用。并通过阐述操作系统历史的演变过程,使读者对操作系统的基本概念及技术的产生和发展等问题有一个直观的了解,从而使读者对不同类型操作系统的基本特征、今后的发展方向及目前流行的操作系统有更深刻的认识。

1.1 什么是操作系统

众所周知,处理机、主存、磁盘、终端、网卡等硬件资源通过主板连接构成了看得见、摸得着的计算机硬件系统。为了能使这些硬件资源高效地、尽可能并行地被用户程序使用,也为了给用户程序提供易用的访问这些硬件的方法,我们必须为计算机配备操作系统软件。操作系统的工作就是管理计算机的处理机、主存、外设等硬件资源,提供存放于存储设备的文件等逻辑资源,并组织用户任务(如以进程形式)使用这些资源。

操作系统是一种系统软件,是软、硬资源的控制中心,它以尽量合理有效的方法组织单个或多个用户以多任务方式共享计算机的各种资源。1.1.1 计算机系统的软件构成

计算机系统的软件层次及构成如图1.1所示。图1.1 计算机系统的软件层次及构成

当用户在计算机中安装操作系统时,如图 1.1 所示的操作系统内核、命令解释器、编辑器、编译器、各种库程序,甚至数据库管理器、Web 服务器等都从安装介质复制到了计算机系统的磁盘上。

无论是安装UNIX、Linux还是Windows操作系统,命令解释器都是必不可少的一个程序,用户通过它来使用计算机系统。如果没有它,用户就无法操作计算机,无法输入命令让计算机去执行(注意,在窗口界面中,用户通过与命令解释器对应的程序管理器,如Windows的explorer.exe来使用计算机)。在现代操作系统实现中,命令解释器程序没有作为操作系统内核的组成部分,但它在使用计算机过程中是不可缺少的,用户在终端输入的命令就是由命令解释器程序接收并解释执行的。其他的操作系统内核层之上的程序则是根据计算机的定位(服务器或工作站)而选择安装的。如果将计算机定位成程序开发用的工作站,那么用户必须安装编辑器进行程序编辑,并安装编译器进行程序编译。如果把计算机作为一个网络上的Web服务器,那么必须安装Web服务器程序。无论是用户自编的普通C语言程序还是数据库应用程序,都在操作系统安装并运行后开发或安装。这些在操作系统内核层之上的程序,不管是命令解释器、Web 服务器或用户自编的程序,都是通过操作系统提供的进程机制来运行的。

从狭义上看,操作系统只包含如图 1.1 所示的操作系统内核,它是一个非常重要的系统程序,管理着系统中所有的公共资源,并提供实现程序运行的进程机制。由于操作系统内核工作的重要性、特殊性,它必须在一种特殊的保护状态下运行,以免受到用户层程序的干扰和破坏,它提供一组称为系统调用的接口,供上层程序调用,从而保证操作系统内核在特殊保护状态下运行的需求,并且满足上层程序对系统资源的申请、使用、释放以及进程的创建、结束等诸多功能的需求。

图 1.1 中的各种库程序实际上就是一些可以重用的、公用的子程序,它们提供形形色色的功能。系统提供这些库程序是为了方便用户编程,用户不必为了实现一个通用的功能再重写上述库程序代码,而只要引用库程序中的函数即可。库程序可以看成一些通用的、公共的程序集合,利用内核提供的简单的资源管理功能实现复杂的复合功能。这些通用的公共程序之所以不放到操作系统内核中去实现,是因为它们不涉及系统公共资源的管理,也是为了控制内核的大小。1.1.2 操作系统作为特殊子程序

从图 1.1 可以看出,操作系统内核位于计算机硬件之上。操作系统内核为用户层程序提供系统调用(又称广义指令)功能。系统调用与普通函数调用相似,可以看成是特殊的公共子程序,因为这些程序提供了一些可以被任意用户层程序调用的公共功能,所以用户不需要再编写实现这些功能的程序,只要调用操作系统内核提供的相应“系统调用”即可。但是,要特别注意系统调用的特殊性,即系统调用处理程序运行在一种特殊的保护状态下。在这种状态下,程序可以执行一些特权指令,访问用户层程序访问不到的系统存储空间。系统调用之所以具有这样的特殊性,是因为系统调用处理程序涉及系统共享资源的操作。

举例来说,求的值是许多用户程序都要做的工作,可以把它作为一个公共子程序实现。那么它需要作为系统调用在操作系统内核实现吗?回答是否定的。虽然计算x需要许多条机器指令来实现,但因为它不涉及系统的共享资源,只对输入变量x进行操作,因此可以把它作为数学函数库中的子程序来实现。

以前的计算机都使用软盘,许多基于Intel x86的个人计算机都使用NEC的PD765软盘驱动器(简称软驱),该软驱支持16条命令,可以通过对软驱控制部件中的寄存器置不同的值来执行初始化、移动磁头、读/写数据等命令。其中,最基本的命令是读/写命令,需要 13个参数,如磁盘块地址、每个磁盘的扇区数、物理介质中所用的记录模式、扇区间距等。当操作完成时,软驱控制部件中的状态寄存器中有一堆状态位,由驱动程序判定是正常完成还是异常结束。在启动读/写命令前还需要判定软驱电机是否已启动,若未启动还需要先启动电机。如果这些操作都交给用户编程实现,不仅复杂,而且每个用户都要重复编程,多个用户使用时还会引起混乱。因此,操作系统给用户提供一个简单的统一的文件操作界面,即软盘上包含多个文件,每个文件可以按照读/写方式打开,然后进行读/写,最后关闭文件。用户无需知道电机如何启动、如何读/写数据,也不需要知道要读/写的数据放在软盘的哪个扇区,只需要知道读/写哪个文件的哪一段数据即可,利用这个简单的文件操作界面就可以与软盘进行数据交换。这个文件操作界面由操作系统的系统调用实现,因为软驱不是某个用户的私有资源,软盘上的文件可以供多个用户访问,涉及到软驱和文件的管理数据都应该受到保护,所以文件操作以操作系统内核系统调用形式实现。1.1.3 操作系统作为资源管理者

计算机由处理机、主存、辅存、终端设备、网络设备等硬件资源组成。处理机提供程序执行能力;主存、辅存提供程序和数据的存储能力;终端设备提供人机交互能力;网络设备提供机间通信能力。这些硬件资源要能被计算机用户高效地使用,必须有适合每种硬件资源特点的资源分配和使用机制。

为使硬件资源充分发挥作用,必须允许多用户或单用户以多任务方式同时使用计算机,以便让不同的资源由不同的用户任务同时使用,减少资源的闲置时间。例如,当一个用户任务将文件内容从磁盘往主存的缓冲区读出时,另一个用户任务可以让自己的程序在处理机上运行。这样,处理机、主存、磁盘同时工作,也就提高了资源利用率。

要让每种资源被多用户任务充分利用,就需要研究每种资源的特点。对于单处理机来说,它只能执行一个指令流。如果多个用户任务都要使用它,那只有让多个用户任务的程序分时地在处理机上运行,也就是说,处理机交替地运行多个用户任务中的程序。这意味着,操作系统要合理调度多用户任务使用处理机。存储设备为程序和数据提供存放空间,只要多个用户的程序和数据按照规定的位置存放,互不交叉占用,它们是可以共存的,操作系统要做的事就是管理存储空间,把适用的空间分配给用户的程序和数据使用,当用户任务访问这些程序和数据时要能够找到它们。

针对不同资源特点,资源管理包含两种资源共享使用的方法:“时分”和“空分”。

① 时分就是由多个用户进程分时地使用该资源,除了上述的处理机外,还有很多其他的资源也必须分时地使用,如外设控制器、网卡等,这些控制部件包含了控制I/O的逻辑,必须分时地使用。

② 空分是针对存储资源而言,存储资源的空间可以被多个用户进程共同以分割的方式占用。

在时分共享使用的资源当中,有如下两种不同的使用方法:

① 独占式使用。独占表示某用户任务占用该资源后,执行对资源的多个操作,使用一个完整的周期。例如,如果多用户任务使用打印机,那么对打印机的独占式使用是指多用户任务一定是分时地使用该打印机的,每个用户任务使用打印机时,执行了多条打印指令,打印了一个完整的对象(如完整的文件)。这里,每个用户任务要执行多条打印指令,为了不让多条打印指令在执行过程中被别的打印任务中断,用户任务需要在执行打印指令前申请独占该打印机资源,执行完所有打印指令后再释放。

② 分时式共享使用。这种共享使用是指用户任务占用该资源无需使用一个逻辑上的完整周期。例如,对处理机的使用,用户任务随时都可以被剥夺CPU,只要运行现场保存好了,下次该用户任务再次占用CPU时就可以继续运行。再如,对磁盘的输入/输出,当一个用户任务让磁盘执行一条I/O请求后,其他用户任务又可向磁盘发I/O请求,系统并不要求某个用户任务的几个I/O请求之间不能插入其他用户任务的I/O请求。

操作系统应针对不同的资源类型,实现不同的资源分配和使用策略,并为资源分配、释放、使用提供相应的系统调用接口。1.1.4 操作系统提供程序并发运行机制

用户可使用计算机进行科学计算、数据管理、通信、控制等工作。要实现所述的这些任务,必须执行相应的程序。用户使用处理机来执行程序,用程序驱动外部设备来进行数据交换,驱动网络设备来进行通信。用户的意图必须由程序及程序的输入参数表示出来,为了实现用户意图,必须让实现相应功能的程序执行;为了能让程序执行,需要由操作系统给程序及程序数据安排存放空间;为了能提高资源利用率,增加并发度,还必须能让多个用户程序能分时占用处理机;为了能够让一个程序还没运行完就让另一个程序占用 CPU 运行,就必须保存上一个程序的运行现场。因此,必须要对实现各种用户意图的各个程序的执行过程进行描述和控制。

说明程序执行的状态、现场、标识等各种信息,有选择地调度某个程序占用CPU运行,这些工作必须由操作系统完成,这也是为了实现程序对CPU的分时使用。

操作系统一般用进程机制来实现程序的执行。

进程是指运行当中的程序,也就是指程序针对于某一数据集合的执行过程。操作系统的进程调度程序决定 CPU 在各执行程序间的切换。操作系统为用户提供进程创建和结束等的系统调用功能,使用户能够创建新进程以运行新的程序。操作系统在系统初始化后,会为每个可能的系统用户创建第一个用户进程,用户的其他进程则可以由先前生成的用户进程通过“进程创建”系统调用陆续创建,以完成用户的各种任务。

在支持交互使用计算机的系统中,用户的第一个进程往往运行命令解释器程序(对于图形窗口终端用户而言,就是具有窗口界面的程序管理器,如 Windows 操作系统的explorer.exe),这个程序会从终端获得用户输入的命令(或用户单击执行程序图标的信息),再进行相应的处理,可能会调用操作系统的“创建进程”系统调用,创建新进程去运行实现命令功能的程序。例如,在Linux操作系统控制的终端上输入:

$ cp/home/ly/test.c/home/wq/hello.c

那么,这一行字符串会由命令解释器程序获得,它会创建一个子进程,由子进程去运行cp实用程序,由cp实用程序建立一个新文件/home/wq/hello.c,并把/home/ly/test.c文件的内容读出来,写入hello.c中。

1.2 操作系统的发展历史

在计算机刚刚诞生的20世纪40年代,计算机系统仅由硬件和应用软件组成。在这一时期,整个计算机系统是由用户直接控制使用的,所以又称为“手工操作”阶段。当时的计算机不仅速度慢、存储容量小,而且外部设备简单,辅存主要借助磁带,如图1.2所示,整个计算机系统由单个用户独占使用。当时用户使用计算机的大致方法是:将程序和数据以穿孔方式记录在卡片或纸带上,把卡片或纸带装在输入设备上;然后在控制台上形成输入命令,启动设备将卡片、纸带信息或磁带上的信息输入到指定的主存单元;接着在控制台上指定主存启动地址,并启动程序运行;最后在打印机等输出设备上取得程序运行的结果。图1.2 早期计算机系统

显然,在这种使用方式下,用户在上机时独占全部资源,使用机器语言编写程序,且对计算机各部分的工作直接实施人工干预,或者由用户自己所写的程序控制。在硬件各部分速度较低且程序量较小的情况下,这种方式还能被人们所接受。但是,随着计算机速度的提高和FORTRAN,COBOL等高级程序设计语言的问世,这种方式势必使人无法忍受。

例如,用户如要想运行一个用FORTRAN语言编写的程序,必须首先把存有FORTRAN编译程序的磁带安装在磁带机上,将FORTRAN编译程序和用户编写的FORTRAN源程序调入主存,并对FORTRAN源程序进行编译;然后再安装磁带上的“连接程序”,对编译好的程序进行连接,形成目标程序;最后启动目标程序运行。

由此可见,由于一批包括语言编译器在内的系统软件的问世,使用户上机过程变得更繁杂,并增加了程序运行前的准备时间。由于计算机速度的提高,上述人工操作势必造成更大的资源浪费。为了缩短运行前的准备时间,提高计算机资源的利用率,人们提出了简单的改进措施,引入了“系统操作员”的概念。各用户将自己的程序及程序的运行步骤(控制意图)交给系统操作员,系统操作员将这种形式的一批用户作业按类进行划分,每次处理一类作业。

例如,将需要进行 FORTRAN 编译程序的作业组织成一类依次进行编译,并由系统操作员控制计算机运行用户程序。当然,这种使用计算机的方法仍旧停留在手工操作阶段,人的操作速度与机器运行速度相比仍存在极大的差距。由于人的操作缓慢,使得计算机资源大部分时间闲置,因此急需用程序来代替人的手工操作。1.2.1 监督程序

20世纪50年代,为了减少系统操作员工作所花的时间,提高资源利用率,人们开始利用计算机系统中的软件来代替系统操作员的部分工作,从而产生了最早的操作系统——早期批处理系统。

1.批处理系统

批处理系统的基本思想是:设计一个常驻主存的程序(监督程序 Monitor),操作员有选择地把若干用户作业合成一批,安装在输入设备上,并启动监督程序。然后,由监督程序自动控制这批作业运行。监督程序首先把第一道作业调入主存,并启动该作业。一道作业运行结束后,再把下一道作业调入主存启动运行。待一批作业全部处理结束后,系统操作员则把作业运行的结果一起交给用户。按照这种方式处理作业,各作业间的转换以及各作业的运行完全由监督程序自动控制,从而减少了部分人工干预,有效地缩短了作业运行前的准备时间。

所谓作业(Job),是用户在一次上机活动中要求计算机系统所做的一系列工作的集合。从执行的角度看,作业由一组有序的作业步组成,如“编译”、“运行”分别称为不同的作业步。

当监督程序取代系统操作员的部分工作后,用户应以某种方式告知监督程序其作业的处理步骤。因此,在早期批处理系统中引出了“作业控制语言”和“作业控制说明书”的概念。作业控制说明书是利用作业控制语言编写的,用以控制作业运行的一段描述程序。在组织一道作业时,通常将“作业控制说明书”放在被处理的作业前面(或插入适当位置),监督程序则通过解释执行“作业控制说明书”中的语句来控制作业运行。典型的卡片作业结构如图1.3所示。图1.3 典型的卡片作业结构

这叠卡片中某些卡片表示了作业控制语句,监督程序通过逐条解释、执行该说明书中的作业控制语句自动控制作业运行。$JOB 语句说明该作业的名字,预计最大执行时间等信息。监督程序解释$FORTRAN语句的结果是把FORTRAN编译程序调入主存,并启动编译程序编译后面的源程序。编译结束后,控制返回到监督程序。监督程序解释$LOAD 语句的结果是通过连接程序把经过编译的程序连接起来,形成可执行程序。最后解释$RUN 语句,从而启动可执行程序运行。

监督程序内专设一个作业控制程序(Job-Controller)以控制作业的运行。批处理作业的控制意图描述在“作业说明书”中。作业控制程序在控制某一道作业运行时,其实质性工作是解释执行“作业说明书”中的语句,实现对作业的控制。从逻辑上看,一个作业由三部分组成:源程序(或程序)、数据及“加工”步骤。监督程序一旦接收到一道作业后,根据“加工”步骤所规定的动作逐步完成对作业的加工活动。

如果用户可以使用全部的机器指令,可以直接控制和使用系统资源(如主存、外部设备等),用户编程中的错误往往可能导致各种预想不到的后果。为了避免这类错误发生,人们将机器指令分为“普通指令”和“特权指令”,并且引入了“模式/态(Mode)”的概念。把有关I/O的指令、对特殊寄存器的访问等列为特权指令,并且规定只有监督程序才有权执行特权指令,用户程序则只能执行普通指令。将I/O指令列为特权指令后,用户便不能直接控制设备进行传输了。如果用户希望进行I/O操作,则必须向监督程序提出请求;监督程序通过调用系统内部的程序段来完成用户的 I/O 请求。由此又引出了“系统调用(System Call)”或称“广义指令”的概念。

监督程序为用户提供一系列分别完成各种不同功能的系统调用程序段。用户程序中可以用一条特殊的硬件转移指令请求一次特定的系统调用。当处理机执行到用户程序的系统调用指令时,硬件通过产生“自陷(trap)”并借助转换机制将当前的用户模式转变为监督模式,控制也随之转入监督程序。监督程序根据用户提供的调用参数进行相应的处理,完成设备I/O等功能。处理结束后,监督程序则根据“自陷”前所保存的现场将模式改变为用户模式,退回用户程序继续执行。“系统调用”概念的引入提高了监督程序在整个系统中的地位,丰富了监督程序的功能。监督程序不仅对作业的处理流程进行自动控制,而且还负责为用户程序的运行提供各种功能的服务。“系统调用”的引入也为用户提供了使用计算机系统的新界面,使用户从直接使用物理处理机的繁杂束缚中解脱出来,呈现在用户面前的是一台功能强、使用方便的虚拟处理机。引入“系统调用”后,用户对系统内部各种资源的使用均由监督程序代为完成,因而也使系统更加安全,避免了用户在自编程使用资源时可能出现的某些错误,也有利于提高资源利用率。

在手工操作阶段,存储器全部由用户支配使用。引入监督程序后,存储器不再由用户独占,常驻主存的监督程序必须占据部分主存空间。通常,监督程序占用主存的 0~k 单元,k+1~n 单元供用户程序占用。监督程序所在的存储空间称为“系统空间”,用户程序所在的存储空间称为“用户空间”。为了避免用户程序执行时有意或无意地对系统空间进行存取访问,硬件提供一个界地址寄存器,用以存放系统空间与用户空间的分界地址。当系统处于用户模式时,每访问一次主存,硬件自动进行地址越界检查,从而保证了监督程序不被破坏。这种保护称为“存储保护”。

在早期批处理系统中,当系统动态运行时,一段时期处于监督模式,一段时期又处于用户模式。从用户模式进入监督模式主要是由用户程序中的系统调用而引起的。例如,用户请求设备I/O或请求结束运行。但是,若用户程序执行过程中永不出现系统调用,或者永不出现请求结束运行的系统调用(如用户程序进入了“死循环”),系统监督程序便失去了作用。为了防止这种情况发生,人们设置了“定时器中断”。

定时器(Timer)是一个硬件计数器,计时长度可以根据需要而调整。计数器根据硬件的计时周期自动计时,计数器满后便发生定时器中断。用户程序执行时若碰到定时器中断,则无条件进入监督程序。监督程序根据当前作业说明(或规定)的“最大运行时间”值来判断该程序是否进入了“死循环”,从而可以有效地防止某个用户程序长期垄断系统处理机的现象。

引出上述概念后,早期批处理系统中的监督程序工作流程如下:(1)判断输入设备上是否有待输入的作业,如果没有,则等待作业输入。(2)从设备上输入一道作业。(3)控制作业运行。

① 取“作业说明书”中的一条语句,解释执行。如果是一条“作业终止”语句,则删除该作业,转第(1)步。

② 如果当前是一条“执行性语句”(如请求编译、请求运行用户程序等),则在主存中建立相应程序的运行环境,并分配CPU,开始在用户模式执行该程序。

③ 在用户模式的程序执行过程中,如果发生“中断”事件(如 I/O 中断、系统调用、程序执行错误等),硬件将控制转入监督程序。当“中断”事件处理结束后,返回用户态,用户程序继续执行。

④ 用户程序执行结束后,进入监督程序,控制转步骤①,取下一条“作业说明书”语句执行。

监督程序如同一个系统操作员,它负责批作业的I/O,并自动根据“作业控制说明书”以单道串行的方式控制作业运行,同时在程序运行过程中通过提供各种系统调用,控制使用计算机资源。虽然监督程序并不能被称为操作系统(它与操作系统的本质差别在于监督程序不具有并发控制机制),但它与操作系统有许多相似的特征。监督程序在系统中的地位和作用、实现的基本目标及管理资源的基本方法与操作系统类似。真正的操作系统就是在此基础上进一步发展和完善起来的。

与手工操作阶段相比,监督程序的引入有效地减少了人工干预时间和作业运行前的准备时间,相对提高了CPU的利用率。但是,在计算机速度大幅度提高的形势下,用这种方法管理计算机远不能适应需要。首先,在一个CPU上运行的程序启动I/O操作时CPU被迫处于空闲状态或忙等待(Busy_Wait)状态,也就是说,CPU启动I/O操作后在循环判断I/O是否完成,而没有做实质性工作,这将导致高速的CPU受到慢速设备的牵制,从而使CPU无法充分利用。

2.利用脱机I/O改善系统性能

由于作业的I/O与作业的运行是串行的,所以受卡片机、光电机、打印机等慢速I/O设备的影响,CPU的利用率难以提高。为了进一步提高系统的工作效率,必须解决低速I/O的问题。磁带机的传输速度比卡片机、光电机和打印机的速度快,若用磁带机代替这类低速设备便可进一步缩小CPU与外设间速度上的差异。历史上人们曾采用脱机I/O技术实现作业I/O,其系统模型如图1.4所示。图1.4 脱机I/O系统模型

在采用脱机I/O技术的系统中,主机的所有I/O操作都是通过磁带机进行的。用户的作业由另一台能力较弱、价格较低的卫星机负责从卡片机传输到磁带上(称为输入带),然后操作员将输入带安装到与主机相连的磁带机上。主机在处理输入带上的作业时,将产生的输出结果直接送到输出带上。操作员再将输出带安装到卫星机上,由卫星机负责将输出带上的信息从打印机上输出。由于磁带机比慢速I/O设备(如卡片机、打印机)的速度快,因而按照这种脱机方式控制作业的I/O,可以减少作业I/O所花的时间,有效地提高CPU的利用率。如果将一台主机与多台卫星机有机地组合,使速度得到最好的匹配,则可以大幅度提高系统的处理能力。从20世纪50年代末到60年代初,这种脱机处理方式被广泛地应用于批处理系统中。

无论如何,由于CPU与I/O设备是以串行方式工作的,也就是说,当CPU工作时,I/O设备闲着;当I/O设备工作时,CPU在忙等待,这就限制了设备的利用率。另外,从方便用户的角度来说,采用这种批量处理的控制方法,用户不能以交互方式使用计算机,从而限制了对计算机的灵活使用。随着对这些问题不断深入的研究和解决,逐步形成了第2代操作系统。1.2.2 专用操作系统

20世纪60年代初,计算机硬件有了很大的发展。例如,主要元件由电子管变成了晶体管,出现了磁盘、通道、终端等部件。而这些硬件的发展为监督程序提出了新的研究课题,也为操作系统的形成提供了重要的物质基础。这一时期是操作系统形成的重要时期。随着计算机应用的巨大牵引,不仅批处理系统得到充分的发展,而且还出现了实时(Real Time)、分时(Sharing Time)等不同类型的系统。

1.多道批处理系统

在早期批处理系统(也称单道批处理系统)中,CPU 与 I/O 设备以串行方式工作,故两者的利用率较低。为了提高资源利用率,人们开始使用 I/O 缓冲、SPOOLing 等技术,尤其是引入了“多道程序设计”(Multiprogramming)的思想,使单道批处理系统发展为多道批处理系统。(1)利用I/O缓冲异步编程

在单道批处理系统中,作业的处理过程是单道串行的,所以在监督程序的控制下 CPU与外设也按串行方式工作。为改变这种串行工作方式,人们首先采用了缓冲(Buffering)技术使两者在一定程度上并行操作。

例如,在主存中建立两个长度相同的缓冲区:B0,B1。对于一批待输入的信息,首先将其中的一个记录从设备上读入B0,读完后接着将下一个记录从设备上读入B1,与此同时,CPU开始处理B0中的记录。待CPU处理工作与输入工作均结束后,则将下一个记录读入B0,CPU同时处理B1中的记录。如此重复直至将信息全部输入,这种利用双缓冲区实现的I/O操作在一定程度上实现了CPU与外设并行工作。这类并行的实现要求I/O设备有较强的功能,能不依赖于CPU实现外设与主存独立交换数据,在引入通道技术后这个缓冲技术得到了广泛应用。(2)SPOOLing技术

通道技术的引入,使CPU与外设并行操作成为可能。

通道是指专门用来控制I/O的硬件装置,可以实现外设与主存直接交换数据,在相当长的时间里不用打扰 CPU,因此这时CPU 可以去干别的事情。为了能够消除脱机 I/O 带来的人工干预的麻烦,又要保持脱机I/O系统中作业高速入出主存的特点,人们借助通道和磁盘成功地实现了著名的SPOOLing系统。通道也可看成是专门的I/O处理机,磁盘则是一种比磁带更快且能够随机存取的辅助存储设备。

SPOOLing(Simultaneous Peripheral Operation On Line)的含义是并发的外部设备联机操作。用 SPOOLing 技术控制批处理系统中作业 I/O(如图 1.5 所示)的基本思想是:用磁盘(或一组磁盘)设备作为主机的直接I/O设备,即系统直接从磁盘上选取作业运行,作业的运行结果也直接存入磁盘,相应的通道(在设备驱动程序驱动下)则负责并行地将卡片机上的用户作业输入到磁盘,或者将磁盘中作业的运行结果从打印机上输出。图1.5 SPOOLing技术控制批处理系统中作业I/O

通道直接受主机控制,主机与通道之间借助中断机制相互通信。例如,只要卡片机上有用户作业,操作系统便启动设备通道,通道被启动后便将作业依次地通过主机主存传输至磁盘,在作业输入期间主机可以并行地从事其他工作。类似地,只要磁盘中存在等待输出的信息且打印机空闲,则操作系统通过启动通道将信息从打印机上输出。所以,SPOOLing 技术又被称为“伪脱机 I/O”技术,被广泛地用于后来的批处理系统中。采用 SPOOLing 技术实现 I/O 的系统通常又简称为 SPOOLing 系统。SPOOLing技术为实现多道批处理系统中的多道程序设计思想提供了重要的基础。(3)多道程序设计技术

如前所示,人们采用SPOOLing技术,利用主机和通道间的并行性,可以使作业的I/O与主机运算并行,提高了系统效率。当在主机上运行的某一道作业需要传输大量数据时,人们可以采用缓冲技术来获得一定程度上的并行。尽管如此,由于系统中作业之间仍以串行方式被处理,即主存任何时刻至多保持一道作业,处理完一道作业后再从外部选取另一道作业,所以无法进一步提高资源(如CPU、主存等)的利用率。为了从根本上解决这一问题,人们提出了“多道程序设计”技术。

多道程序设计技术的基本思想是,在主存同时保持多道程序(作业),主机(对于单CPU系统,书中如没有特殊说明则都是单CPU系统)以交替方式同时处理多道程序。

所谓多道程序,从宏观上看,是指主机内同时保持和处理若干道已开始运行但尚未结束的程序。而采用这种多道程序设计技术的系统被称为多道程序设计系统。

由于任何一道作业的运行总是交替地串行使用CPU、外设等资源,即使用一段时间的CPU,然后使用一段时间的I/O设备,如图1.6所示,所以如果采用多道程序设计技术,加之对多道程序实施合理的运行调度,可以大大提高CPU与外设的利用率,使两者高度并行工作。

如图1.7所示,是三道作业同时运行时CPU与外设的利用情况。当作业A因请求I/O而放弃CPU时,操作系统为作业A启动相应通道(由通道独立地控制I/O)后,便把CPU重新分配给作业B,此时CPU与外设并行工作。类似地,当作业B也请求I/O时,CPU则重新分配给作业C。依此类推,只要系统能保持足够道数的作业,再加上合理的调度,便可能使CPU与I/O设备获得高度的并行。采用多道程序设计技术无疑大大提高了主存及其他资源的利用率。图1.6 单作业执行过程图1.7 多道作业执行过程

引入多道程序设计技术无论对于实现多道批处理系统还是实现交互式、分时乃至实时系统均提供了重要的技术手段。多道程序设计系统的出现标志着操作系统的形成。

操作系统的最基本特征如下:

① 并发(Concurrent)机制,用以支持多道程序设计技术。

② 共享(Sharing)机制,控制各种并发活动正确共享系统软、硬资源。

正是由于这两个特征使得操作系统变得极其复杂。

利用上述论及的各种技术,特别是多道程序设计技术,便将早期的单道批处理系统发展成了多道批处理系统。多道批处理系统的基本特征是:系统按照成批(或称批量)的形式输入用户作业,并采用SPOOLing技术和多道程序设计技术控制多道作业运行。

2.分时系统

多道批处理系统的出现有效地提高了系统资源的利用率,但却失去了手工操作阶段的“交互性”优点。也就是说,使用多道批处理系统的用户必须将其作业的控制意图完全地描述在“作业控制说明书”中,用户一旦把作业交给了系统,便不能再以“会话”方式控制作业运行了,所以使用户在一定程度上感觉不便。

首先,用户的算题周期延长了,用户向机房提交的作业往往需要几经反复才能获得所需结果(对一个新程序尤其如此);其次,程序运行过程中失去了人的主观能动作用。

按照手工操作方式算题,程序员可以观察程序的运行情况,一旦发现错误便可以随时设法改正。特别是对一个给定的数学模型,当需要观察不同参数对其产生的影响时,尤其需要交互式环境。“方便用户”是操作系统追求的重要目标之一,所以在这一阶段很快出现了以多道程序设计技术为基础的交互式系统,即“分时系统”。

由于控制台和打印机这类外设作为交互作用的人-机接口设备极不方便,因此当时作为理想的人-机接口设备的终端设备便应运而生。

终端是集I/O能力为一体的设备,在此设备基础上,系统为用户提供一组终端命令,操作系统中增设了一个命令解释程序。用户可以在终端上通过命令与系统交互,从而产生了交互式系统。将交互式系统与多道程序设计系统相结合便形成了分时系统。

在分时系统中,一台计算机与多台终端相连接,用户通过各自的终端和终端命令以交互方式使用计算机系统。系统使每个用户都能感觉到好像自己在独占计算机系统,而在系统内部,操作系统负责协调多个用户分时共享CPU,这便是所谓“分时”的含义。

在协调用户分享 CPU 时,操作系统通常采用“时间片轮转”原则分配 CPU 给用户程序。系统规定一个被称为“时间片”的时间单位,所有终端用户轮流享用一个时间片的CPU时间。例如,若有n个用户,时间片大小为Q,则每个用户在nQ的时间内至少能使用Q个时间单位的CPU。由于CPU的速度比人在终端上输入命令的速度快很多,因此用户似乎感到CPU被自己所独占。

分时系统的基本特点如下:

① 并发性。系统能协调多个终端用户同时使用计算机系统(即系统内部具有并发机制),能控制多道程序同时运行。

② 共享性。对资源而言,系统在宏观上使各终端用户共享计算机系统的各种资源,而在微观上它们则分时使用这些资源。

③ 交互性。对系统和用户双方而言,人与计算机系统以对话方式进行工作。

④ 独立性。对用户而言,系统能使用户有一种只有他自己在使用计算机的感觉。

显然,前两个特点(即并发和共享)是各类操作系统所共有的基本特征,而后两个特点是分时系统所独有的特点。

交互式作业是指在分时操作系统中用户通过终端和系统提供的终端命令指导上机的过程,用户的一次交互使用机器的过程被看成是交互式作业。交互式作业的提交形式与批处理作业不同。用户登录代表了用户交互作业的生成,用户动态地向系统提交作业步,每完成一个作业步的动作,系统便给出相应的回答信息,用户继续提交下一个作业步,直至作业全部完成,用户和系统以交互方式工作。分时系统上的交互式作业比批处理系统上的批处理作业在管理和控制方面要简单些。

分时系统的一个重要设计是分时地为所有终端用户服务,如在某终端用户输入命令的时候,处理机可能在处理其他终端用户已经输入的命令。为了保证交互的及时性,当分时系统的用户动态提交作业步时,系统必须立即响应并处理每一个作业步的动作。对终端用户通过终端提交的作业步,系统必须加以识别并立即解释执行。为此,系统设有命令解释程序,由它解释终端所输入的命令。如图1.8所示是分时系统运行环境。图1.8 分时系统运行环境

3.实时系统

随着计算机的不断普及和发展,计算机的应用领域日益扩大。20世纪60年代后期,计算机已广泛应用于工业控制、军事控制及商业事务处理等领域。这类新出现的应用领域对计算机系统提出了新的要求,希望系统对来自外部的信息能在规定的时限内做出处理,我们称之为实时处理。“实时”应用可分为两类。(1)实时控制

如将计算机用于飞行器的飞行自动控制。在这种应用中,计算机要对测量系统所测得的数据及时处理并及时输出,以便对被控目标进行及时控制或向控制人员显示结果。类似地,把计算机用于工业控制,如用计算机控制炼钢,这时计算机要对传感器定时送来的“炉温”数据进行及时处理,然后控制相应的机构使得炉温按照一定的规律变化或恒定不变。这类应用被称为“实时控制”。这类系统必须确保及时,又称强实时系统。现在诸多在各类控制系统的计算机上运行的“嵌入式操作系统”都属于实时控制类实时系统。(2)实时事务处理

这类应用是把计算机用于飞机订票系统、银行管理系统等。在这种应用中,计算机系统能对用户的服务请求及时做出回答,并能及时修改、处理系统中的数据。这类应用被称为“实时事务处理”。

所谓“实时”(Real Time),可以理解为立即、及时的意思,是指计算机的运算和处理时间与被控过程或事务处理所需的真实时间相适应。我们把面向这类实时应用的计算机系统称为实时系统。虽然实时系统大都具有专用性,而且其种类、规模及对实时性的要求程度各不相同,但对于大、中型实时系统来说,绝大部分都以多道程序设计技术为基础,所以在资源管理、并发控制等方面与其他类型的系统具有相同的基本特性。实时系统与其他类型系统的本质差别在于“及时性”,即实时系统应能及时地响应外部事件的请求并在严格规定的时间内完成对该事件的处理,控制实时设备和实时任务协调一致地运行。“高可靠性”也是实时系统的主要设计目标之一。为了提高实时系统的及时性和可靠性,软、硬件都必须采用相应的措施加以保证。

实时系统的主要特征和功能如下:

① 时钟分辨度高。有更高的时钟中断频度,可实现更精确计时,可以更加频繁地进入操作系统“处理机调度程序”运行,保证实时任务及时占用处理机,以此保证实时任务的快速响应。

② 支持可剥夺任务调度。保证实时任务无条件剥夺非实时任务运行,不会让非实时任务耽误实时任务。

③ 多级中断机制。保证实时任务对应的事件中断为高级,例如,在计算机控制的炼钢系统中,能对传感器“炉温”数据采集设备对应的中断进行及时处理,允许它的中断打断其他诸如键盘中断等低级中断的处理程序。

20世纪60年代是操作系统不断成熟、蓬勃发展的重要时期,不仅先后出现了多道批处理系统、分时系统和实时系统,而且操作系统的基本理论、原理、基本技术和设计方法也已日趋成熟。从本节的介绍中读者不难看出,各种不同类型的系统均基于多道程序设计系统。故本书并未专辟章节具体介绍各类系统,而是以多道程序设计系统为核心介绍操作系统的基本理论、原理和设计方法。同时在具体讨论各种资源管理的策略和方法时,对其所适用的环境也加以研究和分析。1.2.3 多种方式操作系统

20世纪60年代中期,随着计算机集成电路和操作系统的飞速发展,用户对计算机和操作系统的要求不断提高,一旦一个新的具有更高性能的机器问世,用户便纷纷聚集在新机器的周围。新机种的不断出现,一方面满足了用户的需要,另一方面也给用户带来了某些不便,这是因为用户使用新机器势必舍弃在老机器上已通过的程序。而随着应用广度与深度的不断扩展,原有软件已成为一笔巨大的财富。对此,IBM公司首先推出了系列机概念。

所谓系列机就是同一系列的机器中新型号的机器能与老型号的机器兼容,这样用户既可以立即使用更高级的机器,又能在新机器上继续使用原有的程序,两全其美。为了满足用户的需要,计算机也被设计成容量大,功能全,几乎提供用户需要的所有功能的通用计算机。与这种形势相适应,第三代操作系统被设计成多种方式操作系统,即一个操作系统既能处理批量作业,也能处理分时、实时等作业。这类系统的典型代表是UNIX、VMS(DEC VAX机器上的操作系统)操作系统。

多种方式操作系统不仅给用户提供了很大方便,而且对计算机资源的利用也更为合理。在单方式系统中,可供运行的作业类型受到限制,而多种方式系统能处理任何类型的作业,可将各种类型的作业合理搭配,系统更容易达到饱和状态,从而更加有利于提高资源的利用率。1.2.4 PC操作系统、并行与分布式操作系统及发展

20世纪80年代初,计算机已十分普及,特别是个人计算机已开始进入千家万户,人们对计算机的使用要求更高了。这时,人们不仅仅满足于在计算中心使用计算机,并且要求在办公室、家中也能方便地使用计算机并能够交换信息。这促进了计算机网络的发展,人们把许多计算机连成网络,在网络中的计算机可以相互通信,共享软、硬件资源,从而可以让用户通过多种多样的终端或工作站访问遍布各地的计算机网络。网络的出现给计算机的发展和应用带来了动力,同时也给操作系统提出了新的问题。

为了能控制计算机网络,人们提出了“分布式操作系统”(Distributed Operating System)的理想境界。在为分布式操作系统理想而奋斗的实践中,网络操作系统派生出来。1983年诞生的4.2BSD UNIX包含了对TCP/IP通信协议的支持,它是网络操作系统的代表。分布式操作系统与传统的操作系统有很多共同之处,但是它面临着传统操作系统所没有遇到过的网络中机间通信的问题。分布式操作系统在传统操作系统的基础上增加了许多机器定位、机间通信等方面的内容。

20世纪90年代以来,随着共享主存的对称多处理机系统的广泛应用,“多机操作系统”也已经成熟。多机操作系统不同于单机操作系统,它支持多个处理机真正地并行运行多个程序。多机操作系统以支持并行多任务为其主要特征,充分发挥计算机中多处理机并行处理的优势,在科学计算及高端事务处理服务器领域占有重要地位。

1985年,微软公司受苹果公司的Macintosh窗口式人机界面的影响,发布了基于DOS的Windows系统。以微软公司的“Windows系列操作系统”为代表,以其特有的图形化人机界面,为计算机被普通用户所接受起到了决定性作用。这种操作系统以图形显示设备、鼠标、键盘等I/O外设为基础,配备有相应图形显示驱动程序及窗口管理模块,操作系统各种实用程序不再用文本行的I/O接口界面,取而代之的是图形化的窗口界面,这使计算机更加接近大众,更加快速地得到普及。

操作系统自形成以来,经过几十年的发展,其基本原理和设计方法已趋于成熟。出现了许多得到广泛公认的流行系统,如UNIX,Windows系统等。20世纪80年代后,随着通用微处理器芯片的高速发展,个人计算机和工作站系统得到了迅猛的发展,强烈冲击着传统小型机和中大型机市场。相应地,微机及工作站上的操作系统获得了快速的发展和应用(如Windows,Solaris,IRIX 等)。从操作系统的发展历史看,推动其发展的动力主要来自计算机系统的不断创新和计算机应用的不断深入。

当前操作系统还在不断发展过程中,以下4个方面是发展的研究重点:

① 嵌入式操作系统的研究。主要伴随着个人数字助理(PAD)、掌上电脑、电视机顶盒、智能家电、智能卡等设备的发展,对操作系统在功能和所占储存空间大小权衡上、对实时响应和手持设备的交互界面都提出了新的要求。

② 强实时操作系统的研究。对操作系统的实时响应要求从来没有停止过,要求计算机的最大响应时间越来越短,对任务调度时机、算法的要求越来越高。特别是针对通用操作系统的实时性研究还在不断发展当中。

③ 并行操作系统的研究。随着高性能通用微处理器的发展,人们已经成功地提出了用它们构造“多处理机并行”的体系结构,如基于共享主存的对称多处理机系统(SMP)、多核系统。用成千上万个微处理器实现基于分布式存储的大规模并行处理机系统(MPP),这类被称为巨型机的并行系统有着良好的发展前景。建立在这类并行机上的操作系统与传统操作有明显的区别,其突出特征是提供各类并行机制,如并行文件系统、并行I/O控制、多处理机分配和调度、处理机间的通信和同步、用户任务的并行控制等。

④ 网络操作系统和分布式操作系统的研究。计算机网络系统和分布式系统已经深入人心。就目前情形而言,网络系统也还在不断完善当中,基于Client/Server模型的分布式系统也已不断走向应用,完全分布式的系统还未成形,仍将是研究的热点问题。另外,集群计算结构及网格结构的发展、新型网络存储的发展,给操作系统及其文件系统研究带来了新的挑战。

1.3 主要操作系统介绍

目前最常用的操作系统是Windows系列、UNIX家族和Linux。其中,UNIX常用的变种有SUN公司的Solaris、IBM公司的AIX、惠普公司的HP UX等。其他比较常用的操作系统还有Mac OS,NetWare等。1.3.1 Windows系列及MS DOS

微软公司于1975年成立,最初只有一个BASIC编译程序和比尔·盖茨、保罗·艾伦两个人。但现在,微软公司已成为世界上最大的软件公司,其产品涵盖操作系统、开发系统、数据库管理系统、办公室自动化软件、网络应用软件等各个领域。Windows系列操作系统是由微软公司从1985年起开发的一系列窗口操作系统产品,包括个人(家用)、商用和嵌入式三条产品线,如图1.9所示。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载