(计算机软件与理论专业论文)操作系统核心的设计与实现使用面向对象的方法.pdf_第1页
(计算机软件与理论专业论文)操作系统核心的设计与实现使用面向对象的方法.pdf_第2页
(计算机软件与理论专业论文)操作系统核心的设计与实现使用面向对象的方法.pdf_第3页
(计算机软件与理论专业论文)操作系统核心的设计与实现使用面向对象的方法.pdf_第4页
(计算机软件与理论专业论文)操作系统核心的设计与实现使用面向对象的方法.pdf_第5页
已阅读5页,还剩63页未读 继续免费阅读

(计算机软件与理论专业论文)操作系统核心的设计与实现使用面向对象的方法.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统软件应该灵活而有效。而且,操作系统应该在不牺牲这两个特点的 情况下随着应用的变化而变化。这些变化包括硬件技术的改进以及用户要求的变 化。要适应硬件的变化需要可移植性,例如处理器数量的变化。同时,操作系统 应该能根据用户的要求进行扩展,例如以前的对图形化的用户界面和分布式系统 的支持。 重要的不仅仅是可移植性和扩展性,他们之间的交互也可能需要折衷。例如, 如果现有的机制要与新的机制共存,扩展性可能就会破坏性能。 面向对象的模式逐渐的变成用来解决操作系统面临的这类问题的一个很好 的工具。面向对象的编程可以支持通用接口和代码的共享、可重用和扩展的软件, 因为函数可以通过接受不同的参数而实现不同的功能。 其实,许多现代操作系统中都使用了面向对象的技术。例如,系统中程序的 运行时动态链接技术。这种技术中程序的链接不是静态的,而是在运行时根据需 要链接相应的模块。这与面向对象技术中的可拆卸技术是一致的。我们可以把程 序的各个模块看成对象,需要那个对象,我们就链接那个对象。尽管u n i x 和 l i n u x 是用c 实现的,它们也使用了很多面向对象的思想。厂、 本论文首先讨论了面向对象方法解决操作系统移植性,扩展性问题的可行 性,然后详细描述了如何用面向对象的编程和设计技术来设计一个操作系统核 心。作者实现了其中的进程管理部分。对实验系统的性能,移植性和扩展性进行 了评估,证明了用面向对象的方式构建,并使用面向对象编程语言编写的操作系 统在性能下降不是很大的情况下拥有很好的移植性,扩展性和维护性。 、 关键词:操作系统,核心、面向对象 a b s t r a c t o p e r a t i n gs y s t e m s o f t w a r es h o u l db ef l e x i b l e a n de f f i c i e n t f u r t h e r m o r e ,a n o d c r a t i n gs y s t e ms h o u l d s u r v i v eal i f e t i m eo fc h a n g ew i t h o u ts a c r i f i c i n ge i t h e ro f t h e s ep r o p e r t i e s t h e s ec h a n g e si n c l u d eb o t ha d v a n c e si nh a r d w a r et e c h n o l o g ya n d c h a n g i n gd e m a n d s f r o mu s e r s k e e p i n gp a c ew i t ha d v a n c e si nh a r d w a r et e c h n o l o g y m a k e sp o r t a b i l i t yn e c e s s a r y , f o re x a m p l e ,t r a n s p l a n t i n ga ne x i s t i n go p e r a t i n gs y s t e m f r o ms i n g l ep r o c e s s o rt om u l t i p l ep r o c e s s o r s a l s o ,a no p e r a t i n gs y s t e ms h o u l db e e x t e n s i b l ee n o u g ht om e e tt h ec h a n g i n gr e q u i r e m e n t sf r o mu s e r s i nt h ep a s tt h e s e d e m a n d si n c l u d e dt h es u p p o r tf o rg r a p h i c a lu s e ri n t e r f a c e sa n dd i s t r i b u t e ds y s t e m s n o t o n l ya r er e q u i r e m e n t so f p o r t a b i l i t ya n de x t e n s i b i l i t yi m p o r t a n t ,b u t a l s ot h e i r i n t e r a c t i o nc a na c q u i r ei m p o r t a n tt r a d e o f f s f o re x a m p l e ,e x t e n s i o n sm a yi m p a i r p e r f o r m a n c ei f e x i s t i n g m e c h a n i s m sa r ea l e r t e dt oc o e x i s tw i t hn e wm e c h a n i s m s o b j e c t - o r i e n t e dp a r a d i g m h a sb e c o m eo n eu s e f u lt o o lt os o l v et h i sk i n do f p r o b l e m s o b j e c t - o r i e n t e dp r o g r a m m i n gc a ns u p p o r t t h es h a r i n go fc o m m o ni n t e r f a c e a n dc o d e ,i n c r e m e n t a le x t e n s i b i l i t ya n dt h ed e v e l o p m e n to fr e u s a b l ea n de x t e n s i b l e s o f t w a r eb y a l l o w i n gf u n c t i o n s t ot a k ed i f f e r e n to b j e c t sa sa r g u m e n t s n o w a d a y s ,w ew i t n e s s e dv a r i o u so b j e c t o r i e n t e dt e c h n o l o g i e si nm a n ym o d e m o p e r a t i n gs y s t e m s ,f o re x a m p l e ,t h ed y n a m i cl i n k i n gd u r i n gt h er u n t i m eo f a p r o c e s s t h em o d u l e so fap r o c e s sa r en o tl i n k e db e f o r ei tm n s ,a n di tc a nc h o o s ew h i c h m o d u l e st ol i n kw h e ni ti sr u n n i n g t h i st e c h n i q u em a t c h e st h er e c o n s t r u c t i o ni n o b j e c t - o r i e n t e dp a r a d i g m a n da l t h o u g hu n i xa n dl i n u xa r ei m p l e m e n t e dw i t hc l a n g u a g e ,t h e ya l s oa d o p t e dm a n yo b j e c t o r i e n t e dt e c h n i q u e s ,e s p e c i a l l yi nt h ef i l e s y s t e ma n d n e t w o r k s y s t e m s i nt h i sp a p e r , w ef i r s td i s c u s s e dt h ep r o b l e m se n c o u n t e r e db ym o d e m o p e r a t i n g s y s t e md e s i g n e r sa n dt h ea d v a n t a g e so f u s i n go b j e c t o r i e n t e dt e c h n i q u e st od e s i g na n d i n l p l e m e n to p e r a t i n gs y s t e m s t h e nw ep r e s e n t e d i nd e t a i lt h ep r o c e s so f d e s i g n i n ga n o b j e c t o r i e n t e do p e r a t i n gs y s t e m t h ep r o c e s sm a n a g e m e n tw a si m p l e m e n t e da n dt h e p e r f o r m a n c eo f c o n t e x ts w i t c h i n gw a st e s t e d t h es y s t e mp e r f o r m a n c e ,p o r t a b i l i t ya n d t h e e x t e n s i b i l i t yw e r ee v a l u a t e d i tw a sp r o v e dt h a tw i t h o u to b v i o u ss a c r i f i c eo f s y s t e mp e r f o r m a n c e ,o b j e c t e d - o r i e n t e dt e c h n o l o g i e sa r ea b l et os i g n i f i c a n t l yi n c r e a s e t h e p o r t a b i l i t y , e x t e n s i b i l i t ya n dm a i n t e n a n c eo f t h eo p e r a t i n gs y s t e m s k e yw o r d s :o p e r a t i n gs y s t e m ,k e r n e l ,o b j e c t - o r i e n t e d - 独创性声明 本人声明所里交的学位论文是本人在导师指导下进行的研究工作 及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方 外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为 获得电子科技大学或其它教育机构的学位或证书而使用过的材料。与 我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的 说明并表示谢意。 签名:垒重垫日期:御 年;月了日 关于沦文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘, 允许论文被查阕和借阅。本人授权电子科技大学可以将学位论文的全 部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描 等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:圭重蒸导师签名: 日期:硎年月r 日 蔓二兰! ! 童 _ _ 一一。 第一章引言 操作系统软件应该灵活而有效。而且,操作系统应该在不牺牲这两个特点的 情况下随着应用的变化而变化。这些变化包括硬件技术的改进以及用户要求的变 化。要适应硬件的变化需要可移植性,例如多处理器。如果个操作系统的抽象 和接口在一系列的硬件平台上是一致的,计算机使用者可以只对程序做一点点改 进就使用这些新的硬件。同时,操作系统应该能根据用户的要求的变化进行扩展, 例如以前的对图形化的用户界面和分布式系统的支持。系统设计者通常不能预料 这些变化和要求。但是,他们可以努力的设计可扩展的系统,使系统能适应慢速 的变化。 重要的不仅仅是可移植性和扩展性,他们之间的交互也可能需要相互妥协。 例如,性能的改进依赖于模块的相互协作性,可移植性就不得不为了效率而做出 牺牲。同样的,如果现有的机制要与新的机制共存,扩展性可能就会破坏性能。 面向对象的模式逐渐的变成用来解决操作系统面临的这类问题的一个很好 的工具【1 】。面向对象的编程可以支持通用接口和代码的共享、可重用和扩展的 软件,因为函数可以通过接受不同的参数而实现不同的功能;面向对象技术中的 可拆卸技术,使我们的系统能具有很好的灵活性和良好的扩展性。 其实,许多现代操作系统中都使用了面向对象的技术。例如,系统中程序的 运行时动态链接技术。使用这种技术时程序的链接不是静态的,而是在运行时根 据需要链接相应的模块。这与面向对象技术中的可拆卸技术是一致的。我们可以 把程序的各个模块看成对象,需要那个对象,我们就链接那个对象 2 】。尽管 u n i x l i n u x 是用c 实现的,它们也用到了很多面向对象的思想。l i n u x 的一个 重要特点就是通过虚拟文件系统( v f s ) 支持多种逻辑文件系统如e x t 2 、m i n i x 、 m s d o s 等。v f s 是各种逻辑文件系统的上层接口。用面向对象的观点来分析, v f s 可被视为一个抽象基类,而诸如e x t 2 、m i n u x 、m s d o s 等则是由这个基 类派生出来的子类。所以如果我们要编一个新的文件系统,实际就是从v f s 派 生一个子类,并实现其中的标准接口和新文件系统定义的特殊接口【3 。 本论文描述了一个用面向对象的编程和设计技术来实现的操作系统。并对实 验系统的性能,维护性,移植性和扩展性进行了评估,证明了用面向对象的方式 构建,并使用面向对象编程语言编写的操作系统在性能下降不是很大的情况下拥 有很好的移植性,扩展性和维护性。 本文的内容安排如下。第二章描述了操作系统的特征,讨论了以前的设计技 术以及用这些技术实现的系统。第三章分析面向对象技术的优点,以及这种方式 1 电子科技大学硕士学位论文 构建的操作系统的潜在的优点。第四章到第五章详细描述了实验系统0 3 s ( o b j e c t - o r i e n t e do p e r a t i n gs y s t e m ) 系统的设计和实现,尤其是面向对象的技术 使用到操作系统设计与实现中的优势。最后第六章总结了本文的工作,并为下一 步的改进提出了新的思路。 一2 一一簦三苎塑堡至竺一 第二章操作系统 2 1 操作系统特征 通常,操作系统是用来给程序员提供一个简化了的管理计算机资源的抽象的 接口。计算机资源包括处理器,存储器,输入输出设备。操作系统既要高效地 管理控制这些资源,又必须采用合适的算法策略完成它们的分配和回收。访问和 控制设备的原子操作是操作系统对计算机资源的抽象结果。程序员在编写需要操 作系统服务的程序时就调用相应的原子操作。原子操作的集合被称为操作系统的 应用接口。使用了操作系统的原予操作的程序被称作应用程序或者简称应用。操 作系统提供的应用接i z l 应有尽有,但是通常都包括有支持文件,设备输入输出, 进程的产生与删除,内存的分配与回收。 操作系统的底层资源管理包括:移动磁盘驱动器的磁头,处理设备来的中断, 向网络设备写数据等等。即使这些功能有直接的硬件设备支持,但是也需要操作 系统来监督这类资源管理功能的启动和结束。操作系统为此而提供决策策略包 括:应用程序的优先级的决定,每个进程分配内存大小和时间的长短,外部存储 器上的数据文件的访问。 大部分操作系统提供了一个间隔以分离应用程序与系统程序的功能与数据, 同时也用来防止恶意的或者错误的应用程序破坏操作系统提供的服务。这个间隔 被叫做系统应用界限。这个界限通过操作系统的应用接口封装了系统内部数据, 且原子操作是唯能够跨越这个界限的。根据不同的计算机体系结构或者操作系 统的要求,这个界限可以用硬件机制来加强,或者就仅仅是一个编程的规范。如 果仅仅是一个编程的规范的话,蓄意的破坏就很容易跨越这个界限。 操作系统的应用接口允许应用程序对自己所请求的操作延迟绑定。如果没有 延迟绑定,应用程序将不得不与操作系统链接在一起,或者在它们的地址空间中 包含系统的应用接口。因此延迟绑定允许在不修改应用程序的情况下修改操作系 统【3 】。 大部分操作系统通过系统中的入口点间接提供应用接口。入口点的参数包括 需要进行的操作和相应的参数。入口点分解操作和参数,检查参数的正确性,调 用相应的操作系统函数执行。传统操作系统通过一个预定的原子操作集提供操作 的固定集合。在u n i x 系统v 中有6 4 个原子操作。使用这些原子操作的用户程 序独立于这些应用的实现与操作系统的实现。操作系统的新实现通常为了向后兼 容性而使用旧版操作系统提供的接口。但是,随着硬件的改进和应用程序的要求 3 一 皇型堇盔堂塑主兰堡鲨奎 一 的变化,应用接口也需要改变。譬如u n i x ,从最初的版本到现在,已经添加了 很多的原子操作了。 避免应用程序的破坏只是保护系统数据的一部分。操作系统软件也需要考虑 自身运行过程中引起的数据不一致问题。例如,多个线程在执行操作系统的代码, 如果不同步的话,就可能使共享数据不一致。中断调用也可能会引起数据的不 致。中断可能在系统运行的任何时间发生。如果操作系统在修改系统临界数据时 接收到中断,中断处理程序可能也需要访问那个共享数据。如果被中断的程序还 没有修改完数据,中断处理程序就会取用不一致的数据。更坏的情况是,中断处 理程序也需要修改这个数据,就会使问题更复杂,因为数据的不一致越来越严重 了。 这种防止并发进程错误地修改共享数据的机制称为互斥。在单处理器系统 中,保护数据不在中断时被破坏的方法是关中断。 2 1 2 操作系统类型 早期的计算机上没有我们今天定义的操作系统,而且也不需要操作系统。使 用计算机的程序员有全部的权限来控制计算机。没有使应用程序不能访问设备和 指定内存的保护机制。这些计算机上的应用程序顺序执行。每个都会重新初始化 计算机,读取输入,执行计算并且产生输出。这样的程序既是一个操作系统也是 一个应用程序。许多嵌入式系统的操作系统仍然是这样运行的。 没有操作系统时,程序员要编写所有的管理计算机设备的代码。这包括读取 磁带,产生结果并发送到计算机或者送回到磁带。嵌入式系统通常有更复杂的设 备,用来输入的传感器和需要更新的输出。这些设备管理函数很难写,而且对于 所有要使用这个计算机的应用都需要重新写一遍。对于一个嵌入式操作系统,这 并不难,因为始终只有一个应用需要写。但对于个有很多应用程序的通用计算 机,应该可以建立设备控制例程库,来避免应用程序每次都重写这些功能。这些 库可以被称为初级操作系统。 对于一个很多用户共享的计算机,每个用户都可能有很多的应用程序要运 行,如果应用程序不需要执行所有的初始化和所需的设备管理的话,应用程序和 用户都可节约很多时间。解决办法就是编写监控进程来初始化计算机,每次装载 和运行一个应用程序。当一个应用程序终止的时候,监控进程取得控制权同时也 为下一个应用程序初始化系统。监控进程也为所有的应用处理设备i o 请求:定 位通用的0 例程,使他们常驻内存,允许应用程序访问。这些例程定义了这类 操作系统的应用接口。 4 - 4 釜三翌塑缝墨篓一 现代计算机体系结构提供了操作系统需要的保护机制。这些机制包括处理器 的特权执行级和内存保护机制。它们防止非特权应用程序访问操作系统数据和程 序所占用的内存区域。操作系统运行在最高特权级,允许访问系统数据和程序。 应用程序运行在最低特权级,不能访问系统数据和程序。而且,最低特权级模式 不允许某些可能会破坏系统安全的处理器指令的运行,比如,设置特权级指令。 最低特权级通常也不能直接访问资源。不允许直接访问系统内存和资源加强了系 统硬件的封装。在这种保护操作系统中,原子操作是通用特殊的系统调用或者陷 阱指令来实现的。这些指令提高处理器的特权级,同时也跳到操作系统在内存中 的某个入口点。操作系统入口点是一些能验证参数并执行所要求服务的函数。一 旦系统服务完成,操作系统恢复处理特权级,然后从系统调用或者陷阱指令转出, 恢复应用程序的执行。 多道程序操作系统允许多个应用程序同时在内存中存在。一个进程在等待 i o 完成的时候,处理器被分配给另外的进程使用,以此达到共享处理器的目的。 通过这种i 0 与计算并行的方式,可以大大提高系统的效率。一个典型的多道程 序操作系统就是分时操作系统,在这样的系统中,一个进程如果在规定的时间片 内没有完成也没有阻塞在i 0 请求上时,将被中断执行,另一个进程将会被挑选 并且执行。多道程序操作系统可以在多个进程间共享操作系统资源( 主要是内 存) 。这种共享通常通过操作系统可以在多个地址空间中切换来实现。每个应用 程序有自己的地址空间,但是它不能访问别人的地址空间内的数据和函数。多地 址空间可以有很多种方式实现,包括基地址间隔寄存器,段和虚拟内存 4 】。 低价微处理器的盛行使系统设计者可以在很多的小的廉价的硬件上面构筑 高性能的计算机系统,而不必使用高性能的处理器。分布式操作系统就是这样的 计算系统。每个计算机,或者节点都通过可以通信的网络连接到别的节点上。分 布式操作系统屏蔽了硬件细节,提供给应用程序一个计算机,并且使应用程序可 以通过统一的机制访问分布式系统中所有的资源【5 】。许多的分布式系统在应用 实体间通过消息共享信息。操作系统入口分布在系统中不同的节点上。每个入口 有一个全局的标识符。消息可以送给任意节点上的入口。操作系统服务就由这些 入口提供。 总之,从嵌入式系统到简单的i 0 例程库,到多道程序系统一直到分布式系 统,都有操作系统的影子。 2 。3 操作系统设计技术 许多设计方法都是将操作系统分解成带有接口的小片,或者说模块。w e b s t e 。 - 5 - 皇三型堇奎堂堡主堂垡笙苎 一 _ 一 字典定义模块为:“任何被设计来可以任意安排和组合的一组单元” 6 】。模 块化是一种已经被接受的方法。模块化主要考虑模块的正确分解以及模块间的信 息交换问题。 下面几节按时间顺序讨论传统的分解和模块化操作系统设计方法。这些技术 都是应硬件技术提高和软件使用者的要求变化而产生的。 2 - 3 1 不可中断的监控程序 最早的设计技术是使用一个不可中断的监控程序。实际上,这种类型的系统, 就是我们所说的批处理系统。 监控程序完成系统的初始化,进程调度,以及资源的分配与回收。应用程序 在三种情况下返回到系统:由设备需要服务引起的中断,应用程序需要操作系统 服务或者应用程序的结束。一旦到应用程序的调用结束,操作系统就响应中断或 者请求( 或者删除结束的进程) ,同时恢复或者调用另外的进程执行。 监控程序因为只有一个执行操作系统代码的控制流,所以很好的保证了互斥 访问。当这个线程在执行时,中断被禁止了,只有显式的要求控制流的切换才有 用。这种系统的实现很简单,因为不用考虑互斥和数据的并发访问。这种设计的 问题在于扩展性。中断和应用程序要求系统服务的频率与系统中应用程序的数目 成正比。系统服务的增多,会使执行系统服务例程的时间增加,就会使中断屏蔽 的时间加长。由此将会引起丢失的中断数目增加,或者中断延迟时间增长,因此 将减少i o 设备的吞吐量。 监控程序技术防止了系统数据被破坏,同时也牺牲了系统的可扩展性和性 能。从软件工程的角度来看,这个方法还有一些别的问题。操作系统所有的功能 都放在一个模块里面,维护起来将非常麻烦。系统内部没有做进一步划分,所以 不能分别的开发和维护。这影响了可移植性和扩展性。这个问题可以通过进一步 分解监控程序来改善。 2 3 2 棱心的出现 以核心的方式构建操作系统是为解决不可中断的监控程序模式的扩展性和 未完全利用设备资源两个问题而提出来的。它进步分解了操作系统。这个模型 将操作系统中所有的实体都看作进程,或者执行的线程,例如:应用程序进程, 中断处理进程,设备驱动程序。核心是一个进程间通信的模块。在核心模块中, 操作系统是一组并发执行的向核心提出请求的程序。应用程序被看作一组通过核 心向操作系统提出服务请求的程序。核心提供了很少的组基本程序以支持进程 间通信,进程管理和中断处理。高层的操作系统服务是在核心周围的组程序实 一6 笙三主塑堡墨竺一 ,一。 现的。核心负责调度进程以及找到相应的中断处理程序。在核心执行的时候中断 是关闭的,由于大部分操作系统功能由核心外的进程完成,中断在大部分时间都 是打开的,所以设备的性能有所提高。 核心的基本功能只包括处理进程间通信和指引正确的中断服务程序。大一些 的核心应该能够产生和删除进程,提供内存管理,实现应用接口以及一些其它的 服务。随着核心体积的增加,其实现和维护也越来越难。 核心模型的最大贡献是引入了协作且并发执行的进程模型。相对于监控程序 模式,并发使核心模式的操作系统大大增强。将操作系统划分成一组相互协作通 信的进程增加了其模块性同时也提高了其可移植性和扩展性。但是要确定那部分 工作由那个进程负责以及划分核心的问题仍然存在。但是,现代的大部分现代操 作系统都构建在核心模式上 7 ,8 ,9 。 2 3 3 分层式操作系统 分层式操作系统试图将操作系统按照容易理解的层次方式划分,例如 t h e 1 0 和后来的v e n u s h 。操作系统将进程和功能划分成层次,以相继为上 层提供抽象。越高层的功能越多,而且每层仅仅使用其直接下层提供的服务。通 常,硬件是最低一层,应用接口在最高层。 许多旱期的操作系统将进程划分成不同的层次来执行系统功能。h a b e r r n a n n f l o n 和c o o p r i d e r 认为这种方式使进程和它们的逻辑行为无法区分 1 2 】。它们要 求系统按照功能层次来划分。在他们的设计中,层次划分是为了体现系统的功能。 - 7 皇至型塾奎堂堡主堂堡笙苎 一一 系统中不同的进程激活这些功能,但进程独立于不同的层次。最底层对应处理器 的硬件指令。高层功能可以使用底层提供的功能。系统中的并发进程可以访问层 次结构中的不同层上的功能。 分层思想大大的帮助了系统实现、调试以及测试。分层思想加强了可移植性; 如果底层屏蔽了硬件,在将操作系统移植到不同硬件上的时候只需要改变这些层 次。高层的实现者可以忽略底层的实现,而直接使用它们提供的功能。这使维护 变的特别容易。例如,一些系统将最底层看作是一个虚拟机,可以在上面实现自 己的功能。这使得移植虚拟机到不同的硬件上变得很容易。在虚拟机这类操作系 统中虚拟机也可以被看作真正的硬件【1 3 。这种机制使得多个虚拟计算机可以构 建在同一物理计算机上面。操作系统软件可以在任意一个虚拟计算机上面开发和 调试,而且,也可以不经修改的在物理计算机上面执行。 编写分层式操作系统内核的最大问题在于决定一个进程或者功能所属的层 次。因为每层只能依赖其直接下层提供的功能,设计变的异常麻烦。例如,在虚 拟内存系统中,磁盘设备驱动程序应该由虚拟内存分页机制以下的层次提供,因 为内存分页机制需要用磁盘作为存储设备。但是,磁盘驱动器用来作为i 0 缓冲 的内存确是与虚拟内存管理协作的。这种循环的依赖关系在划分操作系统层次的 时候是很难处理的问题。 分层系统的另外一个问题就是性能问题。如果分层系统的实现是按照要求, 每层只能使用直接下层的功能的话,系统的性能会因为一个请求可能要经过多层 才能到达底层而受到影响。因此,更好的办法是可以直接访问自己以下的所有层 次的功能。 层次式操作系统的最大问题可能是因为它提供的抽象划分是很粗糙的。但 是,分层思想与许多其它的结构技术没有多大的相关性。 2 3 4 消息传递操作系统 消息传递操作系统是建立在核心模式之上的。他们试图进一步分解操作系 统。消息传递系统通过显式的调用s e n d 和r e c e i v e 在并发执行的进程之间交换信 息。每个进程( 或者进程集) 都被看作向客户进程提供服务的服务器进程。名字 服务器将服务符号标志转换成提供服务的服务器的标志。 每个消息含有客户请求和相关的参数。在一个消息传递系统中,所有的通信 和计算都是通过客户与服务器之间显式的消息传递来完成的。消息被发送给服务 器,然后服务器送出答复。消息传递可以是同步的,这时发送者等到回复才继续 执行;也可以是异步的,发送者发送完就继续执行,可以在任何时候等待消息的 - 8 笙三雯璺堡墨笙一 回复。 应用程序的进程通常只要求服务而不提供服务。在消息传递系统中,核心被 看作一个服务器。可以由很多进程组成,每个进程完成系统管理功能的一部分, 例如处理中断、产生和删除进程。当迸程需要核心服务的时候,就向核心发送一 个请求,然后同步或者异步等待回复,如同在向一个一般的进程请求服务。 消息传递系统有两种形式:一种是将所有的消息接收者直接看作进程或者服 务器,例如系统v f l 4 ,另种是把消息接收者看作服务器的端口,例如m a c h 1 5 。 在一个使用端口的消息传递系统中,服务器进程在需要消息的时候查询特定的端 口。在其它类型的系统中,消息被直接送到目标进程,并且在那个进程下一次执 行“无名”接收原语的时候接受。无名的意思是指进程只是简单的将接收到的消 息放进一个队列中。在一个基于端口的系统中,服务器进程可以选择接受消息的 端口,因此可以灵活的指定消息的优先级。 消息传递系统可以用于分布式环境。需要提供的唯一的支持就是服务器的识 别以使消息的发送和接受不限于机器。这种方式下,执行在本机的进程向另外的 机器请求服务时,就像在向本机器请求服务:送出消息,等待答复。 将操作系统划分成一组服务器增加了系统的移植性和维护性。因为在遇到新 体系结构的时候只有依赖于机器具体细节的服务器需要重新编写。这种系统的一 个缺点是消息的发送与接受付出的代价超过一个过程调用。因为每个送出的消息 都可能是跨机器的,参数就需要拷贝而不象在本机一样可以直接指向相应的堆 栈。同样的,发送者与接受者之间的同步也增加了额外的负担,例如,发送与接 受消息可能会引起一次上下文切换。这些性能问题通常会使底层抽象变得低效。 这主要由消息传递系统中的两个实体引起的:模型中的高层服务器和传统过程调 用引起的低层例程的模块。从维护的观点来看,这种不一致性是不可取的。例如, 提供内存分配的服务器可能需要更新当前进程的页表。对于可移植性和一致性, 可能要求每个页表由不同的服务器管理,然后要求内存分配服务器给页表服务器 发送请求更新。当移植到一台新机器时,只有页表服务器需要重新编写。存在的 一个问题是,内存分配服务器可能需要频繁得向页表服务器发送请求。因为它们 部是核心的基本组成部分,页表服务器和内存分配服务器很可能存在于同样的地 址空间。多次的消息传送和接受可能要高于直接要求一个进程来更新页表。 许多的系统设计者已经为减少消息发送代价做出了很大的努力。共享内存可 以减小参数拷贝的代价【1 6 】。用一个进程代替多个进程执行可以减少进程切换的 代价。因为商层抽象很容易向低层抽象发送多个请求,低层抽象接收到的请求通 常比高层抽象多。因此,构建一个复杂的用来处理不容易实现,效率也不高的底 9 皇至型堇丕堂堡主堂垡笙塞 一一 一一 一 层事件的高层机制是不可取的:而应该构建一个能高效的处理底层抽象的简单机 制,它同时可以容易的扩展到高层抽象。这使得我们在构建整个系统的过程中可 以使用一个统一的模式。 2 3 5 基于对象的操作系统的出现 基于对象的方法设计实现操作系统,是用一组相互通信和联系的对象来代替 核心模式中的相互通信和并发执行的进程。每个对象代表了系统中的一个组件。 对象可以代表进程,内存区域,通信信道,设备和其他很多操作系统抽象的东西。 每个对象为系统中其它对象提供了一组操作。这些操作决定了对象的行为以及和 其它对象的接口。在这种模式中,对象通过这些接口向别的对象发送消息。这些 消息与消息传递系统中的消息有些相似。两者的主要区别在于发送消息给对象是 同步的而且不需要显式的接受。 基于对象系统中封装与软件工程中的模块化编程和数据封装很相似。一个对 象只要拥有另外一个对象的指针就可以给它发送消息。与消息传递系统中的服务 器一样,对象可以驻扎在分布式系统中的任意一个节点上。基于对象的操作系统 有:c l o u d s 1 7 ,a m o e b a 1 8 以及c h o r u s 1 9 等等。 基于对象的方法比消息传递方法构建的操作系统更象数据驱动。他们将操作 系统的抽象分成很多模块( 对象) ,每个模块都有一个定义得很好的功能和接口。 对象通过引用或者许可h 正( c a p a b i l i t y ) 来访问系统中别的对象。引用定义了对象对 被操作对象的操作权限。引用可以是简单的、没有添加权限的指向别的对象的指 针,也可以如同完全保护的基于许可证系统中一样复杂。在一个基于许可证的系 统中,只有信任的对象可以修改和发送许可证。 基于对象的方法涉及了前面讨论到的几个操作系统的问题。对象集可以用来 抽象硬件,增加系统的可移植性。对象也可以用来表示一个很小的封装以提高系 统的可维护性,同时保持文档的可理解性。 基于对象的方法同消息传递方法一样,问题在于效率。在基于对象的操作系 统中,效率是以一个与对象间传递消息的开销有关的函数。基于对象的操作系统 有很多实现。构建在远程过程调用( r p c ) ,基于对象的消息传递系统有c l o u d s 。 这些系统使用对象消息传递规范来构建消息传递系统的服务器。对象封装服务 器并且对象消息通过自动提供操作码和定义参数类型来构建客户和服务器之间 传递的消息。对象接口提供给客户使用,同时也要定义客户和服务器之间的消息。 但是,这种系统有与消息传递系统一样的问题。 另外就是象s m a l l t a l k 一样的系统c 2 0 】,它不用显式的传送接受交换信息, 1 0 第二章操作系统 而是通过在对象间传递控制线程来实现。在这样的系统中,对象是被动的。消息 传递用传统的过程调用实现。调用进程的控制线程直接进入对象执行操作。这减 少了同步和上下文切换同时也不需要拷贝参数。 实现用多管程封装数据的系统,如p i l o t 也是一种基于对象的操作系统。这 些系统有多个管程,每一个封装一些数据。同对象一样,管程也提供一些操作来 访问别人访问不到的数据。激活一个管程的过程和激活一个普通过程是一样的。 管程的实现只是增强了数据的互斥访问。一个进程激活管程的一个操作只有等到 管程中的所有其它进程退出以后才能进入。管程提供个本地操作来使进程在特 定的情况下离开管程,同时别的进程也可以告诉这个进程特定条件的发生。 基于对象的系统通过将功能分解成很小的有接口的模块( 对象) 来尝试解决 操作系统设计中的问题。如果对象和消息的发送可以很有效,则性能就不是一个 问题。基于对象的系统与消息传递系统一样,问题在于对象通常被设计来实现通 用的算法,因为他们需要给很多应用程序提供要求的接口。通用性可能就会使对 象的性能被牺牲。很显然,一个新对象可以实现来完成特殊的或者优化过的特殊 的服务。但是,对象的通用性很难实现的。因为可能在增加一个新特征到通用对 象的时候,这个特征不能被自动的加到特殊对象中。这就需要一个方式,在对象 可以有效特殊化的情况下,允许最初的对象和后来改过的特殊化的对象共享特 性。 2 4 小结 虽然这里提出了很多重要的概念,但是目前为止提出的技术都没有解决操作 系统面临的问题。单个的不可中断的监控程序方法将所有的功能放7 :- - 个模块中 是明显的行不通的。虽然后来新增的某些技术可以用来进步分解监控程序,但 是也只能使用于小系统,因为所有的进程都竞争的等待着进入系统,所以不能很 好的扩展。 核心模式将操作系统划分成一组并发的相互协作和通信的进程。这种方法将 操作系统划分成一组模块,但是却不能明确内核功能,进程功能以及进程间应该 传递的消息。理论上,在移植系统的时候只有内核需要改动。但实际上,内核本 身比描述的要复杂的多。像内存和设备管理这样的问题使内核设计很复杂而且也 从根本上降低了内核的可移植性。同样的,进程的功能以及通信进程间的消息也 不是特定的。但是内核确实解决了不可中断的监控程序方法中面临的互斥成为瓶 颈的问题。 分层式、消息传递系统试图进一步分解操作系统内核。分层式操作系统通过 一 皇王型垫盔堂堡主堂垡笙塞一 将进程或者功能划分成依次依赖的层次来组建操作系统。但是存在一个主要问题 就是判断一个进程或者功能到底属于哪一层。因为每一层都是依赖于其以下的层 次,需要好好的计划。但是分层是一种高层的构建技术,能够独立于其他技术使 用。 消息传递系统在客户和服务器间显式的使用传送接受来完成通信和计算。 在这样的系统中,核心服务也是通过传送消息和等待回复完成的。但是消息发送 和接受的代价使人难以忍受,因此在设计经常使用的接口时,我们不得不放弃这 种方法。 基于对象的体系结构将系统组织成一组相互协作的对象的网络而不是进程 或者功能的层次。进程只是一种对象;内存,设备以及通信信道都用对象实现。 对象可以解决层次结构中的循环依赖问题,因为对象通信拓扑结构可以是任意 的。如果对象和消息的发送可以是无代价的,基于对象的系统就提供了很好封装 性和模块化。但是这里没有一种允许灵活的特殊化的机制。 本文将来讲述的面向对象的解决办法是建立在基于对象的方法之上的。它使 用面向对象的编程方法给对象增加了一种类机制和操作的动态绑定。它也提供了 在保持相似的对象的共性的时候特殊化对象的机制。最后的系统提供了灵活的抽 象性和封装性。 茎三皇堕塑堕墨箜塑堡墨堡燮一一 第三章面向对象的操作系统概述 3 1 面向对象的原理 下面我们讨论面向对象的四个主要原理:数据封装,数据抽象,多态和继承。 3 1 1 数据封装 通常在个计算机程序中,如果不在进程的外面保存一个状态变量,函数的 多次激活将不会相互影响。这就使软件模块的构建很困难,因为状态变量或者需 要全局的访问或者需要通过参数显式地传递。将变量作为全局变量可能会破坏模 块性,因为任何函数都可以访问它。数据封装技术通过将数据和相关的操作封装 起来增加程序的模块化,维护性以及可靠性。数据封装技术使得函数的两次激活 状态都保持致。状态被保存在封装了的数据中。 c 中的s t a t i c 2 1 限制访问只针对特定的函数。p a s c a l 中的b l o c ks c o o p i n g 2 2 和c 中的s t a t i c f i l es c o p e 将访问限制在一组函数中。后者更可行因为模块化需要 允许一组函数共享一组数据而别的函数却不能访问。队列的入队出队操作,堆栈 的进栈出栈,数据库的增加和查询操作都是一组操作共享一组数据的例子。封装 不仅仅可以提供数据隐藏。例如,管程( m o n i t o r ) j 2 就是一种数据封装,它还提供 同步和对封装数据的互斥访问。 对象是面向对象模式中的数据封装的单元。对象是一个数据以及与数据相关 的操作的封装。数据变量被称作对象的实例变量。操作集中的一个操作被称作对 象接受的消息。激活对象的一个操作称为向该对象发送了一条消息。对象接受的 所有消息被称作事件。 面向对象模式中的消息需要与前面讨论过的消息传递系统中的消息进行区 别。“发送一条消息给一个对象”只是面向对象中一个俗语。这不代表要创建一 个消息然后通过显示的发送和接受原语来实现。在面向对象模式中发送消息是指 对象的一个方法被激活了。因此发送消息给一个对象,会引起对象查询相应的方 法然后激活它。在大部分面向对象的语言中,方法激活都是通过传统的过程调用 实现的。换句话说,消息是对象的接口,而方法是消息的实现。 同其他数据封装方法一样,对象保持自己的状态,消息发送激活方法。状态 保存在对象的实例变量中。理想情况下,对象方法是系统中其它对象可以访问它 的状态以及在它上面执行操作的唯一途径。对象与其它数据封装技术的区别主要 在个方面。在基于对象的数据封装技术中,每个对象都有一个名字或者引用来 - 1 3 皇王型堇盔兰亟主鲨笙苎 一 _ 一。 一 标志,别的对象通过名字向他发送消息。在其它的数据封装技术中,函数通常是 t r 第一级”的实体。在这些方法中,与对象的实例变量等价的数据被放在一个括 号中显示的传送给函数或者引用。i n n :,用对象编程比其它的基于函数的封装机 制更加像数据驱动的封装。 3 1 2 数据抽象 通过构建模块来简化问题是解决问题的重要方法之一。模块是需要处理的信 息的抽象。这些抽象允许忽略不相关的细节,将焦点集中在问题的本质上。抽象 也允许将无结构的细节隐藏在能轻松处理它们的一个框架的里面。 计算机程序也被看作是模块。计算机程序操作的数据值就是模型中的数据抽 象。在面向对象的模式,所有的值都是对象。许多对象都代表相似的抽象,因此 有相似的或者相同的行为。为了表示相同对象的共性,面向对象模式提出了类的 概念。一个类是一个用来产生一种类型的对象的模板。它为类的实例定义实例变 量、事件以及事件中消息的实现( 方法) 。因此,类就是同时指定接口,封装每个 实例的实现的数据封装。类与c l u 中的簇,p a t hp a s c a l 中的对象记录相似 2 3 1 。 类的方法可以引用类定义的实例变量。这些实例变量在运行的时候与类的某 一个实例绑定。这种类方法和数据的运行时绑定也是面向对象编程与其它数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论