操作系统中构件的连接方法

文档序号:6386182阅读:366来源:国知局
专利名称:操作系统中构件的连接方法
技术领域
本发明属于计算机操作系统构造领域,具体涉及一种操作系统中构件的连接方法。
背景技术
操作系统的构造方式包括,结构化软件开发方法和构件化软件开发方法。采用结构化软件开发方法开发的操作系统中,操作系统的各功能模块主要用高级语言编写(部分与硬件结合紧密或性能要求苛刻的部分采用汇编语言),经编译器编译并经由汇编器汇编成目标文件之后,静态链接成内核映像(或内核的各组成部分)。参考图1,在操作系统模块化方式的链接中,参与链接的模块A和B之间存在紧密不可分的联系——即function_B2的地址在两个目标模块被链接时,即在模块A中填写好,不可更改。模块A执行调用到模块B中函数function_B2时,过程是相当直接的。结构化开发方法中虽然也提供了诸如管程、类程之类的集中式并发控制方案,但系统内的其他互斥与同步操作仍分散于各模块之中没有很好的解决。采用构件化软件开发方法开发的操作系统则是,用事先构造好的操作系统构件,静态/动态组装出操作系统内核及服务。基于构件的操作系统和采用模块化方法开发的操作系统(包括微内核操作系统)之间的最大区别在于,组成系统的主要成分不再是模块,而是一个个可复用的构件。构件与模块相比,其主要不同体现在构件强调可复用性、可替换性,因此其接口与实现必须分离,而模块则无此要求。但是,采用构件化开发和结构化开发一样,在多道程序环境下,构件连接存在并发控制、互斥与同步问题、安全问题、提供分布式、网络环境支持等问题。特别是操作系统领域缺乏公认的构件封装标准、接口标准,给构件组装带来了很大的难度,此外,与应用层软件构件组装相比,操作系统构件的组装需要对运行效率、额外空间开销、共享与隔离、保护与安全等均需予以特殊考虑。

