优秀课件笔记之面向对象操作系统的设计

来源:互联网 发布:win10修改mac地址 编辑:程序博客网 时间:2024/05/16 06:25

1、本文所以内容来自 著名高校课件和学生笔记(校园里面经常见到有人高价买笔记)
2、任课教师不会提供参考文献,所以只能对作者表示感谢,如果引用了您的作品,可以用回复方式补充参考文献。
3、我不对文章无关问题进行解答,文章内容也比较难,我也很难解答您遇到的问题,如果发现BUG可以用回复方式帮我修正。
4、本课 计算机操作系统
,适用于计算机操作系统课、考研

本课其他部分的导航条见页面底部

§
10.1
面向对象的基本概念

面向对象



对象

的概念起源于
20
世纪
60
年代
末期。进

80
年代以后,随着计算机软、硬件技术的发展,面向对象技
术在数据库、程序设计语言、
CAD/CAM

人工智能技术、程
序设计以及操作系统和计算机网络通信等
几乎所有的软件领域
都受到了极大重视和广泛研究
。特别是在操作系统领域中,

于面向对象技术除了在设计方法上更接近于设计人员脑子中的

思维形象

之外,它还具有
隐蔽数据
以及由
消息激活对象
等特
性,从而它比传统技术更容易应用于分布式操作系统的设计与
实现。
因此,许多面向对象的操作系统都正在被研究和开发,
以便用作分布式网络操作系统。
例如
Windows NT
sodnTNwWi

Solaris 2.x

mache
等。这些
系统的共
同特点是:
使用面向对象技术设计和实现操作系统,从而使得
所实现的操作系统能够管理一个超大规模的、开放式的、自我
发展的以及分布式的计算环境。
这里,首先介绍面向对象的基
本概念。
3
1.
对象和面向对象
对象可分为
物理对象、抽象对象和计算机对象

个层次。
计算机对象是把抽象对象的属性、特征和行

数据化和过程化
的结果。
本书中所述对象都指计算
机对象。
对象是一个由一组
数据集
以及对这些数据集进行
操作

封装模块
。对象接收其他对象发来的消息,并

对象自己
根据本身的状态和所具有的功能决定是否
根据接收到的消息进行操作。
另外,
对象一般具有自
己的存储结构,对存储内容的访问、操作和变更只能
由对象自己完成

再者,
为了区别不同的对象,系统
内的每一个对象都具有唯一的对象名
。因此,一般,
一个对象由对象名、表示存储内容的对象状态以及对
存储数据进行操作的过程集合组成

4
把系统以及系统中的元素用
对象

对象的集合
表示
来构造的系统就是
面向对象的系统

面向对象的系统具有两个重要特性,即
封闭性
(encapsulation)

继承性
(inheritance)

封闭性对应
于系统中对象的
分类抽象化
,即每一种类型的对象
都定义有对该类对象的属性及操作方法,且
只允许
按定义的方法对该类对象进行操作

换句话说,

种类型对象的动态性质封闭于该类对象的属性和方
法之中。继承性对应于系统的
一般化
,即具有某些
共同属性的对象所组成的

(class)
可继承它们的超

(
superclass
lscrauspe
)
所具有的属性和操作

5
2.
对象的动作
被激活的对象在系统中怎样动作呢?
一个面向对
象的系统应具备以下两种功能:第一,
向其他对象发
送消息。
这是对象间相互通信的唯一手段。
第二,能
生成或创建新的对象。
这是用对象来描述系统变化所
必须的手段。
3.
消息
面向对象的系统中环境对某一对象发出消息以激
活该对象,从而通知它需要做什么

消息中一般包含
请求对象的标识符以及完成该工作所必需的信息,例
如参数值等。另外,请求对象的对象名也可包含在消
息中。
6
4.
类和实例
具有相同属性和行为的对象集合称为

。换句话
说,
属于同一类中的对象具有相同的存储结构,使用
相同的过程集合对数据进行操作

每一个类都具有一
个反映其特征的

(type)


提供选择和区分对象操
作的依据。
类也可以被看作是对象,而且,类具有分层构造
特点,即从具有共同属性和行为特征的对象的集合
中,可进一步抽出具有某些特殊属性或行为特征的对
象构成该类的
子类
;而该类又是该子类的
超类

这些
超类、类、子类等构成类的层次结构,子类继承其所
有高层超类的属性和行为特征,但反过来,超类或类
不具有子类所具有的独特的属性与行为特征。
一个类中的对象即是该类的一个
实例

