实时分布式操作系统中共享对象通信模型的实现
摘 要 与消息传递、远程过程调用和共享内存等进程间通信模型相比,在分布式存储多处理器上实现的共享对象模型能更自然、更高效地描述进程间的相互作用.它通过共享对象消除了各结点之间的物理边界,为系统提供了一种透明的分布式处理能力.这样,整个系统(包括硬件和软件)在逻辑上成为一个单系统.该模型已在仪器用弱实时分布式操作系统(IOWRTDOS)的全局共享对象(GSO)层上实现.文中研究了共享对象通信模型,并详细讨论了实现中的关键问题. 关键词 分布式计算系统,实时分布式操作系统,通信模型,线程,对象
1 引 言
80年代中期以来,随着微线工艺技术的不断完善和进展,Moore定律得到广泛证实和应用,低成本、高性能微处理器与先进通信技术的不断出现,计算机系统正经历着一场从中心化系统向分布式系统过渡的革命.分布式计算系统(DCS)由于具有性能价格比高、可靠性好、增量可扩充性强以及满足内在分布式应用需求等优点,自从出现以来取得了迅速的发展[1].但近年来DCS的发展遇到了很大阻力,其中之一是缺乏良好的软件支持环境和程序设计工具.
系统的通信机制是影响DCS可用性与性能的一个重要因素,为了提供高效、方便的通信模型,人们付出了巨大的努力.DCS刚出现时,最直接的一种方法就是采用显式的消息发送与接收[2],但消息传递的通信方法不易被程序员使用,也不利于已有应用软件的移植和重用.为了解决消息传递的缺点,人们提出了远程过程调用(RPC)的概念[3],RPC的基本思想是允许程序像调用本地过程一样调用远程机器上的过程,由于RPC屏蔽了客户和服务器之间直接进行的报文发送和接收,并且还具有语义清楚、简单、容易使用、通信效率高及通用性好等优点,
[4]
因此已广泛地用作DCS的基本通信技术.
以上两种方法的主要缺点是程序员需要过多考虑底层的通信细节而非所需解决的问题本身.80年代中,人们又提出了共享虚拟存储系统(SVM)的概念[5],即在分布存储多计算机上实现物理上分布但逻辑上共享的存储系统. SVM提供了一种与传统的串行程序类似的共享存储器通信模型,具有编程容易、可扩展性好、系统价格低、较好的软件可移植性等特点,因此受到了越来越广泛的重视.但SVM共享的数据粒度为页,容易引起伪共享的产生,具有较差的性能,因此人们又在寻找更高一级抽象的通信模型.
面向对象技术是一种面向数据流,并集模块化、数据抽象、信息隐蔽和消息传递等诸多优点于一体,既适合于系统分析又适合于程序设计的工程技术.它利用“对象”概念,将数据与在其上的算法逻辑操作封装在一起,通过消息传递来完成对象之间的联系.这种技术设计出来的系统具有可靠性高,可维护性好,系统部件再用性强,系统结构灵活,剪裁方便等特点,并且对象具有并行性,因此面向对象技术非常适合于DCS的构造.共享对象模型就是希望在实时分布式操作系统中提供一种更为自然、更为高效的进程间通信模型. 2 IOWRTDOS
现代仪器系统尤其是现代化新型医疗仪器和医疗器械系统正朝着多功能、多参数、智能化、网络化方向发展[6].这种发展趋势迫切需要一种高性能的软、硬件支撑平台.由于这类系统或者计算量大,或者需要推理功能,或者有严格的时间要求,或者需要极高的可靠性,或者物理上是分布的,只有分布式并行处理系统才能满足这种要求.相应的硬件需要相应的软件来支持.操作系统是联系用户与系统硬件的桥梁,是现代仪器系统的关键技术.现有的操作系统如DOS,Windows98和Unix等均不能满足现代中高档仪器系统快速实时处理的需要,因此提供一种支持分布式并行计算、满足实时性能的全新仪器用操作系统有着重大的理论与应用价值,它将极大地促进现代仪器系统的发展. 我们研制的是一个以现代智能仪器系统为应用领域,以高性能的硬件结构为基础,利用先进的操作系统逻辑构造技术,借助于成熟的软件工程原理,能根据用户特定应用需求而自由定制的弱实时分布式操作系统(instrument-oriented weak real-time distributed operating system, 简称IOWRTDOS).其总体结构如图1所示.
图1 IOWRTDOS总体结构
这是一个综合了微内核模型与分层模型的混合结构,主要由3层组成:通用硬件接口(GHI)层,微内核(microkernel)层和全局共享对象(GSO)层.GHI主要完成一些依赖于硬件的功能,如系统引导初始化、处理器调度(线程上下文切换)、中断处理、多处理支持(锁、机间中断等)和致命错误处理等.它屏蔽了硬件细节,为操作系统的其余部分提供了一个理想的机器结构.这样上层的微内核部分与机器硬件完全隔离开来,增强了系统的可移植性.微内核是整个操作系统的核心,主要完成多线程管理、内存管理、任务间通信和中断管理等基本功能.它只包括一些实现机制,尽量不包括分配策略,这样随着时间的推移,策略的改变,微内核部分相对保持稳定,增强了系统的灵活性.GSO通过任务、内存块、信号量等全局共享对象为系统提供了一种透明的分布式处理能力,也为应用程序设计者提供了一种易于使用的、通过共享对象进行通信的分布式程序设计方法. IOWRTDOS采用了现代计算机系统与仪器系统的诸多先进技术,如平面
(flat)内存模型、基于线程的细粒度并发执行模型、完全抢先式内核、确定的
中断响应时间、透明的分布式处理等.由于在总体结构上采用微内核构造技术,在系统分析与设计过程中采用面向对象技术,因此系统具有很好的模块性、可移植性和高性能价格比,并能根据用户需求而任意组合以适应于特定应用领域. 3 共享对象通信模型
3.1 线程
线程是IOWRTDOS的主动实体,除拥有自己的堆栈、寄存器及优先级等少数私有资源外,共享其所属进程的资源.因此线程是比进程更细粒度的并发执行单位.多线程结构就是在单个进程中包含并发执行的多个线程,具有吞吐率高、处理器上下文切换快、程序设计结构清晰等优点.对多CPU系统,每一个线程可以在不同的CPU上运行,多线程结构是应用程序使用硬件并行性的最佳解决方案. 线程可以动态创建或删除,但不具父子关系,即系统中所有线程是平等的,独立地处理各自的请求.线程的执行场点由程序员指定,并且不能迁移.线程通过静态优先级方法与循环轮转方法相结合的完全抢先式调度算法来控制CPU的执行.线程之间共享资源,通过互斥锁(mutex)与信号量(semaphore)等实体来同步,而通过信箱(mailbox)来进行通信. 3.2 对象
在IOWRTDOS中,所有的实体(如内存块、信号量、信箱等)均是作为对象来管理的.每一个对象属于一个特定的类型,一个类型描述了具有相同特征的对象集合.类型同样描述了对象的数据结构与操作,用户只能通过操作来访问对象. IOWRTDOS的对象模型模仿的是文件模型,即具有以下特点:①读写操作前必须先打开;②打开后返回一个ID号,用于与打开对象有关的下一步操作,当使用完对象时,关闭对象;③当两个线程同时打开到一个对象ID号时,它们共享这个对象.
面向对象技术是以消息机制为基础的,如果采用纯对象技术会影响系统性能.因此我们只采用面向对象的一部分思想,对象的管理基本上采用传统的方法,对象之间通过成员函数的调用来相互通信. 3.3 共享对象通信模型
IOWRTDOS采用单任务多线程并发执行模型,即单个应用程序可以划分为几个独立的任务,每个处理器结点上分配一个任务.但每个任务可以按照需要创建多个线程,分布在多个处理器上的多个线程相互作用,共同完成某一应用.线程之间通过共享的对象进行通信,这些对象可以是局部或全局的.局部对象只能由本地结点上的线程访问,一个结点上所有局部对象形成了一个局部对象空间.全局对象可以被任意结点上的线程访问,系统内所有的全局对象形成了一个全局对象空间.对象是局部的还是全局的由程序设计者决定,进程可以访问任意的共享对象,而不管这些线程与对象驻留在哪儿,由IOWRTDOS完成对象的定位与管理.通过线程与这些对象的相互作用形成了一个共享对象通信模型(见图2),为程序设计者提供了一个统一的逻辑视图.
图2 共享对象通信模型
4 共享对象通信模型的实现
仪器系统有着严格的时间要求,IOWRTDOS的一个主要目标是保证系统的实时性能.但如何为应用程序设计者提供一个易于使用的环境也是我们的目标之一.因此我们在IOWRTDOS的全局共享对象(GSO)层上实现了共享对象通信模型. 4.1 内部结构
GSO层主要由对象管理器(OM)、虚拟过程接口(VPI)、本地过程调用(LPC)、远程过程调用(RPC)等模块组成,它们的关系如图3所示.
图3 全局共享对象层内部结构
OM模块主要完成对象的创建、删除、定位等管理工作,并为系统提供名字服务.VPI主要是给本地过程调用与远程过程调用提供一个统一的接口,使得系统在逻辑上成为一个整体.RPC由两部分组成,存根(Stub)部分主要完成参数或结果的消息包装.远程传输子系统(RTS)主要是在结点之间可靠地传递消息. 4.2 对象命名与定位
IOWRTDOS中的每一个对象均有两个名字:用户提供的符号名与系统提供的唯一ID号.通过名字服务,就可以从对象的符号名得到对象ID号.对象ID号包含有对象类型、结点号等信息,因此通过ID号就能快速定位对象.IOWRTDOS采用分布式名字服务方案,在每一个结点上都维护两个表格:局部对象表和全局对象表.局部对象表包含所有在该结点上创建的对象(不论是局部的还是全局的),全局对象表包含系统中所有的全局对象.因为对象表需要频繁地访问,这种组织方法可以加快名字服务的速度,并且使系统具有一定的容错能力,但相应地也增加了额外的通信开销.为了维护数据的一致性,在全局对象创建或删除时,必须向系统广播消息,以使全局对象表保持一致. 4.3 对象访问
在IOWRTDOS中,不管是本地对象还是远程对象,都通过统一的接口来访问.VPI的一个主要作用是为局部对象访问和远程对象访问提供一个统一的接口,使程序员根本不用关心对象的分布,即达到一种全局范围内的位置透明性.VPI引进了一定的额外开销.但为了提供更方便的系统支持环境,这一点开销还是值得的.
相关推荐: