1、第第6章网络操作系统章网络操作系统第第6章网络操作系统章网络操作系统6.1操作系统概述6.2面向网络的操作系统6.3Unix操作系统6.4Linux操作系统6.5本章小结1第第6章网络操作系统章网络操作系统6.1操作系统概述6.1.1 操作系统的发展历史操作系统的发展历史操作系统已经有很多年的发展历史,大体上可以分为以下四个主要阶段。1.第一代操作系统第一代操作系统第一代操作系统的时间范围从20世纪40年代中期到50年代中期。20世纪40年代中期,最早的计算机主要构成部件是真空管。这个时期的真空管计算机通常由数以万计的真空管构成,体积庞大,一台计算机往往要占一间或数间房子的空间。每一台这样的真
2、空管计算机都由一组专业人员对其进行设计、构造、编程、操作与维护。当时的编程完全采用机器语言,对计算机基本功能的控制是通过对插线板线路连接的手工模式来实现的。在这个时期,没有“程序设计语言”的概念,也没有汇编语言,操作系统更是闻所未闻的概念,人们使用计算机所完成的任务几乎全部是单纯的数值计算,例如计算正弦、余弦与对数值等。到20世纪50年代初期,随着穿孔卡片以及纸带等输入输出设备的出现,计算机的操作模式也发生了一些改变。有了这些输入输出设备,程序可以写在卡片上,计算机读入卡片,不再使用插线板等纯手工操作模式。2第第6章网络操作系统章网络操作系统2.第二代操作系统第二代操作系统第二代操作系统的时间
3、范围从20世纪50年代中期60年代中期。在20世纪50年代中期,晶体管的出现彻底改变了计算机发展的面貌。这一时期的计算机变得更加可靠,能够长时间持续稳定地工作,人们可以用计算机完成一些有用的工作。此时的计算机称为主机主机(Mainframe),通常被放置在专门的空调机房里,并且需要专业人员来操作。这些大型主机非常昂贵,价格往往要几百万美元,因此通常只有大公司和主要政府部门以及高等院校才能支付得起。这种主机的使用模式通常如下:为了运行一个计算任务(单个程序或者一组程序),程序员首先将程序写在纸上;然后将程序通过打孔装置打在卡片上;再将这些卡片拿到一个专门的输入室交给专门的主机操作人员;最后,等待
4、计算任务运行结束,得到相应的输出结果。每个计算任务结束时,操作员都会将输出结果从打印机上撕下来并将其送往输出室,最终交给提交该计算任务的程序员。一次计算任务执行完之后,操作员再从多个任务卡片中选择下一个任务提交给计算机运行。3第第6章网络操作系统章网络操作系统事实上,许多宝贵的计算时间都消耗在操作员选取卡片、向主机读入卡片以及收集打印输出结果等过程中,真正用于计算的时间很短。由于计算机购置成本与机时租用费用都非常昂贵,人们很快开始探索各种方法来减少这种计算时间的浪费。最终,人们普遍接受的解决方案是批处理系统批处理系统(Batch System),它将多个计算任务收集到一起,用一个小型(相对大型
5、主机而言)并且廉价的计算机将这些计算任务读入到磁带上。这些小型计算机非常适合诸如读入卡片、拷贝磁带以及打印输出等工作,但是它们并不适合于数学计算任务。真正的计算则由昂贵的大型主机进行。早期批处理系统的工作流程主要由以下几个步骤组成。首先,程序员将程序卡片提交给负责读入计算任务的小型计算机。其次,小型计算机将多个计算任务的卡片读入到磁带上。第三,操作员将输入磁带加载到负责实际计算的大型主机上。第四,大型主机执行实际的计算任务。第五,操作员将输出磁带取出,提交给负责打印输出结果的小型计算机。最后,小型计算机打印各个计算任务的输出结果。这一时期的大型计算机大多用于科学与工程计算,例如求解物理学和工程
6、中经常出现的偏微分方程。这些大型计算机所使用的编程语言主要是FORTRAN和汇编语言。具有代表性的第二代操作系统有FMS(Fortran Monitor System)和IBM公司为其大型机IBM 7094所设计开发的IBSYS操作系统。4第第6章网络操作系统章网络操作系统3.第三代操作系统第三代操作系统第三代操作系统的时间范围从20世纪60年代中期到80年代。在20世纪60年代早期,绝大多数计算机生产厂商都有两条截然不同而且互不兼容的生产线。一条生产线专门生产大规模科学计算机,主要用于解决科学与工程领域的数字计算问题。另一条生产线专门生产商用计算机,此类计算机广泛应用于银行和保险公司等行业,
7、主要负责完成磁带检索与打印等功能。对于计算机生产厂商而言,开发与维护两条完全不同的生产线费用太高。为了解决这一问题,IBM公司于1964年推出了大型计算机System/360。事实上,360是一系列软件兼容的计算机,既涵盖规模较小、功能简单的类似IBM 1401大小的计算机,也包括规模较大、功能强大的IBM 7094等计算机。所有这些计算机都共用代号为OS/360的操作系统,而不再是为每一种型号的计算机量身订制操作系统。同一系列不同型号计算机的区别仅仅在于其价格和性能,例如最大内存容量、处理器速度以及所支持的I/O设备个数等。5第第6章网络操作系统章网络操作系统由于同系列的所有计算机都具有相同
8、的体系结构与指令集,至少在理论上而言,为其中一种计算机所写的程序应该能够在同系列所有其他的计算机上运行。IBM的360系列计算机在设计之初就着眼于既可以进行科学计算,也可用于商务计算。这样一来,单系列的计算机产品就可以满足所有领域用户的需求。这种让单一操作系统适用于整个系列产品的思想是System/360成功的关键。在360之后,IBM又相继推出了多个与360兼容的产品系列。与第二代操作系统相比,以OS/360为代表的第三代操作系统最重要的一个关键技术是多道程序(Multiprogramming)。多道程序技术的基本思想是将内存划分为多个区段,不同的计算任务存放在不同的区段中。当内存中的某个任
9、务等待I/O操作时,操作系统调度另一个任务使用CPU,从而避免了CPU的空闲等待现象,提高了CPU资源的使用率。在第三代操作系统的发展过程中,为了解决批处理系统固有的用户响应时间过长的问题,人们还研究开发了分时(Timesharing)操作系统。第一个正式的分时操作系统是MIT于1961年开发的兼容分时系统CTSS(Compatible Time Sharing System)。基于CTSS的成功经验,MIT、贝尔实验室与通用电气公司联合研究开发了MULTICS(MULTiplexed Information and Computing Service)系统。6第第6章网络操作系统章网络操作系
10、统MULTICS以电力传输系统为模型,希望构建这样一种计算系统:一台大型计算机能够为某一区域内数以千计的用户提供计算服务。尽管MULTICS最终在商业上没有获得成功,但是其研究开发过程中引入了许多重要的概念和思想,这对后来操作系统的发展产生了极大的影响。贝尔实验室著名的计算机科学家Ken Thompson根据他在MULTICS项目研究中的经验,在一个闲置的小型机PDP-7上开发出了一个精简的单用户版MULTICS。这个操作系统后来发展成为大名鼎鼎的Unix操作系统。更多关于Unix操作系统的内容将在6.3节介绍。操作系统领域的权威,Andrew S.Tanenbaum 于1987年模仿Unix
11、开发了一个叫做Minix的小型操作系统,其功能与Unix非常相似,但仅用于教学研究的目的。这个在互联网上公布的免费软件很快引起一位叫做Linus Torvalds的芬兰大学生的关注,他在Minix的基础上写出了Linux操作系统,Linux不再限于教学研究的范畴,而是一个真正意义上的免费操作系统软件产品。更多关于Linux操作系统的内容将在6.4节介绍。7第第6章网络操作系统章网络操作系统4.第四代操作系统第四代操作系统第四代操作系统的时间范围从20世纪80年代中期至今。随着大规模集成电路技术的发展,数以万计的晶体管能够集成到一平方厘米的芯片上,个人电脑的时代到来了。个人电脑在体系结构上与PD
12、P-11之类的小型机并没有本质上的区别,但其价格却低得多,这使得计算机从大企业和高等院校走向了个人用户。个人电脑的普及与发展离不开操作系统的支持。当Intel公司于1974年推出其第一代通用8位微处理器8080之后,Gary Kildall等人为8080开发了一个基于磁盘的操作系统CP/M(Control Program for Microcomputers)。随着CP/M系统功能的不断完善,人们开发出许多适用于CP/M系统的应用程序,使得CP/M在微机操作系统领域连续五年占据绝对统治地位。20世纪80年代初期,IBM公司推出了IBM PC。Bill Gates看准时机,为IBM PC开发了M
13、S-DOS(Microsoft Disk Operating System),并且迅速占领了IBM PC市场。微软的MS-DOS与IBM PC捆绑销售,产生了双赢的效果,获得了极大的成功。8第第6章网络操作系统章网络操作系统随着图形用户界面GUI(Graphical User Interface)技术的发展,微软又相继推出了一系列基于GUI的操作系统,其中比较有代表性的有Windows 95、Windows 98、Windows NT、Windows 2000、Windows ME(Millennium edition)、Windows XP以及Windows 7等。在个人电脑领域,与微软的W
14、indows系列操作系统相抗衡的一个主要竞争对手是Unix。Unix操作系统主要定位于工作站和其他高端计算机,例如大多数网络服务器都使用Unix操作系统。Unix操作系统尤其受那些使用RISC芯片的高性能计算机的欢迎。对于小型办公环境与普通个人用户而言,Linux操作系统也是微软Windows系列操作系统有力的竞争者之一。现在,许多学生和越来越多的企业也开始使用Linux操作系统。9第第6章网络操作系统章网络操作系统6.1.2 操作系统的定义操作系统的定义操作系统是几乎所有计算机系统的一个重要组成部分。如图6.1所示,一个计算机系统大体上可以划分为四个组成部分:计算机硬件、操作系统、系统和应用
15、程序以及用户。尽管大多数计算机用户都或多或少有一些使用操作系统的经验,但是很难为操作系统下一个非常完备与准确的定义。简言之,操作系统是介于计算机硬件与计算机用户之间的一层软件,其目的是为计算机用户提供一个能够执行程序(系统程序和应用程序)的环境。操作系统最主要的设计目标是使计算机系统便于用户使用。其次,操作系统还要为计算机用户提供一个高效使用计算机硬件资源的环境与工作模式。10第第6章网络操作系统章网络操作系统操作系统的功能主要分为本质上不相关的两个方面:操作系统既起到扩展机(Extended Machine)或者虚拟机(Virtual Machine)的作用;同时又扮演着计算机软硬件资源管理
16、者的角色。一方面,作为扩展机,操作系统屏蔽了计算机硬件底层复杂而繁琐的体系结构层面的细节,为普通程序员提供了一种简单易用的系统抽象,使程序员可以通过操作系统更容易地编写程序。换言之,操作系统为程序员提供了一种虚拟机,它屏蔽了诸如指令集、中断、计时器、总线结构、磁盘管理以及内存管理等底层硬件实现细节。操作系统是通过向上层提供一系列的系统调用来实现这一功能的。另一方面,操作系统还是计算机系统资源的管理者。现代计算机是一种包含了许多部件与设备的复杂系统,例如处理器、内存、计时器、磁盘、显示器、鼠标、键盘、网络接口以及打印机等。操作系统的任务就是有效地管理计算机系统的所有资源,在多个相互争用系统资源的
17、程序之间合理而有序地分配诸如处理器、内存与I/O设备等有限的资源。11第第6章网络操作系统章网络操作系统6.2面向网络的操作系统6.2.1 面向网络的操作系统的基本概念面向网络的操作系统的基本概念计算机网络的高速发展,特别是Internet与万维网的迅速普及,给操作系统的发展带来了深刻的影响。当PC在20世纪70年代刚刚面市的时候,当时是被设计成供用户“个人”使用的计算机。人们通常将每一台个人电脑看做一台独立的计算机,这些没有网络连接的PC事实上是一些信息孤岛。但是,从上世纪80年代开始,随着电子邮件(email)与文件传输(FTP)等Internet应用的广泛使用,越来越多的PC开始接入计算
18、机网络。到了上世纪90年代中期,随着万维网的推广与普及,网络连接逐渐发展成为计算机系统必需的一个组成部分。一方面,网络操作系统有别于传统的单处理器操作系统。首先,计算机网络中包含多个分布在不同位置的处理器,这些处理器没有共享的内存与时钟,每个处理器拥有各自的本地内存。其次,网络中处理器之间的通信可能使用各种各样的通信线路,例如高速总线或者电话线路。这些特点使得网络操作系统与单处理器操作系统存在一些区别。在一个网络操作系统中,用户可以感知到网络中其他计算机的存在,进而能够登录到远程的计算机上,并且在本地与远程多个计算机之间进行文件拷贝。每台计算机都运行各自的本地操作系统,拥有各自的单个或多个本地
19、用户。12第第6章网络操作系统章网络操作系统另一方面,网络操作系统与传统的单处理器操作系统并没有根本上的区别。顾名思义,网络操作系统显然需要具备对网络接口的支持和一些相关的底层驱动软件,还要有进行远程登录与远程文件访问的程序。但是,这些与网络相关的附加成分并没有改变网络操作系统作为一个操作系统的本质结构。综上所述,给出网络操作系统的定义如下。网络操作系统网络操作系统是一种能够提供诸如网络文件共享功能的操作系统,它能够提供某种网络通信手段,使网络中不同计算机上的不同进程之间可以进行信息交流。一台运行网络操作系统的计算机既可以脱离网络上其他的计算机而独立运行,也能够感知网络的存在并且能够与网络中的
20、其他计算机进行通信交流。与网络操作系统相关,并且经常与网络操作系统相混淆的一个概念是分分布式操作系统布式操作系统。与网络操作系统不同,尽管该系统内包含多个处理器,但是分布式操作系统对其用户而言却看似一个传统的单处理器操作系统。分布式操作系统的用户既无需知道其程序是在哪一个处理器上运行,也不必了解其文件存储在哪一台计算机上,所有这些繁琐的底层细节都由分布式操作系统高效地自动处理。与网络操作系统相比,分布式操作系统是一种自治性更弱的环境,为了给用户呈现一种单个操作系统控制整个网络的表面现象,系统内各个不同的操作系统之间需要进行较为紧密的通信交流。13第第6章网络操作系统章网络操作系统6.2.2 面
21、向网络的操作系统的主要功能面向网络的操作系统的主要功能接下来,按照网络操作系统与分布式操作系统两个方面,介绍面向网络的操作系统的主要功能。网络操作系统为用户提供了一种计算环境,在这种环境中用户可以感知到系统中存在其他多个计算机,而且用户能够通过两种方式访问远程计算机的资源:登录到远程计算机或者从远程计算机上向本地计算机传输数据。14第第6章网络操作系统章网络操作系统1.网络操作系统1)远程登录(Remote Login)网络操作系统的一个重要功能是使用户能够远程登录到另一台计算机上去。Internet上的telnet程序就是最常见的进行远程登录的网络程序。这个程序能够使用户登录到一台远程的计算
22、机上,使用该计算机的系统资源(如CPU)。为了能够进行远程登录访问,该用户在远程计算机上必须拥有一个有效的账户,通常包括一个用户名(user id)与一个密码(password)。该命令的一般形式如下:telnet hostname 运行该命令将在本地用户的计算机与hostname所表示的远程主机之间建立一个连接。在这个连接建立之后,相应的网络软件将在两台计算机之间建立一个透明的双向信息链路,本地用户输入的所有字符都被发送到远程计算机上的一个进程,该进程发出的所有输出结果都被返回给本地用户。在实际进行通信之前,远程计算机上的进程首先询问本地用户的账户信息,包括登录用户名与相应的密码。一旦用户输
23、入正确的账户信息,该进程转变为本地用户在远程计算机上的代理程序,使本地用户可以像远程计算机上的用户一样进行计算或者执行其他操作。15第第6章网络操作系统章网络操作系统2)远程文件传输(Remote File Transfer)网络操作系统的另一个重要功能是给用户提供一种从一台计算机向另一台计算机进行远程文件传输的机制。在远程文件传输的过程中,每台计算机负责管理本地的文件系统。如果一个站点(比如)上的用户想要获得位于另一台计算机(比如)上的某个文件,必须指明该文件的具体位置并将其拷贝到本地计算机上。在Internet上有一个非常流行的FTP(File Transfer Protocol,文件传输
24、协议)程序,用户可以使用这个程序进行远程文件传输。例如,如果上的某个用户需要将存储在上的一个名为network_os.ppt的文件拷贝到本地计算机上,并将其文件名改为my_network_os.ppt,该用户首先需要执行以下命令来运行FTP程序:ftp 接下来FTP程序提示用户输入登录用户名和密码,在用户输入正确的登录用户名和密码之后,用户必须进入network_os.ppt所在的子目录,然后通过执行以下命令进行文件拷贝:get network_os.ppt my_network_os.ppt其中,get命令的功能是从远程计算机上拷贝文件到本地计算机。与之相反,用户还可以将本地计算机上的文件拷
25、贝到远程计算机上。16第第6章网络操作系统章网络操作系统此外,还有当前目录列表以及改变当前目录等命令,表6.1给出常用的FTP命令。在这种远程文件传输的过程中,目标文件的存储位置对于用户并不是透明的,用户必须清楚地知道目标文件在远程计算机上存放的具体位置。从本质上讲,这种远程文件传输并不是真正的文件共享(file sharing),仅仅是用户将文件从一个站点拷贝到另一台计算机上而已。因此,大量执行FTP程序的结果会使一个文件产生多个副本,它们存放在不同的计算机上,导致存储空间的浪费。用户一旦对某个文件副本进行了改动,将会导致多个拷贝文件之间的不一致。17第第6章网络操作系统章网络操作系统2.分
26、布式操作系统分布式操作系统与网络操作系统存在明显的不同。在一个分布式操作系统中,用户访问远程计算机资源的方式与访问本地计算机资源一样。分布式操作系统负责控制不同计算机之间的数据迁移、计算迁移和进程迁移。1)数据迁移(Data Migration)如果结点A上的用户想要访问结点B上的数据(比如某个文件),操作系统通常用两种基本的方法来完成相应的数据传输工作。一种方法是将整个文件从结点B传输到结点A上。在此之后,结点A上的用户对该文件的所有访问都是本地操作。在用户对该文件的访问结束之后,如果该文件在本次访问过程中被修改了的话,需要将该文件的副本传回结点B。值得注意的是,对于一个大型文件,即使用户对
27、该文件仅仅进行了一点点改动,在访问结束后也必须将整个文件全部传回源结点。另一种方法是只把当前用户任务真正需要的那部分文件从结点B传输到结点A上。如果用户稍后又需要其他部分的文件,再传输所需部分文件,每次仅仅传输文件的某个部分,而不是传输整个文件。在用户对该文件的访问结束之后,必须把所有在本次访问过程中被修改了的部分传回结点B。如果在访问一个大型文件的过程中仅对其中很小一部分进行了改动,显然上述第二种方法更加适用。相反,如果在一次文件访问过程中对相当大的部分进行了改动,那么采用上述第一种方法效率会更高一些。18第第6章网络操作系统章网络操作系统2)计算迁移(Computation Migrati
28、on)在某些情况下,在不同的系统之间进行计算传输比进行数据传输更加有效。例如,某用户计算任务需要访问位于不同结点上的多个大型文件,以获得这些文件的一些汇总信息。为解决这一问题,可以采用上述数据迁移的方法,将这些文件复制到本地结点进行集中访问与信息汇总。另一种效率更高的方法是在远程结点上访问这些文件,只把访问的结果返回到发起本次计算任务的用户结点,这样可以避免大量的数据迁移。一般而言,如果传输这些文件所需的时间比执行那些远程命令的时间更长的话,应该采用执行远程命令的方法。计算迁移可通过多种不同方法实现。第一种方法是通过执行远程过程调用远程过程调用(RPC:Remote Procedure Cal
29、l)实现计算迁移。远程过程调用是使用数据报协议在远程计算机系统上执行某个例程。例如,本地结点上的进程P要访问某远程结点A上的文件,进程P通过一个远程过程调用激活结点A上的某个预定义的过程,由该过程在远程结点A上执行相应的计算与操作,然后将运行结果返回给进程P。第二种方法是通过消息传递消息传递来实现计算迁移。首先,进程P给结点A发送一条消息。接下来,结点A上的操作系统根据该消息的内容创建一个新的进程Q,进程Q的任务是完成进程P委托的计算任务。当进程Q在结点A上完成相应的计算与操作之后,它将进程P所需的计算结果通过消息传递系统返回给进程P。值得注意的是,在这种实现计算迁移的方式中,本地进程P和远程
30、代理进程Q可以并发执行。采用这种方法实现计算迁移可以允许不同结点上的多个进程并行运行。19第第6章网络操作系统章网络操作系统3)进程迁移(Process Migration)进程迁移是计算迁移的逻辑扩展。当用户提交一个进程进行执行的时候,该进程并不总是在生成该进程的结点上执行。在某些情况下,将进程的全部(或一部分)在其他不同的结点上执行会产生更好的效果,这是因为:首先,将进程(或其子进程)分布到网络上多个不同的结点上运行可以将网络的计算负载分配得更加平衡,实现网络系统的负载均衡(load balance)。其次,如果一个进程可以被分解成多个子进程并且能够分配到多个不同的结点上并行执行的话,该进
31、程的完成时间会大幅缩减,起到计算加速的作用。第三,在硬件方面,不同的进程有不同的特性,某些进程更适合在某些专用处理器上运行。例如,矩阵求逆运算更适合在阵列处理机上运行,而不适合在微处理机上运行。第四,在软件方面,执行某进程所需的软件可能只有某个网络结点上才有。如果该软件不能在结点间移动,或者在结点间移动进程成本更低,对于这两种情况进程迁移就会变得非常有用。最后,与计算迁移相似,如果在计算过程中使用的数据非常庞大的话,相对于把所有数据全部传输到本地结点,运行一个远程进程的方法效率更高。20第第6章网络操作系统章网络操作系统目前使用的万维网满足上述分布式计算环境的多个特点。首先,万维网能够提供数据
32、迁移功能,服务器与客户端之间的数据传输就是很好的实例。第二,万维网还具有计算迁移功能,例如客户端可以触发服务器上的某个数据库查询操作。第三,Java语言提供了一定的进程迁移功能。网络操作系统能够提供大多数上述的基本网络功能。相对于网络操作系统,分布式操作系统要求更高,它追求的目标是为用户提供一个透明、无缝而且易于访问的网络计算环境。21第第6章网络操作系统章网络操作系统6.3 Unix操作系统接下来,在本节和6.4节分别介绍两个实际的网络操作系统-Unix与Linux,进一步深化对网络操作系统基本概念与主要功能的理解。6.3.1 Unix操作系统的发展历史操作系统的发展历史早在1969年,贝尔
33、实验室的Ken Thompson使用一台闲置的PDP-7小型机开发出了最初版本的Unix操作系统。不久,被称为“C语言之父”的Dennis Ritchie也加入了Ken Thompson对Unix操作系统的研究工作。早期的Unix版本都是由Ken Thompson和Dennis Ritchie两人所带领的团队开发的。Unix操作系统吸收和借鉴了其他一些早期操作系统项目的概念与思想,比如由贝尔实验室、麻省理工学院和美国通用电气公司共同研发的MULTICS(MULTiplexed Information and Computing Service)系统、麻省理工学院的CTSS(Compatible
34、 Time-Sharing System)系统以及XDS-940系统等。其中,对Unix操作系统影响最深的是MULTICS系统。Unix操作系统的许多概念与想法都直接源于MULTICS系统,例如在文件系统的基本组织结构中,将命令解释器(即shell)视为一个用户进程,为每个用户命令使用一个独立的进程与文本编辑字符。事实上,Unix操作系统的名称就来源于MULTICS系统的名称。22第第6章网络操作系统章网络操作系统1970年,Ken Thompson用来开发Unix的那部PDP-7小型机只能支持两个用户,这与MULTICS名称中多用户多任务(MULTiplexed)的含义相去甚远。因此,Bri
35、an Kernighan戏称Ken Thompson与Dennis Ritchie所开发的系统只能算是一个“UNiplexed Information and Computing System”,于是,这个系统被称为UNICS。后来,取UNICS的谐音将这个操作系统的名称正式改为Unix。最初由Ken Thompson开发的第一版Unix是用汇编语言编写的。由于汇编语言较难理解,不利于Unix系统的推广和普及。随着Dennis Ritchie的加入,他们用C语言重写了Unix操作系统,推出了第三版Unix。相对于汇编语言,C语言是一种高级语言,比较容易掌握与使用。用C语言重写的Unix操作系统
36、很快推广开来,迅速普及。可以说,Unix操作系统与C语言相辅相成,互相促进,达到了双赢的效果。23第第6章网络操作系统章网络操作系统随着Unix操作系统的不断发展与完善,Unix不仅在贝尔实验室内部广为使用,还逐渐扩展到一些其他的高等院校与科研机构。早期的Unix操作系统具有许多优点,例如系统规模较小、系统模块化程度高、设计简洁明了等等。这些特点吸引了许多其他计算机科研机构纷纷投入到对Unix的研究工作中,例如兰德公司、哈佛大学及普渡大学等著名研究机构和高等院校。其中,最有影响力的非贝尔实验室体系的Unix研究机构是加州大学伯克利分校(UCB:University of California
37、at Berkeley)。加州大学伯克利分校对Unix操作系统的研究工作最早始于1978年,由Bill Joy与Ozalp Babaoglu领导。他们的研究很快得到美国国防高级研究项目局DARPA的支持,致力于研究Unix系统在政府部门的应用。他们推出了一系列的Unix操作系统版本,例如2.11 BSD(Berkeley Software Distribution,伯克利软件发行版)、3 BSD、4.2 BSD以及4.3 BSD等。加州大学伯克利分校于1993年6月推出了其最终的Unix版本4.4 BSD,该版本支持新X.25网络,并且与POSIX标准兼容。4.4 BSD包括一个全新的文件系统
38、组织结构,一个虚拟文件系统接口,并且支持可堆叠式文件系统。4.4 BSD还借鉴了Mach系统的虚拟内存系统技术。除此之外,4.4 BSD还全面提高了系统的安全性,改进了操作系统内核的结构。随着4.4 BSD的发布,加州大学伯克利分校也停止了对Unix的研究工作。24第第6章网络操作系统章网络操作系统在实践中广泛使用的Unix操作系统并不仅仅局限于贝尔实验室与加州大学伯克利分校所研究和开发的各种Unix版本。例如,美国Sun Microsystems公司在其推出的工作站上配置BSD风格的Unix操作系统,极大地推动了Unix操作系统的普及和应用。随着Unix操作系统越来越受用户的欢迎和喜爱,Un
39、ix操作系统陆续被移植到许多不同种类的计算机和计算机系统上。在此过程中,人们创造出了种类繁多的Unix系统以及许多类似Unix的操作系统。目前,Unix操作系统已经成为可移植性最强的操作系统。不同的生产商所开发的不同版本的Unix操作系统在编程接口与用户界面等方面都存在明显差异,用户更期待一个统一的独立于特定计算机硬件生产商的Unix环境。因此,用户呼吁国际化的Unix标准的诞生。25第第6章网络操作系统章网络操作系统目前,Unix系统已经从当初贝尔实验室两名科研人员的个人研究项目发展成为一个世界闻名的操作系统,多个国际标准化组织为其制定了相关的标准。长期以来,Unix操作系统一直深受计算机科
40、学学术界的青睐。Unix从其诞生之日起就一直是理想的进行操作系统理论与实践学术研究的载体,例如Tunis操作系统、Xinu操作系统与Minix操作系统等都是基于Unix操作系统的基本概念与思想开发出来的。时至今日,学术界对Unix操作系统的研究仍在不断进行当中。鉴于Unix操作系统对计算机领域所产生的重要影响,Unix操作系统的两位鼻祖,Ken Thompson和Dennis Ritchie,于1983年被美国计算机协会(ACM:Association for Computing Machinery)联合授予计算机科学界的最高荣誉“图灵奖”。1998年,在Unix操作系统问世将近30年之后,K
41、en Thompson和Dennis Ritchie又被授予美国国家技术奖章,用以表彰他们两人共同研究和开发了Unix操作系统,并且在Unix操作系统的研发过程中创造出了在计算机领域影响深远的C语言,极大地推进了信息时代美国在计算机硬件、软件与网络系统等方面的领先地位。26第第6章网络操作系统章网络操作系统6.3.2 Unix操作系统的主要特点操作系统的主要特点最初,Ken Thompson将Unix设计成一种分时系统(time sharing system),给用户提供了标准的用户接口,即外壳(shell)。无论是用户编写的程序还是系统程序通常都是由一个命令解释器(command inter
42、preter)执行的。Unix操作系统的命令解释器是一个用户进程,被称为shell是因为该进程紧紧包围在操作系统内核的外边。Unix操作系统的shell非常简单,如果需要的话用户可以用一种shell替换另一种shell。事实上,用户甚至可以自己编写shell。目前有若干种Unix系统通用的shell,其中使用最广的是由Steve Bourne编写的Bourne shell。由Bill Joy编写的C shell在BSD系列的Unix操作系统中很受欢迎。另外,由Dave Korn编写的Korn shell结合了Bourne shell和C shell的主要优点,也深受Unix系统用户的喜爱。Un
43、ix操作系统的文件系统是一种多级的树型结构,该结构允许用户创建自己的子目录。Unix的文件系统支持两个主要的对象:文件和目录。从本质上讲,目录只不过是具有某种特殊格式的文件而已,因此,文件的表示是Unix文件系统最基本的概念。在Unix操作系统中,每个用户数据文件都被视为一个简单的比特序列。Unix操作系统中的一个文件由一个称为“I结点”(inode,亦称为i-node或I node)的结构表示。inode记录了存储在磁盘上的文件的基本信息,例如该文件的用户和用户组、文件的上次更改和访问时间、文件类型等等。在Unix操作系统中,目录与普通文件之间没有严格的区别。目录内容同样存放在数据块中,目录
44、与普通文件一样由一个inode表示,目录与文件仅仅在inode的类型域中加以区别。27第第6章网络操作系统章网络操作系统操作系统的设计目标之一是将各种硬件设备的底层细节信息对用户隐藏起来。在Unix操作系统中,各种输入输出设备被视为与磁盘文件相类似的对象,采用同样的操作进行处理。各种复杂的I/O设备相关细节都被尽可能地隐藏于操作系统内核(kernel)中。即使在操作系统内核中,这些I/O设备相关性与细节信息也仅限于设备驱动程序中。在Unix操作系统中,由输入输出系统(I/O system)将各种输入输出设备的底层细节信息屏蔽起来。Unix的输入输出系统包括一个缓冲高速缓存系统、通用设备驱动代码
45、以及各种特定硬件设备的驱动程序。只有相应的硬件设备驱动程序了解该设备的各种底层细节信息。Unix操作系统支持多进程。操作系统设计的一个重要问题是如何表示进程。Unix操作系统与其他操作系统的一个显著区别是在Unix系统中可以非常容易地创建多个进程,并对这些进程进行各种操作处理。在Unix操作系统中,进程由各种控制块(control block)表示,这些与进程相关的控制块存放在操作系统内核中。Unix操作系统内核使用控制块中的信息进行进程控制与CPU调度工作。在Unix系统中,与进程相关的最基本的数据结构是进程结构(process structure),包含了操作系统进行进程调度时所需的所有相
46、关信息,例如进程标识号、进程优先级以及指向其他控制块的指针等。28第第6章网络操作系统章网络操作系统Unix操作系统采用一种简单的基于优先级的CPU调度算法。Unix操作系统CPU调度的主要设计思想是便于交互式进程(interactive process)的处理。每个进程都有一个调度优先级(scheduling priority),调度优先级数字越大表示该进程的优先级越低。随着进程使用CPU时间的不断累积,该进程的调度优先级变得越来越低;反之,随着进程累积使用CPU时间的不断减少,该进程的调度优先级变得越来越高。采用这种CPU调度的负反馈机制可以有效防止某个进程独占所有的CPU处理时间,避免进
47、程饥饿(starvation)现象的产生。早期的Unix操作系统版本采用1秒钟作为轮转调度的时间额度(quantum)。4.3 BSD版本的Unix每隔0.1秒重新进行一次进程调度,每隔1秒钟重新计算一次进程优先级。Unix操作系统最初起源于Ken Thompson个人的研究,后来随着Dennis Ritchie的加入才成为一个两人团队的项目。因此,为了他们研究的便利,Unix操作系统的规模一直被控制在较小的范围,便于理解。基于同样的考虑,Unix操作系统中大多数算法的选择都是基于简洁性的考虑,而不是出于对速度与复杂性的考虑。Unix操作系统的设计初衷是由系统内核和各种相应的库(library
48、)提供一套规模虽小但却足够强大的系统功能。如果用户需要一个更加复杂的系统,可以很容易地使用内核与库所提供的这些系统功能去构建。Unix操作系统在设计上的简洁性一直以来被纷纷效仿,也是大家研究的热点之一。29第第6章网络操作系统章网络操作系统Ken Thompson是B语言的作者,而Dennis Ritchie是C语言的作者。作为由两位程序设计语言的作者所开发的操作系统,Unix一直高度重视系统程序设计和开发方面的辅助功能与环境,在这方面比较有代表性的是编译程序make(检查与一个程序相关的一系列源文件,找出哪些源文件需要编译并且执行编译)和源代码版本控制系统SCCS(Source Code C
49、ontrol System)。由面向机器的汇编语言转向C语言这种高级程序设计语言是Unix操作系统发展历程上的一个重要里程碑。由于Unix操作系统可能运行的计算机硬件平台存在不确定性,因此有必要使Unix操作系统与面向机器的汇编语言相分离。相对于汇编语言,C语言简洁紧凑、灵活方便、易学易用、功能强大、适用范围广,兼具高级程序设计语言与低级程序设计语言的诸多优点。将Unix操作系统用C语言重写之后,极大地简化了将Unix从一种硬件平台移植到另一种硬件平台的硬件支持问题。30第第6章网络操作系统章网络操作系统从Unix操作系统研究之初,Unix的开发团队就将全部Unix操作系统源代码发布到网络上,
50、这样做带来的好处远远超过了它的缺点。首先,用户可以免费使用Unix操作系统。其次,广大的Unix爱好者和用户可以使用正处于开发过程中的Unix操作系统,而不必像其他商业操作系统那样必须等到正式的版本发布之后才能使用。Unix操作系统这种独特的开发模式非常有利于发现系统的缺陷与纠错,而且极大地方便了爱好者和用户对Unix系统进行创新性改进与完善。如果用户发现操作系统某处存在错误或者缺陷,可以立即在本地计算机上对操作系统进行改错和纠错,而不必等到操作系统的下一个正式版本发布之后才进行。同时,广大Unix爱好者和用户对操作系统错误与缺陷的修改、改进以及为操作系统添加的新功能还有可能被加入到下一个正式