收藏 分享(赏)

操作系统与实现第一章.doc

上传人:dreamzhangning 文档编号:2285254 上传时间:2018-09-09 格式:DOC 页数:30 大小:172.50KB
下载 相关 举报
操作系统与实现第一章.doc_第1页
第1页 / 共30页
操作系统与实现第一章.doc_第2页
第2页 / 共30页
操作系统与实现第一章.doc_第3页
第3页 / 共30页
操作系统与实现第一章.doc_第4页
第4页 / 共30页
操作系统与实现第一章.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、【作者简介】:安德鲁.坦尼鲍姆分别在麻省理工学院和加州大学伯克利分校获得学士和博士学位。他现任位于荷兰阿姆斯特丹市的Vrije大学计算机科学教授并领导着一个计算机系统研究小组。同时他还任一个研究并行、分布及图像系统的校际研究生院 计算机与图像高级学院的院长。坦尼鲍姆先前的研究领域包括编译器、操作系统、网络和局域分布式系统,他现在的研究主要集中在可扩展到数百万用户的广域分布式系统。对这些课题的研究使他在学报和会议上发表了70余篇论文,并出版了五部专著。坦尼鲍姆教授同时还主持开发了大量的软件。他是Amsterdam编译工具箱的总设计师,该工具箱被广泛地用来开发可移植的编译器,同时还用于MINIX的

2、开发。他和他的博士研究生及程序员们一起设计了一个基于微内核的高性能分布式操作系统 Amoeba。现在,以教学和研究为目的的用户可以从Internet上免费获得MINIX 和Amoeba软件。坦尼鲍姆的许多博士研究生在获得学位后都取得了非常丰硕的成果,这令坦尼鲍姆非常自豪,因为这是他诲人不倦的结果。坦尼鲍姆教授同时还是ACM的会士、IEEE高级会员、荷兰皇家艺术和科学院院士,他曾获得1994年ACM Karl V. Karlstrom 杰出教育奖和1997年ACM/SIGCSE 计算机科学教育杰出贡献奖。他被列入Internet上的 Whos Who in the World 名单,他在WWW上

3、的主页地址为:http:/www.cs.vu.nl/ast/。阿尔伯特.伍德豪尔分别在麻省理工学院和华盛顿大学获得学士和博士学位。他进麻省理工学院本来是想成为一名电气工程师,可是后来却成了生物学家。从1973年起他开始在位于麻省Amherst的Hampshire自然科学学院工作。当微型计算机慢慢多起来的时候,作为使用电子检测仪器的生物学家,他开始使用微型计算机。他给学生开设的检测仪器方面的课程逐渐演变为计算机接口和实时程序设计。伍德豪尔博士对教学和科学技术的发展有浓厚的兴趣,在进入研究生院之前他曾在尼日利亚教过两年中学,近年来他曾几次利用自己的假期在尼加拉瓜教授计算机科学。他对计算机作为电子系

4、统,以及计算机与其他电子系统的相互配合很感兴趣。他最喜欢讲授的课程有计算机体系结构、汇编语言程序设计、操作系统和计算机通信。他还为开发电子器件及相关软件担当顾问。在学术之外,伍德豪尔有不少兴趣,包括各种户外运动,业余无线电制作和读书。他还喜欢旅游和学习别国语言。他的WWW主页就存在一台运行MINIX的机器上,地址是:http:/minix1.hampshire.edu/asw/。前言多数操作系统教材都重理论而轻实践,本书希望在这二者之间求取较好的平衡。本书详细论述了操作系统的所有基本概念,包括进程、进程间通信、信号量、管程、消息传递、调度算法、输入/输出、死锁、设备驱动程序、存储器管理、页面调

5、度算法、文件系统设计、安全与保护机制等。同时,本书也详细讨论了MINIX 一个与UNIX兼容的操作系统,并提供了完整的源代码供学习之用。这样的安排使读者不仅学习到理论,而且能够理解它们如何应用在一个实际的操作系统之中。本书第一版在1987年出版时,曾引发了操作系统课程教学的一场小小的变革。在此之前多数课程都只讲理论。随着MINIX的出现,许多学校开始增加实验环节以使学生了解实际的操作系统是如何运作的。我们认为这种趋势是可取的,并希望通过本书第二版能进一步加强这种趋势。MINIX在其出现以来的十年间发生了许多变化,最初的代码是为基于8088芯片、256K内存和两个软驱的IBM PC机型编写的,它