发明内容
本发明克服了上述操作系统构造中无法解决与构件连接特征相关的互斥与同步、安全等问题的不足,提供一种操作系统的构件连接方法,通过在构件和构件之间增加间接层,解决多道程序环境下的并发控制、安全、提供分布式、网络环境支持等问题。
本发明的技术内容一种操作系统中构件的连接方法,步骤包括1、在需要连接的操作系统构件之间插入序程模块和跋程模块,在序程模块和跋程模块中设置构件间的连接处理流程;2、源构件调用目标构件后,序程模块截取该调用,根据构件间的连接需求,执行连接处理流程,完成相应的处理;3、序程模块处理后,将控制交给目标构件,目标构件实现源构件所请求的服务;4、目标构件完成服务后,跋程模块截取返回的目标代码,执行与序程模块相对应的处理,并返回到源构件。
进一步包括将序程模块和跋程模块中的连接处理流程作为通用的预制连接方法函数,放入连接方法表中,由序程模块和跋程模块根据具体连接需要进行调用,调用步骤包括1、源构件调用目标构件后,序程模块截获源构件到目标构件的调用;2、序程模块判断构件间连接的需求,根据实际需求,调用连接方法表中对应的处理流程,完成相应的处理;3、处理后返回到序程模块,如果还有其它需求,则再次重复步骤2,调用连接方法表中的其它相应处理流程,完成相应的处理,再返回,否则转步骤4;4、序程模块将控制交给目标构件;5、目标构件完成源构件所请求的服务之后,执行返回指令;6、跋程模块截获目标构件的返回指令,针对步骤2所作的处理,调用连接方法表中相对应的处理流程,完成相应的处理;7、处理后返回到跋程模块,如果连接需求有多种,继续步骤6,直到所有需求处理完毕,否则转步骤8;8、返回至源构件。
在系统中只保留一个序程模块和跋程模块的模板,连接时,将序程模块和跋程模块复制到内存中,通过填写序程模块和跋程模块中的重定位信息、调用堆栈,在源构件与序程之间、序程与连接方法表中的连接函数之间、序程与和目标构件之间、目标构件与跋程之间、跋程与连接方法表中的连接函数之间以及跋程与源构件之间分别建立链接。
为保证目标构件返回时,进入跋程模块执行,需调整堆栈。调整堆栈的方法是(1)序程模块将调用堆栈中存放的返回地址(即源构件中地址)复制出来,保存;(2)序程模块将跋程模块的起始地址压入调用堆栈;(3)目标构件执行完毕后,在返回时,从堆栈中弹出返回地址;(4)返回地址是跋程的入口,跋程模块开始执行;(5)跋程模块将步骤1中序程模块保存的实际返回地址填回调用堆栈;(6)跋程模块返回时,从堆栈中弹出返回地址,返回到源构件。
为了解决构件的并发处理,连接处理流程包括获取、释放互斥量以支持构件的互斥访问;挂起、恢复构件执行以支持对构件的同步访问。序程模块将互斥量更改为忙状态;跋程模块将互斥量更改为空闲状态;为支持同步访问,序程模块将源构件挂接到目标构件的等待队列上,设置为阻塞状态;跋程模块恢复执行代码,唤醒源构件恢复执行。
为了透明支持跨保护域的构件间连接,进一步包括系统调用和上行调用。其中系统调用处理源构件位于用户态,目标构件处于核心态的情况,具体过程如下(1)用户级构件借助序程模块生成系统调用,陷入核心态;(2)核心态代码完成系统调用后,返回到用户空间,通过信号机制截获系统调用返回数据并加以处理;(3)在系统调用返回后,跋程模块恢复调用现场,将系统结果返回给源构件。
上行调用处理源构件位于核心态,目标构件处于用户态的情况,具体过程如下(1)序程代码为核心态源构件生成信号,并将跋程代码作为信号挂接到目标构件所在的任务上;(2)系统从核心态返回至用户态,目标构件被调度执行;(3)操作系统内核保证目标构件的信号处理程序首先得到执行,最后将控制权交给目标构件。
为了支持实时应用,连接处理流程进一步包括设置最高中断级,恢复最高中断级。在序程模块中调用根据中断级别,设置可编程中断控制器的屏蔽位的操作;在跋程模块中调用重新设置可编程中断控制器中屏蔽位,恢复原来的中断屏蔽的操作。
为了支持分布式应用,所述连接处理流程进一步包括远程消息发送、远程消息接收。在序程模块中调用将源构件的调用信息打包为网络消息,并发送到目标构件所在节点的操作,在跋程模块中调用从网络接收来自目标构件的返回消息,并拆包以本地过程调用的形式返回到源构件的操作。
为了实现操作系统构件的动态加载、卸载与替换,所述连接处理流程包括读写锁操作和引用计数操作。通过读锁操作控制目标构件的“空闲”状态,通过引用计数增一、减一操作,记录目标构件的被使用情况。在序程中调用获取读锁操作及构件引用计数增一操作,在跋程中调用释放读锁操作及构件引用计数减一操作。当构件引用计数为零,处于“空闲”状态时,替换的管理服务获得写锁后,构件可被卸载或替换。
本发明的技术效果在待连接构件之间插入序程模块和跋程模块,通过截取源构件和目标构件之间的交互通道,操纵构件之间的交互过程,提供系统层连接功能,将分散于操作系统各模块中的并发控制、互斥同步、安全保护等问题集中起来进行处理。且不对参与连接的构件的功能代码进行修改,直接操纵构件间调用的重定位信息,完成控制的截获、连接的建立。
操作系统构件的编写者不必编写与并发控制、互斥同步、安全保护等相关的代码,可将更多精力投入到构件本身的功能设计、开发中去。只需在功能划分时将需要特别处理的流程用单独的过程、函数实现,并在构件开发完毕后,于构件接口描述中给出相应的需求即可。构件本身的质量因代码量小,可靠性好,功能单一,易测试、易复用。由于绑定代码中实现的功能是操作系统中不可或缺的代码,采用同一处理的方法并不会带来显著的性能开销和空间开销。
所有与连接特征相关的处理,均可在序程和跋程代码中直接实现,也可作为通用的预制连接方法函数,放入连接方法表中,由序程和跋程代码根据具体连接需要进行调用。本发明可提供统一的并发控制处理例程,如互斥访问和同步访问处理、统一的构件引用计数处理例程、统一的远程过程调用处理例程、或提供统一的中断请求级别处理例程,以及提供检查源构件身份验证措施、提供跨保护域的构件间连接处理,如系统调用、上行调用;提供传统IPC方法的等价实现,包括共享内存、消息队列、信号、套接字、事件等;提供传统网络(分布式)环境下节点间构件间通信支持,用发送消息和接收消息的连接方法,完成异地构件间连接。通过本发明可集中地处理操作系统中并发控制(包括互斥与同步)、跨保护域连接与通信,改进对实时应用的支持、统一处理分布式环境下构件间连接与通信的手段,并通过构件生命期管理,为操作系统结构的动态演化提供了解决方案。