实例具体
描述一个对象
。一般来说,一个类中有多个实例。类
和实例的关系近似于数据结构与具体数据的关系。
7
5.
过程或方法
过程或方法是定义于某一特定类的
操作与法则

一种类型的对象只能被事先定义好的过程或方法所操
作。
不过,
不同类型的对象可以分别包含同一过程或
方法。
例如,在实数子类和二进制数子类中定义

+

法,则实数子类中的对象和二进制数子类中的对象都
可使用该方法改变自身的状态。显然,对于同一消息
(1

1)
,实数子类的输出结果是
2
,而二进制子类的
输出结果将是
0

关于对象的几个主要关键词如图
10.1
所示。
8

10.1
关于面向对象技术的几个关键词
9
§
10.2
面向对象和操作系统
本节主要讲述为什么要把面向对象技术引入操作
系统和怎样用面向对象技术开发操作系统。
10.2.1
面向对象技术的引入
面向对象技术最初在操作系统中出现是在
20
世纪
60
年代后期,
J. Dennis
seJn.等
从资源保护的角度出发
提出

权能
(capability)
的概念,权能的概念也是造成面向
对象概念产生的重要因素之一。
10
在操作系统中,无论是软件资源还是硬件资源,
传统的设计方法都是使用相应的
表格或队列链
等数据
结构以及相应的标识符
(
或过程名
)
来描述它们
。对这
些资源的访问和使用顺序则是由进程中的程序来规定
的。也就是说,
对操作系统资源数据的使用是依靠程
序员或设计人员所设计的算法来决定的。设计人员必
须保证这些算法的正确性,否则将会由于不当的访问
操作带来不可估量的恶果。
首先开始解决资源保护问题的尝试是
分段

分段
把一个进程的逻辑地址空间分成多个不连续的段,且
每个段具有独立的逻辑意义和连续的段内地址。从
而,可以使用
段表
来进行地址变换和段内数据保护。
例如,可以使用段表中的相应栏目来设置进程对某个
段的读写权限,从而起到保护该段的作用。
11
但是,由于段表是从属于进程的,因此,对于同
一段程序来说,在不同的进程中具有不同的段号,即
其逻辑地址只在一个进程内有效。这样,
对逻辑地址
的访问权限就掌握在进程手中而不是段中或系统中

再者,对于长期保存的数据文件来说,
文件系统
中设置有文件名和读写权限检验等
。这种保护方式又
完全不同于对段的读写保护方式。是否有一种不依赖
于上下文关系和长期、短期之分的统一的数据保护方
法呢?
J. Dennis
seJn.在
1966
年提出了对系统内的
所有




赋予权能
,实施
统一保护
的概念

12
权能包括对象名和访问权

从权能的眼光看,
系统内的所有物体都是对象,而每一个对象在访问
另一个对象时,都必须提出自己的权能,只有被访
问对象和操作在该权能限定的范围内,该访问才是
正确的。
对于各用户或进程来说,
系统为每个用户
或进程设置一张
权能表

该表中含有允许该用户或
进程访问的所有对象的权能
。这样,由权能表就规
定了该用户或进程可以操作和访问的范围以及
封闭
了各个对象
。再者,操作系统严格限制用户或进程
任意修改权能表,从而保证了系统的完整性。如果
把用户和进程也看作对象
(
它们的确是对象
)
,则可
以认为由权能表把该对象可以使用的数据和操作封
闭起来了。
13
另外,可以把权能表赋给任何一个过程,从而把
过程的操作领域和操作进行封闭保护。

10.2
是使用权能表进行地址变换的例子。在图
10.2
中,由于
每个段都被看作一个对象
,因此,在一
个进程是否可访问某段时除了给出段内相对地址之
外,还必须提出它所访问对象的权能,以验证它是否
有权访问该对象。权能中的对象名又进一步指向该对
象的描述信息,例如对象数据在存储空间的位置、长
度等。由对象描述信息和段内相对地址
l
就可得到实
际要访问的物理地址。
14

10.2
使用权能表进行地址变换
15
使用权能表的另一个好处就是做到了
单级寻址,
即无论待访问指令是在内存中还是在外存内,都可以
通过权能表所指示的对象而找到它们
。这样就可以把
文件系统也纳入进程的逻辑空间中。使用权能表的面
向对象系统有
hydra
ahydr

starOS
tsaSOr
等。
引入面向对象概念的另一个重要原因是

对象




算法
+
数据结构

方式
更接近于人的思维
。这表现

两个方面
:第一方面是用户使用面向对象的工具作
为开发环境;另一方面是系统设计人员使用面向对象
的概念设计出性能好、结构清晰和能力强的操作系统。
16
进入
20
世纪
80
年代中后期以来,为用户提供友好
用户接口的面向对象开发环境不断被开发出来。这些
开发环境为用户提供各种直观的对象如窗口、按钮

菜单

翻滚条等。用户通过键盘或鼠标对这些对象进
行操作。这些对象都含有自己的数据和过程以允许用
户对其进行直接操作,而不必不停地激活应用程序。
另外,这些
对象还向系统发送消息或事件以驱动其他
对象完成相应的功能

面向对象的操作系统得到广泛重视和研究的另一
个重要因素是它
适合于超大规模的、开放式分布环境

由于面向对象技术采用对象间发送消息来驱动对象完
成特定功能方法,且对象的定义
不受距离和系统的限

,因此,面向对象的概念被广泛地用于分布式操作
系统或网络操作系统。
17
10.2.2
面向对象操作系统的设计方法
用面向对象方法设计操作系统除了增强系统的
安全功

之外,还具有以下几个好处:

3
点)
(1)
通过对象的复用性降低开发操作系统的难度
。操作系统中
所设计的各类对象在第一次设计和开发时,经过了设计、
编码、测试和在开发出来后的使用中得到了提高和改进。
复用这些软件既可以节省开发成本,又能提高系统的可靠
性。面向对象设计技术的使用将会极大地降低操作系统的
开发难度。
(2)
系统将具有更好的可扩展性以及可维护性
。由于面向对象
技术的封装特性,对象和对象之间的边效应很小。这有利
于产品的升级维护和更新。更重要的是,对于新的应用对
象,面向对象系统可以很方便地将其链接到一起。
(3)
方便设计和系统组织,因为面向对象的思想与概念更接近
于现实世界。
18
操作系统中的对象是对操作系统
管理信息和
资源
的抽象。
对象拥有自己的状态或存储空间,
而且,其状态也就是存储内容,只能由预定义好
的操作来改变。而改变对象状态的操作又需要其
他对象发来相应的消息后才能被启动。因此,也
可以认为操作系统中的对象是受某种手段保护的
物体。
正如前面提到过的,
以对象为要素构成的
系统被称为
面向对象的系统
。那么,怎样使用面
向对象技术来设计和开发操作系统呢?与开发其
他面向对象的系统一样,其关键是
如何根据设计
要求和目标来定义和画分对象、对象之间的结构
以及对象之间的通信方法。
19
1.
对象的定义和对象结构
对象的画分和定义有两种基本方法

一种是
像面
向对象的语言
smalltalk
ltsakml

CLU
那样,
把系统内的
所有
物体看作对象

另一种方法则是除了系统内部定义的
默认对象之外,只
提供一个对象生成工具
,由用户根
据需要自定义对象或生成对象实例。
对于把所有物体都看作对象的方法来说,由于只
在类中描述生成一个对象实例用的信息和对一个对象
实例进行操作的方法,因此,在
网络环境下实现时

如果超类、类、子类以及对象实例之间的依赖关系不
在同一主机中的话,其实现
将会较为困难

20

操作系统中常使用的是第二种方法,即
定义默
认对象和提供生成对象与对象实例的工具
。这样,在
单机系统中,人们可以按照
smalltalk
ltsakml

C++
等面向对
象语言的方法把系统内所有物体看作局部对象,而把
网络环境下的对象看作
广域对象
且具有不同的类型,
从而
解决了网络环境下对象的继承性问题

不同的系统中对象的定义各异。一般来说,对象
应被定义成一个寻址保护的基本单位,它包括三个部
分,即

对象名,对象类型,对象状态

其中
对象名
是对象的逻辑标识符,系统内的所有
对象名构成一个对象名空间。
对象类型
指明该对象所
属的类和可允许的操作。
对象状态
是该对象所存储的
数据集合和权能。
21

Hydra
ayHdr
系统中,系统默认定义的对象类型有:
进程、过程、页、信号量、
I/O
设备、数据、策略、
端口、文件、通用对象和类型对象等,其中
类型对象
用来创建一种新的对象类型。再者,系统定义有一
creat
语句来
创建任一对象类型的实例

为了管理的方便和利用面向对象的继承性特点,
系统中的对象都按照一定的规律构成一定的层次结构。
例如,在
Muse
euMs
系统中,其对象就分为超级对象
(meta-object)
和一般对象
(object)