6、基于UNIX 版本7。随着时间的推移,MINIX在许多方面有所发展,比如当前版本可运行在众多机型上,从16位实模式的PC机到配有大容量硬盘的奔腾机(32位保护模式),而且它不再基于UNIX版本7,而是基于国际上的POSIX标准(POSIX 1003.1和ISO99451)。与此同时,有许多新特征被添加到MINIX中,在我们看来,所增加的特征可能已经太多了,但有些人则认为还不够,这最终导致了LINUX的诞生。MINIX还被移植到许多其他平台上,包括Macintosh、Amiga、Atari和SPARC。本书只涉及MINIX2.0,到目前为止,该版本只能运行于基于80X86的机器,或者可模拟此类C

7、PU的机器,以及SPARC机器。与第一版相比,第二版有许多变化,原理性部分基本都被修改过,同时增加了大量新内容。最主要的变化是新的基于POSIX的MINIX,以及对其源代码的剖析。另外,每本书都附带一张CD-ROM,它包含了全部MINIX源代码,以及在PC上安装MINIX的说明(见CD-ROM主目录下的README.TXT文件)。在一台80X86 的PC机上安装MINIX很方便。它需要一个至少30MB的硬盘分区,然后按照CDROM上README.TXT文件中的步骤进行即可。在打印README.TXT文件之前,先启动MS-DOS(若运行WINDOWS,则双击MS-DOS图标),然后键入copy

8、readme.txt prn即可。该文件也可以用edit、wordpad、notepad等任何可以处理ASCII正文的编辑器进行浏览。对于没有PC机的学校和个人,有两种解决办法,即CDROM上提供的两个模拟程序。一个由Paul Ashton 为SPARC机器编写,它作为用户程序在Solaris上运行,此时MINIX被编译成SPARC上的可执行文件。在这种模式下,MINIX不再是一个操作系统,而只是一个用户程序,所以必须对其底层作一些修改。另一个模拟程序由Bochs软件公司的Kevin.P.Lawton编写,它解释Intel 80386的指令集以及足以使MINIX运行所需的I/O指令。显然在解释

9、器层次上运行使性能有所下降,但这使得学生更容易进行调试。该模拟程序运行在所有支持M.I.T的X-Window的系统上,更详细的信息请参看CDROM上的有关文件。MINIX仍在继续发展,本书和CDROM中的内容仅仅反映了本书出版时的情况,有关MINIX的最新动态请访问MINIX的主页:http:/www.cs.vu.nl/ast/minix.html。MINIX也有USENET中的新闻组:comp.os.minix,读者可以订阅该新闻组。对于仅有Email的读者可通过以下步骤来加入MINIX的邮件用户通信组。给 listservlistserv.nodak.edu 发一封信,其中只需一行字:“s

10、ubscribe minix-1 “,此后你便会通过E-mail获得很多的信息。讲授本课程的教师可以从Prentice Hall公司获得一份习题解答手册。从WWW地址 http:/www.cs.vu.nl/ast/沿着“Software and supplementary material“链接可以获得一些有用的PostScript文件,其中包含本书中所有的图表,可供需要时使用。在MINIX的开发项目中我们有幸得到了许多人的帮助。首先要感谢Kees Bot在MINIX标准化和软件发布中所作的大量工作,没有他的帮助,我们不可能完成这件工作。他自己编写了大量的代码(如POSIX终端I/O)并修正了

11、一些数年来一直存在的错误,他还整理了其他的代码。这些年来Bruce Evans、 Phlip Homburg、Will Rose和Michael Temari为MINIX的开发做了大量的工作。 有几百人通过新闻组对MINIX作出了贡献,他们人数众多,所作出的贡献也各不相同,在此谨向他们一并表示感谢。John Casey、 Dale Grit、 Frans Kashoek等人阅读了本书的部分手稿并提出了宝贵建议,在此向他们表示谢意。Vrije大学的许多学生测试了CDROM中MINIX的 版本,他们是:Ahmed Batou, Goran Dokic, Peter Gijzel, Thomer G

12、il, Dennis Grimbergen, Roderick Groesbeek, Wouter haring, Guido Kollerie, Mark Lassche, Raymond Ris, Frans ter Borg, Alex van Ballegooy, Ries van der Velden, Alexander Wels以及Thomas Zeeman。我们对他们细致的工作和详尽的报告致以衷心的感谢。阿尔伯特S伍德豪尔向他从前的几位学生表示感谢,特别是Hampshire学院的Peter W. Young ,Nacional Autonoma de Nicaragua大学的M

13、aria Isabel Sanchez 和William Puddy Vargas。最后要向我们的家庭成员表示感谢。Suzanne 已是第十次在我埋头写作时给我支持,对Barbara是第九次,Marvin是第八次,甚至小Bram也是第四次了。他们的支持和爱心对我非常重要。(坦尼鲍姆)至于阿尔伯特的Barbara,这倒是第一次,假如没有她的支持,耐心和幽默,我们是不可能完成这一工作的,对我的儿子Gordon而言,由于在编写本书时,他大部分时间都不在家中,而是在大学学习,因此是非常幸运的。但是他的理解和关心深深吸引着我从事本书的编写工作,有这样一个儿子是令人非常愉快的。(伍德豪尔)安德鲁.S.坦尼