下面结合附图,对本发明/实用新型做出详细描述。
图1为模块化方式的连接示意图;图2为本发明操作系统的构件结构图;图3为本发明连接方法表结构图;图4为本发明连接调用示意图;图5本发明实施例中序程模块的流程示意图;图6为本发明实施例中跋程模块的流程示意图;图7为本发明连接后调用堆栈的示意图;7-a为方法调用之前;7-b为执行调用指令之后;7-c表示序程模块改写返回地址为跋程模块入口q,进入目标方法之后不变;
7-d表示目标方法返回之后,返回地址被弹出,进入跋程模块;7-e表示跋程模块手工压栈原有的返回地址A,模拟原有调用;7-f表示跋程模块返回后,继续执行调用构件的代码。
图8为另一个实施例中序跋模块的流程示意图。
具体实施例方式
根据构件的本质属性建立构件间连接是基于构件的系统的组装过程中最具实质意义的一步。本发明首先对参与组装(连接)的操作系统构件进行规格化,参考图2,在构件提供的接口信息中给出各个接口方法的本质属性及基调,属性信息包括该接口方法是否需要互斥、同步,是否远程调用、系统调用、运行所需要的中断级别;基调是用某种形式编码组织成的字符串,其中给出方法的名称、返回值类型、参数表信息等。本发明不对具体的封装格式作要求,实现时,可以在构件目标代码中或另外的存储文件(如注册表)中保存此类信息。具体可包括1)接口方法的实现情况(假定允许构件部分地实现某接口);2)是否需要互斥访问,即该接口方法是否支持重入;3)是否同步方法,若是,则调用方需要等待该方法结束后才能继续执行;否则,调用方构件可在方法开始执行时继续执行;4)方法执行时,最小中断级设置的参考值;5)接口方法的访问控制设置。
本发明在两个构件之间的连接多了两段预先写好的代码,即序程模块和跋程模块。此外,根据事先给定的需求,连接处理例程中对应的处理流程也在序程模块和跋程模块中事先写好。当源构件调用目标构件后,序程模块截取该调用,根据构件间的连接需求,序程模块执行相应的与连接特征相关的处理,序程模块处理后,将控制交给目标构件,目标构件实现源构件所请求的服务后,跋程模块截取返回的目标代码,执行与序程模块相对的处理,并将目标代码返回给源构件。
序程模块和跋程模块可以包含若干具体的连接处理流程,例如,直接在序程模块中包含增加构件引用计数的代码等。但是,这样做不灵活,不便于扩展。因此,可以把连接处理的逻辑独立出来,用单独的函数实现,制作成连接方法,插入到连接方法表中。序程模块和跋程模块中仅保留对方法表中对应方法的调用痕迹。连接方法表提供了建立构件间连接时要处理问题的统一处理方法。参考图3,例如,针对互斥问题,方法表中提供获取读写锁的过程和释放读写锁的过程,分别由序程模块和跋程模块调用;针对同步问题,分别提供源构件排入等待队列和将源构件中从等待队列移到就绪队列的过程,分别由序程模块和跋程模块调用,连接方法表中包含若干这样的连接方法。连接方法的全集能够满足系统中所有构件间不同连接方式的处理。为了实现分别被序程模块和跋程模块调用,在绑定方法表形成的框架代码中,将重定位信息在二进制级清空(置零),待建立连接时填写。
构件间连接关系可在构造目标系统映像时建立,也可在系统启动时静态建立。参考图4,利用本发明给出的方法建立连接后,源构件A和目标构件B间交互步骤过程如下1、源构件A欲按正常方式调用构件B的接口函数Function_B2。通过绑定过程,构件A中对Function_B2的调用代码被修改成调用序程代码。绑定服务在这个过程中只需要修改源构件A中的符号重定位地址即可。
2、序程被当作Function_B2得到调用,按连接处理流程,作同步绑定、互斥绑定、跨域绑定处理。参考图5,这里以维护构件B的引用计数为例,调用绑定处理例程中的函数inc_ref_count,并将构件B的指针作为参数传递。
3、序程做完相应前期处理之后,直接跳转(注意不是调用指令call)到目标实现函数Function_B2的入口。构件B的函数Function_B2对此过程无觉察。至此实现前期处理的透明。同时,保存堆栈中压入的返回地址loc_call,将堆栈中返回地址修改成跋程的入口。
4、构件B的接口函数Function_B2执行至结束。
构件B的接口函数Function_B2执行返回指令ret,从堆栈中弹出返回地址。实际上开始执行的不是原来构件A中loc_call处的指令,而是跋程代码的指令。
5、跋程代码执行,作与序程相对的处理,参考图6,如释放读写锁、互斥量,将构件B的引用计数减一等。其中各个绑定处理例程的代码也通过绑定处理例程表调用。
6、跋程代码结束,直接跳转到原来保存的loc_call位置,即构件A中执行Funcion_B2调用之后的代码。至此,整个调用过程处理结束。调用方构件A和被调用方构件B都无法感知中间的处理过程。
连接时,将序程模块代码复制到内存中某位置(假定为p)。填写序程代码中的重定位信息(二进制代码中为0的各个部分),与实际被调用的处理流程建立链接,必要时(如本地同步方法调用),可同时复制一份跋程代码到内存中某位置(假定为q)。参考图7,序程代码中首先将调用堆栈中存放的返回地址复制出来,接着将跋程代码的起始地址q压入调用堆栈,跳转到目标构件的方法执行。被调用方法对堆栈调整情况不知情,返回时反弹到跋程代码入口q。跋程代码首先将序程中已经保存的实际返回地址填写回调用堆栈,执行完逻辑后,返回真实的调用构件。跨保护域的调用堆栈情况与在同一保护域内类似,只是所用的堆栈会有细微不同。
本发明只需通过在序程和跋程代码中直接设置与连接特征相关的处理流程,或在连接方法表中预制连接方法函数,即可集中地处理操作系统中并发控制(包括互斥与同步)、跨保护域连接与通信,改进对实时应用的支持、统一处理分布式环境下构件间连接与通信的手段,并通过构件生命期管理,为操作系统结构的动态演化提供了解决方案。
如对互斥访问的处理,在连接方法表中设置两个连接方法函数获取互斥量,释放互斥量,即利用处理器的原子性操作原语,将所传递参数作为互斥量更改为忙或空闲状态。在序程中调用获取互斥量方法,在跋程中调用释放互斥量方法。
如对同步访问的处理,需要实现两个连接方法构件挂起、构件恢复执行。在序程中调用构件挂起代码,将源构件挂接到目标构件的等待队列上,设置为阻塞状态。在跋程中调用构件恢复执行代码唤醒源构件,恢复执行。
如对安全保护的处理,只需要一个连接方法,检查源构件所属用户ID,确定是否可以访问目标构件所提供的服务。此方法由序程调用,跋程中不需要相应处理。
参考图8,本发明还可透明支持跨保护域的构件间连接。具体包括系统调用和上行调用。用户级构件可借助序程生成系统调用,陷入核心态。实现方法是,在序程中将系统调用功能号填写到指定寄存器,执行软件中断指令(如,在IA32体系结构上用INT指令,在ARM体系结构上可用SWI指令)。核心态代码完成系统调用后,返回到用户空间后,可用信号机制截获系统调用返回数据并加以处理。方法是将跋程视为系统调用的发出者,在系统调用返回后,恢复调用现场,将系统结果返回给源构件。上行调用的方向与系统调用相反源构件在核心级,目标构件在用户级。序程需要为源构件生成信号,并将信号挂接到目标构件所在的任务。目标构件所在任务被再次调用运行,信号处理例程首先得到执行,最后将控制权交给目标构件。跋程代码可以为空。
本发明进一步对跨保护域构件间通信予以支持。构件间跨保护域的通信,在传统操作系统中主要用各种IPC方法处理。利用本发明提供的方法,可以透明提供传统IPC的等价实现。例如,支持共享内存(shm)机制,需要增加两个连接方法内存块映射,内存块解除映射。内存块映射操作将所给内存块映射到目标构件地址空间,此操作由序程调用;内存块解除映射操作将所给内存块重新映射到源构件地址空间,此操作由跋程调用。
本发明对实时应用的支持,通过提升目标构件的优先级,确保其执行过程不受无关外部中断干扰的方案实现。具体做法是,增加两个连接处理流程设置最高中断级,恢复最高中断级。序程模块根据目标方法中所给的中断级别,设置PIC(可编程中断控制器)的屏蔽位,屏蔽无关中断;跋程模块重新设置PIC,恢复原来的中断屏蔽设置。
本发明还可直接支持分布式应用。源构件和目标构件本身在实现时无需考虑分布式环境的处理,只需在接口中给出分布式连接需求。提供分布式应用支持,需要实现透明的远程过程调用机制。具体而言,增加两个连接方法远程消息发送、远程消息接收。远程消息发送操作负责将源构件的调用信息打包为网络消息,并发送到目标构件所在节点,此操作由序程调用。远程消息接收操作负责从网络接收来自目标构件的返回消息,并拆包,以本地过程调用的形式返回到源构件。远程消息接收操作由跋程调用。因为实际的服务提供位于远程节点,因此序程中可以去掉对目标构件的过程调用。
本发明进一步支持操作系统结构的动态演化。支持操作系统结构的演化,首先要支持对系统构件生命期的管理。为此,可实现读写锁、引用计数连接方法。具体而言,实现获取读锁、获取写锁、释放读锁、释放写锁方法。即序程中调用获取读锁操作,在跋程中调用释放读锁操作。而执行构件终止、替换的管理服务则需要分别在序程中调用获取写锁操作,在跋程中调用释放写锁操作。实现增加目标构件引用计数、减少目标构件引用计数方法,分别在序程和跋程中调用,只有构件引用计数为零,且处于“空闲”状态时,并获得写锁时,才允许被卸载或替换。
除上述方案,所有与连接特征相关的处理,均可在序程和跋程模块中直接实现,也可作为通用的预制连接方法函数,放入连接方法表中,由序程和跋程代码根据具体连接需要进行调用。
权利要求
1.一种操作系统中构件的连接方法,步骤包括(1)在需要连接的操作系统构件之间插入序程模块和跋程模块,在序程模块和跋程模块中设置构件间的连接处理流程;(2)源构件调用目标构件后,序程模块截取该调用,根据构件间的连接需求,执行连接处理流程,完成相应的处理;(3)序程模块处理后,将控制交给目标构件,目标构件完成源构件所请求的服务;(4)目标构件完成服务后,跋程模块截取返回的目标代码,执行与序程模块相对应的逆向处理,并返回到源构件。
2.如权利要求1所述的操作系统中构件的连接方法,其特征在于将序程模块和跋程模块中的连接处理流程作为通用的预制连接方法函数,放入连接方法表中,由序程模块和跋程模块根据具体连接需要进行调用,调用步骤包括(1)源构件调用目标构件后,序程模块截获源构件到目标构件的调用;(2)序程模块判断构件间连接的需求,根据实际需求,调用连接方法表中对应的连接方法函数,完成相应的处理;(3)处理后返回到序程模块,如果还有其它需求,则再次重复步骤2,调用连接方法表中的其它相应连接方法函数,完成相应的处理,再返回,否则转步骤4;(4)序程模块将控制交给目标构件;(5)目标构件完成源构件所请求的服务之后,执行返回指令;(6)跋程模块截获目标构件的返回指令,针对步骤2所作的处理,调用连接方法表中相对应的连接方法函数,完成相应的处理;(7)处理后返回到跋程模块,如果连接需求有多种,继续步骤6,直到所有需求处理完毕,否则转步骤8;(8)返回至源构件。
3.如权利要求2所述的操作系统中构件的连接方法,其特征在于在系统中只保留一个序程模块和跋程模块的模板,连接时,将序程模块和跋程模块复制到内存中,通过填写序程模块和跋程模块中的重定位信息、调用堆栈,在源构件与序程模块之间、序程模块与连接方法表中的连接方法函数之间、序程模块与和目标构件之间、目标构件与跋程模块之间、跋程模块与连接方法表中的连接方法函数之间以及跋程模块与源构件之间分别建立链接。
4.如权利要求3所述的操作系统中构件的连接方法,其特征在于截获目标构件返回控制的调用堆栈处理步骤包括(1)序程模块将调用堆栈中存放的返回地址复制出来,保存;(2)序程模块将跋程模块的起始地址压入调用堆栈;(3)目标构件执行完毕后,在返回时,从堆栈中弹出返回地址;(4)返回地址是跋程的入口,跋程模块开始执行;(5)跋程模块将步骤1中序程模块保存的实际返回地址填回调用堆栈;(6)跋程模块返回时,从堆栈中弹出返回地址,返回到源构件。
5.如权利要求1所述的操作系统中构件的连接方法,其特征在于对参与连接的操作系统构件进行规格化,构件提供的接口信息包括各个接口方法的本质属性和基调。
6.如权利要求1或2所述的操作系统中构件的连接方法,其特征在于连接处理流程为获取或释放互斥量时,序程模块将互斥量更改为忙状态;跋程模块将互斥量更改为空闲状态。
7.如权利要求1或2所述的操作系统中构件的连接方法,其特征在于连接处理流程为构件挂起或恢复执行时,序程模块将源构件挂接到目标构件的等待队列上,设置为阻塞状态状态;跋程模块则恢复执行代码,唤醒源构件恢复执行。
8.如权利要求1或2所述的操作系统中构件的连接方法,其特征在于连接处理流程为设置或恢复最高中断级时,序程模块根据目标方法中所给的中断级别,设置可编程中断控制器的屏蔽位,屏蔽无关中断;跋程模块重新设置可编程中断控制器,恢复原来的中断屏蔽设置。
9.如权利要求1或2所述的操作系统中构件的连接方法,其特征在于连接处理流程为远程消息发送或接收时,序程模块将源构件的调用信息打包为网络消息,并发送到目标构件所在节点;跋程模块从网络接收来自目标构件的返回消息,并拆包,以本地过程调用的形式返回到源构件。
10.如权利要求1或2所述的操作系统中构件的连接方法,其特征在于连接处理流程为读、写锁操作和计数操作时,序程模块获取读锁并将构件引用计数增一;跋程模块释放读锁并将构件引用计数减一。
全文摘要
本发明提供一种操作系统构件连接方法,属于操作系统构造领域。该方法为了解决操作系统中存在的与构件连接相关的并发控制、安全保护等问题,在构件之间插入序程模块和跋程模块,通过这两模块提供系统层连接功能。步骤为当源构件调用目标构件后,序程模块截取源构件到目标构件的调用,根据构件间的连接需求,序程模块执行相应的与连接特征相关的处理,序程模块处理后,将控制交给目标构件,目标构件实现源构件所请求的服务后,跋程模块截取返回的目标代码,执行与序程模块相对的处理,并将控制返回给源构件。本发明不仅集中处理操作系统中并发控制、跨保护域连接与通信,还可支持实时应用、分布式应用以及操作系统结构的动态演化。
文档编号G06F9/46GK1584841SQ200410009180
公开日2005年2月23日 申请日期2004年6月7日 优先权日2004年6月7日
发明者藤启明, 陈向群, 杨芙清 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1