您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 计算机操作系统教程 第10章
第10章面向对象操作系统的设计10.1面向对象的基本概念10.2面向对象和操作系统10.3面向对象操作系统的分类10.1面向对象的基本概念“面向对象”或“对象”的概念起源于20世纪60年代末期。进入80年代以后,随着计算机软、硬件技术的发展,面向对象技术在数据库、程序设计语言、CAD/CAM、人工智能技术、程序设计以及操作系统和计算机网络通信等几乎所有的软件领域都受到了极大重视和广泛研究。特别是在操作系统领域中,由于面向对象技术除了在设计方法上更接近于设计人员脑子中的“思维形象”之外,它还具有隐蔽数据以及由消息激活对象等特性,从而它比传统技术更容易应用于分布式操作系统的设计与实现。因此,许多面向对象的操作系统都正在被研究和开发,以便用作分布式网络操作系统。例如WindowsNT,Solaris2.x和mache等。这些系统的共同特点是:使用面向对象技术设计和实现操作系统,从而使得所实现的操作系统能够管理一个超大规模的、开放式的、自我发展的以及分布式的计算环境。这里,首先介绍面向对象的基本概念。1.对象和面向对象对象可分为物理对象、抽象对象和计算机对象三个层次。计算机对象是把抽象对象的属性、特征和行为数据化和过程化的结果。本书中所述对象都指计算机对象。对象是一个由一组数据集以及对这些数据集进行操作的封装模块。对象接收其他对象发来的消息,并由对象自己根据本身的状态和所具有的功能决定是否根据接收到的消息进行操作。另外,对象一般具有自己的存储结构,对存储内容的访问、操作和变更只能由对象自己完成。再者,为了区别不同的对象,系统内的每一个对象都具有唯一的对象名。因此,一般,一个对象由对象名、表示存储内容的对象状态以及对存储数据进行操作的过程集合组成。把系统以及系统中的元素用对象及对象的集合表示来构造的系统就是面向对象的系统。面向对象的系统具有两个重要特性,即封闭性(encapsulation)和继承性(inheritance)。封闭性对应于系统中对象的分类抽象化,即每一种类型的对象都定义有对该类对象的属性及操作方法,且只允许按定义的方法对该类对象进行操作。换句话说,一种类型对象的动态性质封闭于该类对象的属性和方法之中。继承性对应于系统的一般化,即具有某些共同属性的对象所组成的类(class)可继承它们的超类(superclass)所具有的属性和操作。2.对象的动作被激活的对象在系统中怎样动作呢?一个面向对象的系统应具备以下两种功能:第一,向其他对象发送消息。这是对象间相互通信的唯一手段。第二,能生成或创建新的对象。这是用对象来描述系统变化所必须的手段。3.消息面向对象的系统中环境对某一对象发出消息以激活该对象,从而通知它需要做什么。消息中一般包含请求对象的标识符以及完成该工作所必需的信息,例如参数值等。另外,请求对象的对象名也可包含在消息中。4.类和实例具有相同属性和行为的对象集合称为类。换句话说,属于同一类中的对象具有相同的存储结构,使用相同的过程集合对数据进行操作。每一个类都具有一个反映其特征的型(type),型提供选择和区分对象操作的依据。类也可以被看作是对象,而且,类具有分层构造特点,即从具有共同属性和行为特征的对象的集合中,可进一步抽出具有某些特殊属性或行为特征的对象构成该类的子类;而该类又是该子类的超类。这些超类、类、子类等构成类的层次结构,子类继承其所有高层超类的属性和行为特征,但反过来,超类或类不具有子类所具有的独特的属性与行为特征。一个类中的对象即是该类的一个实例,实例具体描述一个对象。一般来说,一个类中有多个实例。类和实例的关系近似于数据结构与具体数据的关系。5.过程或方法过程或方法是定义于某一特定类的操作与法则。一种类型的对象只能被事先定义好的过程或方法所操作。不过,不同类型的对象可以分别包含同一过程或方法。例如,在实数子类和二进制数子类中定义“+”法,则实数子类中的对象和二进制数子类中的对象都可使用该方法改变自身的状态。显然,对于同一消息(1,1),实数子类的输出结果是2,而二进制子类的输出结果将是0。关于对象的几个主要关键词如图10.1所示。图10.1关于面向对象技术的几个关键词10.2面向对象和操作系统本节主要讲述为什么要把面向对象技术引入操作系统和怎样用面向对象技术开发操作系统。10.2.1面向对象技术的引入面向对象技术最初在操作系统中出现是在20世纪60年代后期,J.Dennis等从资源保护的角度出发提出了权能(capability)的概念,权能的概念也是造成面向对象概念产生的重要因素之一。在操作系统中,无论是软件资源还是硬件资源,传统的设计方法都是使用相应的表格或队列链等数据结构以及相应的标识符(或过程名)来描述它们。对这些资源的访问和使用顺序则是由进程中的程序来规定的。也就是说,对操作系统资源数据的使用是依靠程序员或设计人员所设计的算法来决定的。设计人员必须保证这些算法的正确性,否则将会由于不当的访问操作带来不可估量的恶果。首先开始解决资源保护问题的尝试是分段。分段把一个进程的逻辑地址空间分成多个不连续的段,且每个段具有独立的逻辑意义和连续的段内地址。从而,可以使用段表来进行地址变换和段内数据保护。例如,可以使用段表中的相应栏目来设置进程对某个段的读写权限,从而起到保护该段的作用。但是,由于段表是从属于进程的,因此,对于同一段程序来说,在不同的进程中具有不同的段号,即其逻辑地址只在一个进程内有效。这样,对逻辑地址的访问权限就掌握在进程手中而不是段中或系统中。再者,对于长期保存的数据文件来说,文件系统中设置有文件名和读写权限检验等。这种保护方式又完全不同于对段的读写保护方式。是否有一种不依赖于上下文关系和长期、短期之分的统一的数据保护方法呢?J.Dennis在1966年提出了对系统内的所有“物体”赋予权能,实施统一保护的概念。权能包括对象名和访问权。从权能的眼光看,系统内的所有物体都是对象,而每一个对象在访问另一个对象时,都必须提出自己的权能,只有被访问对象和操作在该权能限定的范围内,该访问才是正确的。对于各用户或进程来说,系统为每个用户或进程设置一张权能表。该表中含有允许该用户或进程访问的所有对象的权能。这样,由权能表就规定了该用户或进程可以操作和访问的范围以及封闭了各个对象。再者,操作系统严格限制用户或进程任意修改权能表,从而保证了系统的完整性。如果把用户和进程也看作对象(它们的确是对象),则可以认为由权能表把该对象可以使用的数据和操作封闭起来了。另外,可以把权能表赋给任何一个过程,从而把过程的操作领域和操作进行封闭保护。图10.2是使用权能表进行地址变换的例子。在图10.2中,由于每个段都被看作一个对象,因此,在一个进程是否可访问某段时除了给出段内相对地址之外,还必须提出它所访问对象的权能,以验证它是否有权访问该对象。权能中的对象名又进一步指向该对象的描述信息,例如对象数据在存储空间的位置、长度等。由对象描述信息和段内相对地址l就可得到实际要访问的物理地址。图10.2使用权能表进行地址变换使用权能表的另一个好处就是做到了单级寻址,即无论待访问指令是在内存中还是在外存内,都可以通过权能表所指示的对象而找到它们。这样就可以把文件系统也纳入进程的逻辑空间中。使用权能表的面向对象系统有hydra、starOS等。引入面向对象概念的另一个重要原因是“对象”比起“算法+数据结构”方式更接近于人的思维。这表现在两个方面:第一方面是用户使用面向对象的工具作为开发环境;另一方面是系统设计人员使用面向对象的概念设计出性能好、结构清晰和能力强的操作系统。进入20世纪80年代中后期以来,为用户提供友好用户接口的面向对象开发环境不断被开发出来。这些开发环境为用户提供各种直观的对象如窗口、按钮、菜单、翻滚条等。用户通过键盘或鼠标对这些对象进行操作。这些对象都含有自己的数据和过程以允许用户对其进行直接操作,而不必不停地激活应用程序。另外,这些对象还向系统发送消息或事件以驱动其他对象完成相应的功能。面向对象的操作系统得到广泛重视和研究的另一个重要因素是它适合于超大规模的、开放式分布环境。由于面向对象技术采用对象间发送消息来驱动对象完成特定功能方法,且对象的定义不受距离和系统的限制,因此,面向对象的概念被广泛地用于分布式操作系统或网络操作系统。10.2.2面向对象操作系统的设计方法用面向对象方法设计操作系统除了增强系统的安全功能之外,还具有以下几个好处:(1)通过对象的复用性降低开发操作系统的难度。操作系统中所设计的各类对象在第一次设计和开发时,经过了设计、编码、测试和在开发出来后的使用中得到了提高和改进。复用这些软件既可以节省开发成本,又能提高系统的可靠性。面向对象设计技术的使用将会极大地降低操作系统的开发难度。(2)系统将具有更好的可扩展性以及可维护性。由于面向对象技术的封装特性,对象和对象之间的边效应很小。这有利于产品的升级维护和更新。更重要的是,对于新的应用对象,面向对象系统可以很方便地将其链接到一起。(3)方便设计和系统组织,因为面向对象的思想与概念更接近于现实世界。操作系统中的对象是对操作系统管理信息和资源的抽象。对象拥有自己的状态或存储空间,而且,其状态也就是存储内容,只能由预定义好的操作来改变。而改变对象状态的操作又需要其他对象发来相应的消息后才能被启动。因此,也可以认为操作系统中的对象是受某种手段保护的物体。正如前面提到过的,以对象为要素构成的系统被称为面向对象的系统。那么,怎样使用面向对象技术来设计和开发操作系统呢?与开发其他面向对象的系统一样,其关键是如何根据设计要求和目标来定义和画分对象、对象之间的结构以及对象之间的通信方法。1.对象的定义和对象结构对象的画分和定义有两种基本方法。一种是像面向对象的语言smalltalk或CLU那样,把系统内的所有物体看作对象。另一种方法则是除了系统内部定义的默认对象之外,只提供一个对象生成工具,由用户根据需要自定义对象或生成对象实例。对于把所有物体都看作对象的方法来说,由于只在类中描述生成一个对象实例用的信息和对一个对象实例进行操作的方法,因此,在网络环境下实现时,如果超类、类、子类以及对象实例之间的依赖关系不在同一主机中的话,其实现将会较为困难。在操作系统中常使用的是第二种方法,即定义默认对象和提供生成对象与对象实例的工具。这样,在单机系统中,人们可以按照smalltalk或C++等面向对象语言的方法把系统内所有物体看作局部对象,而把网络环境下的对象看作广域对象且具有不同的类型,从而解决了网络环境下对象的继承性问题。不同的系统中对象的定义各异。一般来说,对象应被定义成一个寻址保护的基本单位,它包括三个部分,即{对象名,对象类型,对象状态}其中对象名是对象的逻辑标识符,系统内的所有对象名构成一个对象名空间。对象类型指明该对象所属的类和可允许的操作。对象状态是该对象所存储的数据集合和权能。在Hydra系统中,系统默认定义的对象类型有:进程、过程、页、信号量、I/O设备、数据、策略、端口、文件、通用对象和类型对象等,其中类型对象用来创建一种新的对象类型。再者,系统定义有一creat语句来创建任一对象类型的实例。为了管理的方便和利用面向对象的继承性特点,系统中的对象都按照一定的规律构成一定的层次结构。例如,在Muse系统中,其对象就分为超级对象(meta-object)和一般对象(object)。其中超级对象定义一般对象的内部结构,并为一般对象提供一个最佳执行环境。图10.3给出了Muse的对象结构概念图。图10.32.过程和通信定义了对象类型之后,还必须定义控制和操作对象实例用的过程。对不同的对象实例来说,能改变其状态的过程是不同的。而且过程在系统中也被看作对象,它们具有自己的权能表和自己的执行域。另外,由于同一过程可被不同的进程对象调用,因此,过程对象的执行域不是固定的,过程对象的执行域在过程对象被调用时发生转换。对象和对象之间通过互相发送消息来启动对方的过程进行操作以改变它们的状态,对象不能在没有消息驱动的情况下自由地进行操作或修改自己的状态。对象之间的通
本文标题:计算机操作系统教程 第10章
链接地址:https://www.777doc.com/doc-3353322 .html