14、鲍姆阿尔伯特.S.伍德豪尔译序坦尼鲍姆教授是国际知名的计算机科学家和教育家。他在操作系统、分布式系统以及计算机网络领域都有很深的造诣。自八十年代以来,他已先后出版了一系列面向大学生和研究生的教材性质的专著,并被世界各国的许多大学广泛采用。这本书就是他的最新专著之一。操作系统是计算机系统中最核心和最底层的软件,对操作系统的深入学习关系到对整个系统运作机制的全面理解,因此一本好教材也显得愈发重要。本书的英文版出版于1997年,其中涵盖了操作系统课程的所有内容,即传统上的进程管理、存储器管理、文件管理和设备管理。同时其中又包含了许多新内容,如线程、基于消息传递的系统构造模型、日志结构文件系统、安全和

15、保护机制、RAM盘及CDROM设备等,而用作例子的CPU则为Interl Pentium。这使得读者一方面能够学习操作系统的经典内容,另一方面又能够了解和跟踪当前的最新技术和研究成果。本书的另一个特点是基本原理与具体实例,即MINIX紧密结合。第2到第5章的前半部分讲述原理,后半部分则详细地解释这些原理在MINIX的设计和实现中的应用。通过阅读这些部分能够把握MINIX源代码的组织方式,并理解那些很关键或者很难懂的代码。这部分内容非常翔实,有时甚至逐行地解释附录中所列的源程序。对操作系统课程多年的授课经验以及相关的科研工作使我们认识到:详细地剖析一个象MINIX这样的操作系统对于掌握操作系统设

16、计与实现的精髓是大有裨益的。正因为上述原因,我们真切地感受到将这本书翻译、介绍给国内读者将是一件非常有意义的事,衷心希望我们付出的劳动能对国内的操作系统教学和实践有所帮助和促进。本书的第一章,第二章,第三章由王鹏翻译,刘福岩和陆宁也参加了部分工作;第四章由朱鹏翻译;第五章由敖青云翻译。全书由尤晋元教授审校并统稿。在整个翻译过程中,上海交通大学计算机系系统软件研究室的师生给予了许多帮助。并且在计算机系95级本科生的操作系统课程中进行了试用,许多学生提出了很好的建议,在此向他们表示衷心的感谢。特别要感谢本书的责任编辑邓又强先生,本书的顺利出版与他的辛勤劳动和热情支持是分不开的。虽然在翻译过程中我们

17、尽力恪守“信,达,雅“的准则,但不当和疏漏之处在所难免,敬请读者提出宝贵建议。译 者1998年4月于上海交通大学第一章 引言计算机如果离开了软件将成为一堆废铜烂铁。有了软件,计算机可以对信息进行存储、处理和检索,可以显示多媒体文档、搜索Internet并完成其他工作。计算机软件大致分为两类:系统软件和应用软件。系统软件管理计算机本身及应用程序;应用软件执行用户最终所需要的功能。最基本的系统软件是操作系统(operating system),它控制计算机的所有资源并提供开发应用程序的基础。现代计算机系统包含一个或多个处理器、若干内存(常称为RAM随机存取存储器)、磁盘、打印机、网络接口及其他输入

18、/输出设备。编写一个程序来管理所有这些器件以正确地使用它们,即使不考虑优化也是一件很困难的事情。如果每个程序员都必须处理磁盘如何工作,再加上每读一个磁盘块都有几十种因素可能导致操作出错,那么很多程序简直没法写。许多年以前人们就认识到必须找到某种方法将硬件的复杂性同程序员分离开来。经过不断探索和改进,目前采用的方法是在裸机上加载一层软件来管理整个系统,同时给用户提供一个更容易理解和进行程序设计的接口,这被称为虚拟机(virtual machine)。这样一层软件就是操作系统。这种处理方式如图11所示。底层是硬件,它本身可能包括两层或多层。最低一层是物理器件,包括集成电路芯片、连线、电源、监视器等

19、,它们的构造和工作方式属于电气工程师的范围。图 1-1 计算机系统由硬件、系统程序和应用程序组成。接着是微程序(microprogram),通常存放在只读存储器中,它是一层很原始的软件,用来控制设备并向上一层提供一个更清晰的接口。微程序实际上是一个解释器,它先取得机器语言指令,如ADD, MOVE和JUMP等,然后通过一个动作序列来执行这些指令。例如为了执行一条ADD指令,微程序必须先确定运算数据的位置,然后取数,相加,最后存放得数。由微程序解释执行的这一套指令称为机器语言。机器语言并不是硬件的组成部分,但硬件制造商通常在手册中给出机器语言的完整描述,所以许多人将它认作真正的“计算机“。采用精