其中超级对象定
义一般对象的内部结构,并为一般对象提供一个最佳
执行环境。图
10.3
给出了
Muse
euMs
的对象结构概念图。
22

10.3
对象结构示例
23
2.
过程和通信
定义了对象类型之后,还必须定义控制和操作对
象实例用的过程
。对不同的对象实例来说,能改变其
状态的过程是不同的。而且
过程在系统中也被看作对
象,它们具有自己的权能表和自己的执行域。
另外,
由于
同一过程可被不同的进程对象调用
,因此,
过程
对象的执行域不是固定的,过程对象的执行域在过程
对象被调用时发生转换。
对象和对象之间通过互相发送消息来启动对方的
过程进行操作以改变它们的状态,对象不能在没有消
息驱动的情况下自由地进行操作或修改自己的状态。
对象之间的通信方法可以大致上分为两种。一种是

程过程调用
(RPC)

远程过程调用可完成网络环境下
的对象之间的
消息传递工作
。第二种方式是共有存储
器方式传递消息
。这种方式与前面章节中讲述进程通
信时所述方法大致相同。
24

10.4
给出了网络环境下对象之间互通消息时
的通信顺序结构。
在图
10.4
中,
netname_look_up

send
是送信
对象的过程;
port_allocate
lte_、
netname_check_in


receive
是接收对象的过程。
另外,
在网络环境下传递消息时,由于通信
对象之间没有共同的物理存储器,因此,不依靠
参照参数的办法来实现过程调用。而且,由于通
信对象双方是并行执行的,因此,必须考虑对象
之间的同步因素。

10.5
给出了一种最典型的
RPC
处理流程。
25

10.4
利用网络环境的通信结构
26

10.5 RPC
的处理过程
27
在图
10.5
中,由于客户对象必须区分所发出的过
程调用是否是远程调用,因而设有
远程过程区分模块
stub

该模块把远程过程调用的有关参数进行组包后
作为消息交给消息发送模块发出,并把远程过程调用
返回的结果值进行拆包后交给原调用部分

远程过程调用使得系统可以
在网络环境中执行不
同的对象
。但是,在网络环境中执行的对象的寻址范
围必须是在该对象的地址空间内。换句话说,
在一个
对象的权能中没有描述的过程或对象,不可能依靠远
程过程调用得到执行

第二种方式是共有存储器方式传递消息
。这种方
式与前面章节中讲述进程通信时所述方法大致相同。
28
3.
进程和资源的关系
在操作系统中,
进程是动态的,而资源是静态的。
无论是传统操作系统设计方法,还是使用面向对象设
计,都会涉及到如何为进程分配资源的问题。
在传统
设计方法中,进程获得资源是通过系统调用(例如文
件资源等)或过程调用(例如缓冲分配)等方法。
在面向对象设计的操作系统中,进程和资源之间
的调用关系是通过对象之间互相发送消息进行消息通
信实现的。而这些消息的发送和接收又要依赖于对象
中所包含的过程来实现。

10.6
给出了
Windows NT
snTWNdiow
系统中使用的进程对
象与资源的关系。
29

10.6 NT
进程对象与资源
30
如图
10.6
所示,
NT
用户必须首先通过访问
托肯

Token
onTke

对象
检验其身份的合法性之后才能有权创
建相应的进程对象。
进程对象的属性中包含有与它相
关联对象指针的对象表,包括线程、文件以及内存分
区等。这里,线程、文件以及分区都可以是多于一个
的。
虚存空间管理对象将给进程对象分配相应的地址
空间结构。进程自身不能修改这些数据结构

进程对象可以通过对象表访问其他对象

31
4. NT
进程对象和线程对象
NT
的进程对象和线程对象如图
10.7
所示。
其中,
进程号

线程号
分别表示进程和线程的识别符,
它们在系统中是唯一的。
安全性描述
则指出是谁创建该进程
对象,以及谁可以访问或使用该对象。
进程基本优先级
是为进程中不同线程设置的,而
线程的
动态优先级

静态优先级
则分别指线程在执行过程中的优先
级和线程动态优先级的下限。
线程上下文
指相关寄存器中的值和那些定义线程执行状
态的数据结构。
默认处理器个数
指线程可以同时执行的处理器个数。
最大资源限制指
系统内存量、文件空间大小以及用户进
程可以使用的处理机时间。
32

10.7 Windows NT
s017odnTNwWi
进程
与线程对象描述
33
进程的执行时间
指该进程中所有线程的已执行时间
之和,而
线程的执行时间
则是线程在用户态和核心态
两种执行模式下占有处理机的时间之和。
I/O
计数器

虚存操作计数器
分别记录进程中各线
程对不同类型的
I/O
设备以及虚存进行操作的变量。
进程的断点
则提供不同进程之间进行通信的通道。
线程的异步调用
标识指出该线程是否在进行异步过
程调用。
线程的挂起数
表示该线程未被恢复的挂起次
数。
线程访问控制
允许该线程暂时访问其他进程。
线程的结束断点
也是为进程间通信预备的通道。进
程管理程序可通过该通道控制线程结束。
进程和线程的结束状态
则分别给出进程和线程终止
的理由。
34
§
10.3
面向对象操作系统的分类
面向对象的操作系统首先是为了
保护公有资源
而开发的。自
20
世纪
80
年代初期第一个面向对象的
操作系统
Hydra
ayHdr
开发成功以来,人们开发出了许多不
同种类的面向对象的操作系统。这些系统具有一个
共同特点,就是无论何种
对象,都可被看作是受保
护的基本单位
。因此,面向对象的系统具有比面向
进程的系统更为广泛的意义,因为进程只是一种类
型的对象,且面向进程的系统只有在系统执行过程
中才对有关资源提供保护。下面,
根据面向对象的
操作系统所提供保护的范围
来对现有面向对象的操
作系统进行一个简单的归类。
35
面向对象的操作系统可以分为三类,即
数据受保
护的系统

数据和过程受保护的系统
以及
数据、过程
和处理器受保护的系统

数据受保护的系统指把执行时必需的状态数据和
管理用数据定义为对象加以保护的系统。
这些被保护
的数据可以是进程控制表、设备控制表、页表等。在
数据受保护的系统中,对对象进行操作的过程是另外
定义的。
数据和过程同时受保护的系统指那些对象中包括
数据以及对这些数据进行操作的过程的系统
。不过,
执行这些过程进行有关操作的处理器未包括在对象中。
数据、过程和处理器同时受保护的对象是指那些本身
具有执行能力的对象

36
1.
数据受保护的系统
数据受保护的系统的典型例子是
Hydra

由于加强了数
据保护,
Hydra
将操作系统的功能作为一般用户程序
(
对象
)
来实现。在
Hydra
系统中,
各种状态数据和资源管理数据都
被定义成对象且都具有进行访问控制的权能表。

Hydra
系统中,对象由具有唯一性的对象名、对象类
型以及数据部分和权能表组成。对象名由用户指定,对象
类型除了设备、文件、目录、过程、进程、信号量等之
外,还有用户用来生成新对象类型用的
类型对象

权能表
则是由该对象可以访问的对象名及操作权限组成

尽管在
Hydra
中过程也被看作对象而受到保护,但由
于并不属于某个对象或某个对象类
(

Hydra
的对象中不包
括操作数据的过程
)
,因此,仍把
Hydra
看作只是数据受保
护的系统。
37
2.
数据和过程受保护的系统
数据和过程一体化的对象中,过程是作为对象的
内部过程存在的
。不过,在这样的系统中,
对象仍然
是静态的和被动的,
过程由非对象的处理器执行
。过
程的执行有静态链接执行和动态链接执行两种方法。
特别是动态链接执行涉及到如何动态地进行对象选择
和切换,比起将过程作为单独对象的方法来说要复杂
得多。
将对象和处理器分开考虑的模型被称为

对象线程
模型


这里线程代表处理器,它只拥有状态信息和堆
栈等所必需的最小限度的上下文,操作系统由提供地
址空间、过程的对象以及在该地址空间上执行有关过
程的能动部分线程构成
。在这样的系统中,对象间的
通信靠过程调用或远程过程调用完成。
38
3.
数据、过程和处理器受保护的系统
数据、过程和处理器三者都受保护的系统被称为
动态对象模型
(active object model)
系统
。在这样的系
统中,
对象包括了数据、过程以及执行这些过程的处
理器。对象之间的通信要依靠事先规定的
协议
来进行。
再者,
对象内的处理器除了完成一般操作之外,还负
责管理对象内部的资源

以动态对象为基础,有的系统还在对象中定义

语、进程、并发等控制机制
以提高系统的可靠性。
动态对象模型的最一般的实现方法是在通常的进
程上建立一个面向对象的环境。这样,对象的动态性
质可由进程得到,而对象间的通信则可由进程间的通
信完成。