20、简指令集计算机(RISC)技术的计算机没有微程序层,其机器指令通过硬件逻辑直接执行。例如Motorola 680X0有微程序,而IBM PowerPC 则没有。机器语言典型地有50到100条指令,大多数用来完成数据传送、算术运算和数值比较等操作。在这个层次上,通过向特殊的设备寄存器写特定的数值来控制输入/输出设备。例如将磁盘地址、内存地址、读字节数和操作类型(读/写)等值写入特定的寄存器便可完成硬盘读操作。实际操作往往需要更多的参数,而操作完成后的返回状态也非常复杂。进一步而言,对于许多I/O设备,时序在程序设计中的作用非常重要。操作系统的主要功能之一就是将所有这些复杂性隐藏起来,同时为程序员

21、提供一套更加方便的指令,比如,“从文件中读一个数据块“在概念上比低层的“移动磁头臂,等待旋转延迟“之类的细节来得简单、方便。在操作系统之上是其他系统软件,包括命令解释器(shell)、窗口系统、编译器、编辑器及类似的独立于应用的程序。要注意它们本身并不是操作系统的组成部分,尽管它们通常由计算机厂商提供。这一点很重要,操作系统专指在核心态(kernel mode),或称管态(supervisor mode)下运行的软件,它受硬件保护而免遭用户的篡改。编译器和编辑器运行在用户态(user mode)。如果用户不喜欢某一个编译器,他可以自己重写一个,但他却不可以写一个磁盘中断处理程序 因为这是操作系

22、统的一部分,而且硬件阻止用户对它进行修改。系统软件之上是应用软件,这些软件可以是购买的或者是用户自行开发的,它们用来解决特定的问题,如字处理、表格处理、工程计算或者电子游戏等。1.1 什么是操作系统多数计算机用户都使用过操作系统,但要精确地给出操作系统的定义却很困难,部分原因是操作系统完成两项相对独立的任务,下面我们逐项进行讨论。1.1.1 操作系统作为虚拟机对多数计算机而言,在机器语言一级的体系结构(指令集、存储组织、I/O和总线结构)上编程是很困难的,尤其是输入输出操作。例如考虑使用多数PC机采用的NEC PD765控制器芯片(或功能等价的芯片)来进行软盘I/O操作。PD765有16条命令

23、,它通过向一个设备寄存器装入特定的数据来执行这些命令,命令数据长度从1到9字节不等,其中包括:读写数据、移动磁头臂、格式化磁道、初始化、检测磁盘状态、复位、校准控制器及设备等。最基本的命令是读数据和写数据。它们均需要13个参数,所有这13个参数被封装在9个字节中。这些参数指定的信息有:欲读取的磁盘块地址、每条磁道的扇区数、物理介质的数据记录格式、扇区间隙、以及对已删除数据地址标识的处理方法等。当磁盘操作结束时,控制器芯片返回23个状态及出错信息,它们被封装在7个字节中。此外,程序员还要注意步进电机的开关状态。如果电机关闭,则在读写数据前要先启动它(有一段较长的加速时间)。还要注意电机不能长时间

24、处于开启状态,否则将损坏软盘,所以程序员必须在较长的启动延迟和可能对软盘造成损坏之间作出折衷。显然,程序员不想涉及硬件的这些具体细节(也包括硬盘,它与软盘不同,但同样很复杂)。他需要的是一种简单的高度抽象的设备。一种典型的抽象是一张磁盘包含了一组命名的文件,每个文件可以被打开,然后进行读写,最后被关闭。其中的一些细节如数据记录格式、当前步进电机的开启状态等则对用户隐藏。这种将硬件细节与程序员隔离开来、同时提供一个简洁的命名文件方式的程序,就是操作系统。与磁盘抽象类似,它还隐藏了其他许多低层硬件的特性,包括中断、时钟、存储器等。总之,操作系统提供的每一种抽象都较低层硬件本身更简单、更易用。从这个

25、角度看,操作系统的作用是为用户提供一台等价的扩展计算机,或称虚拟机,它比低层硬件更容易编程。本书的内容正是详细说明操作系统如何做到这一点。1.1.2 操作系统作为资源管理器上述虚拟机模型是一种自顶向下的观点。按照自底向上的观点,操作系统则用来管理一个复杂系统的各个部分。现代计算机都包含处理器、存储器、时钟、磁盘、鼠标、网络接口、激光打印机以及其他许多设备,从这个角度看,操作系统的任务是在相互竞争的程序间有序地控制这些设备的分配。设想在一台计算机上运行的三个程序同时试图在一台打印机上输出计算结果,那么可能头几行是程序1的输出,接下来几行是程序2的输出,然后又是程序3的输出等等,最终打印结果将是一

26、团糟。操作系统采用将打印输出缓冲到磁盘上的方法可以避免这种混乱。当一个程序结束后,操作系统将暂存在磁盘文件上的输出结果送到打印机,同时其他程序可以继续运行产生新的输出结果,而这些程序并不知道这些输出没有立即送至打印机。当一台计算机(或网络)有多个用户时,因为用户间可能相互影响,所以管理和保护存储器、I/O设备以及其他设备的需求随之增加。而且用户往往不仅需要共享硬件,还要共享信息(文件、数据库等)。总之,此时操作系统的首要任务是跟踪资源的使用状况、满足资源请求、提高资源利用率、以及协调各程序和用户对资源的使用冲突。1.2 操作系统发展历史操作系统经历了一个漫长的发展过程,下面对此进行简要的回顾。

27、由于在历史上操作系统与计算机体系结构存在非常密切的联系,我们将按照计算机的换代历程讲述操作系统的发展状况。第一台真正的数字计算机是英国数学家Charles Babbage(17921871)设计的。Babbage投入毕生精力去建造他的“分析机“,但却没能让它成功地运行起来。因为它是纯机械式的,而当时的技术不可能使分析机的零部件达到他所需要的精度。很显然,分析机没有操作系统。有趣的是,Babbage认识到他的分析机需要软件,于是他雇佣了一个年轻的女子,英国著名诗人拜伦的女儿Ada Lovelace为他工作。Ada由此成了世界上第一位程序员,Ada程序设计语言就是用她的名字命名。1.2.1 第一代

28、计算机(19451955):真空管和插板从Babbage之后一直到二战,数字计算机几乎没有什么进展。在40年代中期,哈佛大学的Howard Aiken、普林斯顿高等研究院的John.Von Neumann(冯.诺依曼)、宾夕法尼亚大学的J.Presper Eckert和William Mauchley、德国电话公司的Konrad Zuse、以及其他一些人都成功地使用真空管建造了计算机。这些机器非常庞大,往往使用数万个真空管,占据几个房间,然而其运算速度却不如现在最便宜的个人计算机。在计算机出现的早期,每台机器都有一个小组专门来设计、制造、编程、操作和维护。编程全部采用机器语言,通过在一些插板上

29、的硬连线来控制其基本功能,这时没有程序设计语言(甚至没有汇编语言),操作系统更是闻所未闻。机器的使用方式是程序员提前在墙上的机时表上预约一段时间,然后到机房将他的插板插到计算机里,在接下来的几小时里计算自己的题目。这时的计算机很不可靠,因为几万个真空管中任何一个发生故障,计算机就无法运行。这个阶段基本上所有的题目都是数值计算问题,例如计算正弦和余弦函数表。到50年代早期,出现了穿孔卡片,这时就可以不用插板,而是将程序写在卡片上然后读入计算机,但其他过程则依然如故。1.2.2 第二代计算机(19551965):晶体管和批处理系统50年代发明的晶体管极大地改变了计算机的状况。这时的计算机已经很可靠

30、,厂商可以成批地生产计算机并卖给客户,客户可以长时间地使用它来完成一些有用的工作。至此,第一次将设计人员、生产人员、操作员、程序员和维护人员分开。这个时期计算机安装在空调房间里,有专人操作。由于其价格昂贵,仅有少数大公司、主要的政府部门和大学才买得起。运行一个作业(一个或一组程序)时,程序员首先将程序写在纸上(用FORTRAN或汇编语言),然后用穿孔机制成卡片,最后将这些卡片交给操作员。计算机运行完当前任务后,其计算结果从打印机上输出,操作员从打印机上取得运算结果并送到输出室,程序员就可从该处取到运算结果,然后,操作员再从卡片上读入另一个任务。如果需要FROTRAN编译器,操作员还要从别处取来

31、读入计算机。当操作员在机房里走来走去时,许多机时被浪费掉了。由于当时计算机非常昂贵,很自然地人们开始想办法减少机时的浪费,答案就是批处理系统。其思想是:在作业输入室收集到较多的作业,然后用一台相对廉价的计算机(如IBM 1401计算机,它适用于读卡片、拷贝磁带和打印输出,但不适用于作数值运算。)将它们读到磁带上,另外用较昂贵的计算机如IBM 7094来完成真正的计算。该模型如图12所示。图 1-2 一种早期的批处理系统。 (a)程序员将卡片拿到1401机处 (b)1401将批处理作业读到磁带上 (c)操作员将输入带送至7094处 (d )7094进行计算 (e)操作员将输出带送至1401处 (

32、f)1401打印输出在收集到一批作业之后,输入磁带被送到机房里装到磁带机上。操作员随后装入一个特殊的程序(现代操作系统的前身),它从磁带上将第一个作业读入并运行,其输出写到第一盘输出磁带上,而不是打印出来。每个作业结束后,操作系统自动地读入下一个作业运行。当这一批作业完全结束后,操作员取下输入和输出磁带,将输入磁带换成下一批作业,然后把输出磁带拿到一台1401机器上进行脱机打印。一个典型的输入作业结构如图13所示。它由一张JOB卡片开始,该卡标识出所需的最大运行时间(分钟)、计费标识、以及程序员的名字。随后是一张FORTRAN卡片,它通知操作系统从系统磁带上装入FROTRAN语言编译器。在此之

33、后是待编译的源程序,然后是LOAD卡片,它通知操作系统装入刚编译好的目标程序(编译好的目标程序通常写到暂存磁带上,需要显式装入)。接着是RUN卡片,它告诉操作系统运行该程序并使用其后的数据。最后,END卡片标识作业结束。这些原始的控制卡片是现代作业控制语言和命令解释器的先驱。图 1-3 一个典型的FMS作业的结构。第二代计算机主要用于科学计算,例如解偏微分方程。这些题目大多用FORTRAN语言和汇编语言编程。典型的操作系统是FMS(FORTRAN Monitor SystemFORTRAN监控系统)和IBSYS(IBM为7094机配备的操作系统)。1.2.3 第三代计算机(19651980):

34、集成电路芯片和多道程序在60年代初期,多数计算机厂商都有两条完全不同并且互不兼容的生产线:一条是面向字的复杂科学计算和工程计算的计算机,如IBM 7094;另一条是面向字符的商用计算机,如IBM 1401,主要被银行和保险公司用于磁带归档和打印服务。对厂商来说,开发和维护两种完全不同的产品是很昂贵的。同时,许多新的计算机用户开始时只需要一台小计算机,到后来则可能需要一台较大的计算机,而且要求能够更快地执行原有的程序。IBM公司试图通过引入360系统来解决这两个问题。IBM 360是一个软件兼容的计算机系列,在该系列中,低档机与1401相当,高档机则比7094功能强很多。这些计算机只在价格和性能

35、(最大存储器容量、处理器速度、允许的I/O设备数量等)上有差异。由于所有的计算机都有相同的体系结构和指令集,因此为一种型号机器编写的程序可以在其他所有型号的机器上运行(起码在理论上可行),而且360被设计成既可用于科学计算,又可用于商业计算,这样一个系列的计算机便可以满足所有用户的要求。在随后的几年里,IBM陆续推出了360的后续机型,如用户熟知的370、4300、3080和3090系列。360是第一种采用集成电路(小规模)芯片的主流机型。与采用分立晶体管制造的第二代计算机相比,其性能价格比有很大提高。360很快就获得了成功,由此其他主要厂商也很快采纳了系列兼容机的思想。这些计算机至今仍在各地

36、的计算中心使用,但其应用正在急剧地萎缩。“单一家族“思想的最大优点同时也是其最大的缺点。原因是所有软件,包括操作系统,都要能够在所有机器上运行 从小的代替1401的机器到用于科学计算的相当于7094的大型机;从只能带很少外部设备的机器到能带很多外设的机器;从商业领域到科学计算领域等,总之,要有效地适用于所有的用途。IBM无法写出同时满足这些需求相互冲突的软件,其结果是一个庞大的极其复杂的操作系统,它的规模比FMS高大约二到三个数量级。其中包含有数千名程序员写的数百万行汇编语言代码。同时,其中也有成千上万处错误。这就导致IBM不断地发行新版本来更正这些错误,而新版本在改正老错误的同时又引入新错误

37、,所以错误数可能保持大致相同,而不是减少。OS/360的设计者之一Fred Brooks后来写过一本书(Brooks,1975)来描述他在开发OS/360过程中的经验。这里不可能复述该书的全部内容,不过其封面是一群史前动物陷入一个泥坑不能自拔,Silberschatz和Galvin的著作的封面也表达了同样的观点。抛开OS/360的庞大和存在的问题,它和其他公司的类似的第三代操作系统的确很好地满足了大多数用户的要求。同时它们也使第二代操作系统缺乏的几项关键技术得到广泛应用。其中最重要的是多道程序(multiprogramming)。在7094机上,若当前作业因等待磁带或其他I/O而暂停时,CPU

38、就只能简单地踏步直至该I/O结束。对于CPU操作密集的科学计算问题,I/O操作较少,因此浪费的时间很少;然而对于商业数据处理,I/O操作等待时间通常占到8090,这时必须采取某种措施减少CPU时间的浪费。经过探索找到的解决办法是将内存分为几个部分,每一部分存放不同的作业,如图14所示。当一个作业等待I/O操作完成时,另一个作业可以使用CPU。如果内存中可以存放足够多的作业,则CPU利用率可以接近100。在主存中同时驻留多个作业需要特殊的硬件来对其进行保护,以避免作业的信息被窃取或受到攻击,幸运的是360及其他第三代计算机都配有此类硬件。图 1-4 内存中有三个作业的一个多道程序系统。第三代计算

39、机的另一个新特性是:卡片被拿到机房后能够很快地将一个作业从卡片读入磁盘。于是无论任何时刻当一个作业运行结束,操作系统就能将一个新作业从磁盘读出,装入空出来的内存区域运行,这种技术叫做spooling(Simultaneous Peripheral Operation On Line 联机的即时外部设备操作),同时该技术也用于输出。当采用了spooling技术后,就不再需要IBM 1401机,也不必再将磁带搬来搬去。尽管第三代操作系统很适于大型科学计算和繁忙的商务数据处理,但其实质上仍旧是批处理系统。许多程序员很怀念第一代计算机的使用方式,那时他们可以独占一台机器几个小时,可以即时地调试他们的程

40、序。而对第二代计算机,一个作业从提交到取回运算结果往往长达数小时。更有甚者,一个误用的逗号就会导致编译失败,从而可能浪费程序员半天时间。程序员们希望很快得到响应,这种需求就导致了分时系统的出现。它实际上是多道程序的一个变种,不同之处只是每个用户都有一个联机终端。在分时系统中,假设有20个用户登录,而其中17个在思考或喝咖啡,则CPU可轮流分配给那三个需要得到服务的作业。由于调试程序的用户常常只发出简短的命令(如编译一个源文件),而很少执行费时的长命令(如将一个上百万条记录的文件排序),所以计算机能够为一些用户提供快速的交互式服务,同时在CPU空闲时还能运行后台的大作业。第一个分时系统CTSS是

41、由M.I.T在一台改装过的7094机上开发成功的(Corbato等,1962),但直到第三代计算机广泛采用了必需的保护硬件之后分时系统才逐渐流行开来。在CTSS研制成功之后,M.I.T、贝尔实验室和通用电气公司(GE,当时一个主要的计算机制造厂商)决定开发一种“公用计算服务系统“ 一种能够同时支持数百名分时用户的机器。它借鉴于供电系统 当你需要电能时,只需将电气设备接到墙上的插座即可。该系统称作MULTICS(MULTiplexed Information and Computing Service),其设计者着眼于建造一台机器来满足整个波士顿所有用户的计算需求。在当时看来,仅30年之后只花几

42、千美元就能买一台计算能力远远超过他们的GE645的个人计算机的想法完全是科学幻想。MULTICS引入了计算机领域许多概念的雏形,但其研制难度却超出了所有人的预料。在开发过程中贝尔实验室退出了该项目,通用电气公司也退出了计算机领域。最终MULTICS被成功地应用在M.I.T的实际生产环境以及其他几十个系统中。但“公用计算服务系统“的概念却随着计算机价格的暴跌而被人们遗弃,不过MULTICS对随后的系统却有着巨大的影响,详细请参阅(Corbato etc., 1972;Corbato and Vyssotsky, 1965;Daley and Dennis, 1968;Organick, 1972

43、;Saltzer, 1974)。第三代计算机的另一个主要进展是小型机的崛起,这以1961年DEC的PDP1作为起点。PDP1计算机只有4K个18 比特的内存,每台售价120,000美元(不到IBM 7094的5),该机型非常热销,对于某些非数值的计算,它几乎和7094一样快。PDP1开辟了一个全新的产业。很快PDP有了一系列机型(与IBM系列机不同,它们互不兼容),其顶峰为PDP11。贝尔实验室一位曾参加过MULTICS研制的计算机科学家Ken Thompson,在一台无人使用的PDP7机器上开发了一个简化的单用户版MULTICS,他的工作导致了后来UNIX操作系统的诞生。UNIX在学术界变得

44、很流行,同时也包括政府部门和许多公司。有专门的著作讲述UNIX的历史(例如Salus, 1994)。简单地说,由于UNIX的源代码公开,所以许多组织都开发了他们各自的UNIX版本,这些版本互不兼容,所以非常混乱。为了使同一个程序在所有不同的UNIX系统上都能运行,IEEE拟定了一个UNIX的标准,称作POSIX,该标准现在被大多数UNIX支持。POSIX定义了相互兼容的UNIX系统必须支持的一个最小的系统调用接口,实际上,一些其他操作系统现在也支持POSIX接口。1.2.4 第四代计算机(1980现在):个人计算机随着大规模集成电路的发展,芯片在每平方厘米的硅片上可以集成数千个晶体管,于是个人

45、计算机时代到来了。从体系结构上看,个人计算机与PDP11并无二致,但就价格而言却相去甚远。通常公司的一个部门或大学里的一个院系配备一台小型机,而个人计算机却使每个人都能拥有自己的计算机。在商业、大学或政府部门使用的功能最强的个人计算机通常称为工作站,它实际上只是大一点的个人计算机,通常工作站之间通过网络互连起来。随着计算能力越来越容易获得,尤其是具有高品质图形功能的交互式计算的普及,为个人计算机编制软件成为一项重要的产业。此类软件多数对用户很友好,也就是说用户无需掌握太多的计算机知识,而且基本不用怎么学习便能够使用这些软件,这与先前的OS/360 完全不同,OS/360的作业控制语言JCL非常

46、复杂,为了介绍这种语言,已经专门编写了几本书。在个人计算机和工作站领域有两种主流操作系统:微软的MSDOS和UNIX。MSDOS广泛用于IBM PC及其他采用Intel 80X86芯片的计算机。尽管MSDOS的最初版本相当简陋,但其后续的版本包含了许多新特性,其中有许多源自于UNIX。MSDOS的后续产品Windows起初运行于MSDOS之上(与其称之为操作系统,不如说它更象一个shell),但从1995年开始发布的Windows95是一个真正可引导的操作系统,因此它不再需要MSDOS的支持。微软的另一个操作系统是Windows NT,它在某些层次上与Windows95兼容,但其核心则完全重写

47、。另一种主要的操作系统是UNIX,它在工作站和高档计算机领域(如网络服务器)占据了统治地位,尤其对于采用高性能RISC芯片的计算机。尽管这些计算机通常供一个用户专用,但它们往往具有小型机的计算能力,所以为它们配备最初为小型机设计的操作系统 UNIX是很顺理成章的。从80年代中期开始出现一种有趣的发展趋势,就是运行网络操作系统(network operating systems)和分布式操作系统(distributed operating systems)(Tenenbaum, 1995)的个人计算机网络的崛起。在网络操作系统中,用户知道多台计算机的存在。他能够登录到一台远地机器上并将文件从一台

48、机器拷贝到另一台机器,每台计算机都运行自己本地的操作系统,有自己的本地用户(或多个用户)。网络操作系统与单处理机的操作系统没有本质区别。它们需要一个网络接口控制器以及一些低层软件来驱动它 ,同时还需要一些程序来进行远程登录和远地文件访问,但这些附加物并未改变操作系统的本质结构。与之相反,一个分布式操作系统在用户看来就象一个普通的单处理机系统。尽管它实际上由多个处理机组成,但用户不会感知到他们的程序在哪个处理机上运行,或者他们的文件存放在哪里,所有这些均由操作系统自行高效地完成。真正的分布式操作系统不仅仅是在单机操作系统上增添一小段代码,其原因是分布式系统与集中式系统有本质的区别。例如,分布式系

49、统通常允许一个应用在多台处理器上同时运行,因此需要更复杂的处理器调度算法来获得最大的并行度。网络中的通信延迟往往导致分布式算法必须能适应信息不完备、信息过时甚至信息不正确的环境。这与单机系统完全不同,对于后者,操作系统掌握整个系统的完备信息。1.2.5 MINIX的历史在UNIX的早期(版本6),源代码可以免费获得并被人们加以广泛的研究。澳大利亚新南威尔士大学的John Lions甚至专门写了一本小册子逐行地解释UNIX源代码(Lions, 1976)。许多大学的操作系统课程就采用这本小册子作为教材。在AT本系统调用将真正读到的字节数返回给count变量,正常情况下这个值与nbytes相等,但当读至文件结尾符时则可能比nbytes小。若由于参数非法或磁盘操作错导致该系统调用无法执行,则count被置为-1,同时错误码被放在一个全局变量errno中。程序应该经常检查系统调用的返回值以确定其是否正确地执行。MINIX的全部53条系统调用列于图19中,这些系统调用分为六大类。下面将逐个解释每条系统调用的功能。由于个人计算机的资源管理功能非常有限(起码和有许多用户的大型机相比是如此),所以这些系统调用在很大程度上定义了操作系统应提供的主要功能。P

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报