基于工作例程/主导例程与代理构件在本地/远程运行线程/进程的方法

文档序号:6438081阅读:124来源:国知局
专利名称:基于工作例程/主导例程与代理构件在本地/远程运行线程/进程的方法
技术领域
本发明涉及一种在计算机中运行线程/进程的机制,尤其是一种利用工作例程/主导例程在本地/远程进行安全地启动运行线程/进程的机制。属于计算机技术领域。
背景技术
线程与进程的概念是在任何计算机操作系统中都存在而且很重要的,对线程/进程的管理(创建对象、启动运行、退出运行、释放资源)是操作系统功能中不可或缺的一个重要组成部分。在公知的操作系统(MSDos/Unix/Linux/Windows,下同)中,线程通常是指在一个特定的进程环境之下,执行一个代码段并为其提供执行环境。为了执行代码,通常需要创建一个栈和一个含上下文的控制块,还需要占用一部分其隶属进程的地址空间与代码模块。当某个具体线程真正开始执行时,其实质是执行“一段函数代码”。进程的执行通常是加载/运行应用程序的可执行模块。
随着操作系统逐渐从桌面应用向网络应用的转移与发展,在下一代因特网操作系统中,对在网络环境中进行远程地动态地创建/运行/退出进程/线程的需求日益突出,而如何提高网络计算机的数据安全问题则一直显得格外重要。目前有关这方面的工作进展主要集中在“网络管理软件”这一层面上,其本质是操作系统之上的一些应用程序,而没有在操作系统这一“系统管理软件”层面上来实现并支持对远程计算机创建/运行/退出进程/线程的请求的安全验证并提供相关服务,这就使得一些不法分子可以利用并不很专业的手段来盗取网络数据,从而进行犯罪活动,这使得网络安全这一问题难以从根本上得到解决。
在面向中间件的编程环境中,通常在操作系统之上进行代理中间件的开发,客户端程序通过调用代理中间件的方法来完成期望的功能,只需要代理中间件服务组件在操作系统中进行了注册,则应用程序执行时可以直接调用其方法来完成需要的功能,此时,目前公知操作系统做的工作仅仅是把中间件程序模块加载到内存中,而没有在操作系统内核中对需要启动运行的线程请求作系统访问权限的的验证,由于代理中间件程序绝大多数是由一些作代理服务的人员或公司编写,其实质也是操作系统之上的应用程序模块,也没有在内核中实现,操作系统对其管理就是对注册表进行管理,众所周知,注册表其本身是公开的,是很容易被修改的,目前流行的不少病毒就是通过修改注册表来达到破坏系统的目的。因此,在对运行一个程序/线程这个环节上,公知操作系统没有作是否是合法运行请求的验证,因为这不简单是个验证问题,而这涉及到如何启动/运行一个程序的模型设计及其技术实现。

发明内容
本发明的主要目的在于提供一种基于工作例程/主导例程与代理构件在本地/远程运行线程/进程的方法,它在面向构件的编程环境中,客户程序访问系统,经过工作例程/主导例程运行,执行代理构件功能,启动线程/进程,满足本地/远程应用服务,离开系统结束访问,在远程进行创建/运行/退出线程/进程提供了新的途径,可实现服务功能的远程运行、本地应用,更适于下一代网络服务。
本发明的又一目的在于基于工作例程/主导例程与代理构件在本地/远程运行线程/进程的方法,它通过工作例程/主导例程进行验证,还可通过系统验证,能够提高在本地、尤其在远程启动/运行线程/进程时的安全性,完善计算机网络安全。
本发明的又一目的在于基于工作例程/主导例程与代理构件在本地/远程运行线程/进程的方法,它利用代理构件的结构,能够进一步扩大代理服务的功能。
为此,本发明通过如下技术方案实现上述目的一种基于工作例程/主导例程与代理构件在本地/远程运行线程/进程的方法,它包括在客户端和服务端操作系统内核中预先实现工作例程/主导例程对象,工作例程/主导例程对象至少有启动与结束两个方法;根据客户端需求在服务端创建线程/进程时,调用线程/进程对象接口智能指针的启动方法启动服务端线程/进程对象执行,将线程运行转化为运行工作例程对象;将进程加载/运行应用程序的可执行模块转化为运行一主导例程对象;运行结束时,再调用线程/进程对象接口智能指针的结束方法,结束线程/进程。
根据客户端需求在服务端创建/运行/结束线程时,客户端操作系统调用系统API,获取指定接口智能指针,定义一个线程/进程对象接口智能指针,并在服务端创建其实例,到服务端系统;再利用服务端系统接口方法创建服务端线程/进程对象,访问服务端系统线程/进程对象,服务端线程/进程对象通过工作例程/主导例程的启动方法启动,同时将接口智能指针返回客户端;运行结束时,客户端调用服务端线程/进程对象接口智能指针的结束方法,访问服务端工作例程/主导例程的结束方法,结束线程/进程。其中,客户端或服务端为本地或远程。
在客户端和服务端之间设置代理构件功能模块,代理构件功能模块中包括对应于应用的功能方法以及工作例程/主导例程接口;工作例程/主导例程启动方法参数至少包括工作例程/主导例程对象的引用或包含工作例程/主导例程接口代理构件功能模块的类智能指针;在服务端创建/运行结束线程/进程时,服务端利用工作例程/主导例程接口的方法,由代理构件功能模块中所提供应用功能,调用功能函数完成某具体功能的执行,客户端工作例程/主导例程结束方法通知服务端结束,服务端工作例程/主导例程结束方法通知代理构件结束,代理构件功能模块利用工作例程/主导例程结束方法结束执行,并将信息返回服务端系统。
服务端工作例程/主导例程启动方法执行后,首先判断是否有重载,如果有,则直接进入代理构件功能模块工作例程/主导例程启动执行某功能;如果没有,则开始调用功能构件方法,再进行工作例程/主导例程启动。
代理构件独立于服务端或与服务端设置为一体,或者于客户端为一体。
代理构件内除了可以选择是否重载工作例程/主导例程的启动方法与结束方法外,其它是用户或者代理构件服务开发商所提供的具体的功能函数模块的方法。
代理构件功能模块仅包括工作例程/主导例程的启动与结束方法,代理构件功能模块成为工作例程/主导例程对象,采用代理构件功能模块继承/包含一个工作例程接口直接执行一个工作例程对象。
代理构件功能模块的工作例程/主导例程接口为包含或继承的接口。
用户指定工作例程/主导例程对象运行时执行程序的入口函数,工作例程/主导例程对象的启动方法采用回调函数的方式来执行用户定义的入口函数。
服务端系统的工作例程/主导例程的启动方法参数还包括带有密钥和/或运行参数的参数,用以对用户创建线程/进程时的系统安全许可验证。参数为字符串类型或数字类型或数据包格式。
工作例程启动方法中还包括有对当前系统、当前进程、相关线程对象的运行环境的参数设置,用以对客户端远程创建线程时的系统安全许可验证。
在服务端系统上运行线程/进程时,系统首先解开参数包,在内核的工作例程/主导例程对象的启动方法中进行系统密钥验证,以确认该远程用户是否拥有访问本机器/系统的权利,如果有,则可运行;否则系统拒绝运行。
密钥验证还包括确认该客户端用户是否拥有访问本服务端机器/系统指定进程的权利,如果有,则可运行;否则系统拒绝运行。
离开服务端系统前,在结束方法中进行服务确认的签名工作,包括存留客户名称、服务时间、服务内容、使用资源信息。
在代理构件中设置服务权限控制密钥,客户端要求提供服务时,创建/运行线程/进程,进入代理构件获取构件方法实际功能时,首先解包,通过启动方法进行密钥验证,通过者,可获取构件方法实际功能,否则退出,拒绝创建/运行线程/进程。密钥验证包括实际功能服务要求和/或服务类型的私钥验证。
在代理构件功能模块某功能服务结束时,在结束方法中进行服务确认的签名工作,包括存留客户名称、服务时间、服务程序,占用的系统资源。
在客户端,接口智能指针返回客户端后,包括设置安全密钥和/或参数,用于配合服务端系统和/或代理构件端创建/运行线程/进程前安全机制的密钥验证。
在面向构件的编程环境中,本发明提供了一个工作例程接口,写为IWorkerApplet,它是为下一代网络编程中将使用到的ActiveObject对象所引出的接口,ActiveObjeet与工作例程共同构成了Agent对象,为远程调用提供代理服务,不允许用户通过地址进行创建/执行远程线程,从安全性方面及计算模型方面完善远程线程创建/执行的概念。Agent对象通过远程用户对工作例程接口的调用而被激活。
在本发明中,工作例程在操作系统中的位置是系统利用了进程池与线程池来管理系统中的进程与线程,在整个系统中有一个进程池,进程池中容纳着一定个数的进程对象,每个进程对象又拥有一个线程池,线程池中容纳着一定个数的线程对象,每个线程对象除了一些基本设置外,其中包含一个工作例程对象,这个工作例程对象就是该线程真正执行时的入口点,这个入口点在创建该线程对象、也就是同时创建该工作例程对象时就确定了。
在创建工作例程对象时,系统将会根据当前的系统用户设置、当前的服务进程以及环境变量,按照一定规则来产生一个属于该工作例程对象的系统密钥,由于在同一系统中,不同用户或不同进程或不同环境下产生的这个密钥不一定相同,为区别通常意义下的系统密钥,直接称这里的工作例程的密钥为“启动密钥”,因为其目的就是在于验证用户是否具有启动并运行此工作例程对象的权利。由于工作例程对象是构件化的组件对象,而且在操作系统内核中创建,因此,用户不能在应用程序中指定其起始地址,也不能轻易更改其启动密钥,而只能调用代理构件已有的功能函数进行服务。这就大大提高了在远程计算机上运行一个线程的安全性。
在工作例程对象中,无论其接口还是类,都具有如下的特征至少有两个方法启动方法,完成方法。启动方法的参数至少有两个一个是代理构件类的接口智能指针,一个是带有密钥和参数的数据包。在本发明中,用户可以自己编写代理构件,实现需要的功能。在代理构件中,要求必须包含或继承工作例程接口,否则编译提示出错。除了要实现代理构件各个方法自身需要执行的功能代码之外,用户可以选择重载IWprkerApplet接口的启动方法和完成方法,也可以不重载而使用系统默认实现。
在本发明中,线程的启动/运行通过工作例程对象来实现,整个模型是客户程序——操作系统内核——启动并开始执行此线程对象对应的工作例程对象——系统身份或密钥验证——如通过,进入代理构件——代理构件进行服务类别验证——如通过,调用相应功能函数完成功能——执行代理构件中重载的完成方法(功能服务完成,签名确认)——执行系统内核中工作例程对象的完成方法(系统服务完成,签名确认)——离开系统。
本发明中的说明以线程的启动/运行为例,需要指出的是,对于在远程机器上运行一个进程(应用程序),同样可以使用工作例程这一机制,基于这一思想,在本发明的操作系统中,一个进程的加载/运行也不是公知操作系统中的传统的程序模块,而是一个主导例程(主导例程)对象,把加载/运行进程的“一个程序模块”的概念发展成为“加载一个程序构件,运行一个主导例程对象”的概念。
与线程中工作例程不同的是主导例程是与进程相关的概念,对于每个进程对象,都有一个相应主导例程对象,主导例程对象在进程对象被构造时同时被构造,系统根据当前设置、环境变量产生一个对应的启动密钥。系统同样实现了对主导例程接口、主导例程类对象的封装,其中至少包含启动方法、退出方法,在用户程序中,可以被重载,也可以不被重载。当用户程序需要启动/运行一个进程时,操作系统就开始执行与其进程对象对应的主导例程对象,然后进行启动密钥的验证,如果通过验证,则进入功能服务程序。
基于本发明操作系统的应用程序,在面向构件的编程环境中完成,其主要步骤是首先,在操作系统内核中实现对进程与线程的管理,本发明中采用了基于构件的进程池与线程池管理技术,在进程对象中维护这一个主导例程对象,在线程对象中维护这一个工作例程对象;其次,编写代理构件,其中包括编写构件自描述语言,功能代码,编译成动态连接库;最后,编写客户端的程序。其中在适当地方创建进程/线程,把密钥和参数打包,然后调用其启动方法在指定的机器上启动/运行进程/线程,执行完成时,调用其完成方法可以结束进程/线程的运行。
无论是线程还是进程,其执行要指定一个入口地址,在现有的编程语言(C/C++,VC/VC++,Pascal,Basic及其可视化编程语言系列)中,以C/C++为例来说明,利用了工作例程与主导例程机制之后带来的编程模式上的最大变化在于利用代理构件这一中间件,在需要启动线程时,启动函数的参数不是一个函数的地址,而是一个工作例程对象;在加载运行一个进程时,其入口点可以不再是执行模块中的主函数main()、wmain、winmain(),换句话说,在可执行模块(本说明书中,“可执行模块”也就)中,可以没有作为入口的主函数,因为系统运行进程是运行一个主导例程对象,从主导例程对象的启动方法启动开始执行,而主导例程在进程对象构造时被同时构造,其实现在系统内核中,从某种意义上讲,其启动方法可以简单看作就是程序的主函数入口点,然而,其实现却是在系统内核,而不是在应用程序中。
另一方面,在本发明中,启动/运行进程时的“可执行模块”可以就是“代理构件”,“代理构件”本身包含或继承主导例程接口,此外主要是其具体的功能函数的实现,其中没有入口主函数,但是是一个完整的构件,基于这样的构件是用于启动/进程的构件,特称为“进程构件”。同样,包含或继承工作例程接口的用于启动/运行线程的代理构件可以特称为“线程构件”。线程构件与进程构件是本发明中代理构件中的特例。
本发明中的线程/进程的启动机制中的工作例程与主导例程接口及其类对象,均在面向构件的编程环境中进行实现。系统自动实现了对标准接口类的封装,屏蔽了调用COM构件对象过程的繁琐细节,简化了进行本地/远程创建/访问/退出进程/线程的用户编程,具有构件升级的独立性、本地/远程透明性、编程语言无关性。
另外,本发明启动方法时带有参数arg,这个参数在调用线程对象的启动方法时传入,其设计目的不仅在于传入一个普通的数据,更为重要的是它可以用于对用户,尤其是远程用户的执行线程请求作“签名验证”,只要在服务端的代理构件中设置密钥和一张签名注册表,则可以根据不同客户端的签名决定是否提供服务,或者提供何种服务,甚至对同一方法的功能实现也可以根据不同的签名来分别写其代码。服务端管理员需要时可以查阅、更改这张注册表,以保证系统运行的安全,如果真有不法分子访问了工作例程对象,也可以从表中查出其是在何时何地以何密钥来访问的,从而尽可能地提高网络数据的安全性。这种模型从系统本身和代理服务的双重角度来确保网络数据的安全。
综上所述,在本发明中,利用了工作例程和主导例程这两个概念,在系统中分别实现工作例程和主导例程对象。当在本地、尤其是在远程需要启动/运行一个线程/进程时,这种机制从操作系统这一底层软件中进行了密钥验证,在实际功能的代理构件中,服务方还可以进一步设置密钥,用以分别不同用户对不同服务的需求,能够提高网络数据的安全性,完善了计算机系统启动/运行线程/进程的计算模型。


图1为本发明工作例程与主导例程在操作系统中的用途与位置示意图;图2为本发明利用代理构件在远程进行安全地创建/执行/退出线程的编程模型与工作例程工作机制关系图;图3为本发明利用进程构件在远程进行安全地创建/执行/退出进程的编程模型与主导例程工作机制关系图。
具体实施例方式
本发明利用提出的“工作例程”概念,把线程“运行一段代码”的概念转化为“运行一个工作例程对象”,利用主导例程概念,把进程“加载运行可执行模块”的概念转化为“运行一个主导例程对象”,其实际功能在代理构件中实现,将其应用于“面向构件”的编程环境中,能够为在本地,尤其是在远程启动线程/进程提供一种安全的技术方案,目前已经在本发明中得到实现并应用。
下面结合附图和具体实施例对本发明的技术方案与有益效果做进一步地说明。
在任何操作系统中,进程与线程都在其中扮演着重要的角色,本发明的操作系统是建立在构件化内核基础上、面向对象编程环境的操作系统。图1表示,在本发明中,每个进程对象都对应着一个主导例程对象(MainApplet),每个线程对象都对应着一个工作例程对象(WorkerApplet),进程的启动/运行是运行一个主导例程对象,线程的启动/运行是运行一个工作例程对象。
具体实施例一参见图2,本发明中的较佳实施例利用代理构件在远程进行安全地创建/执行/退出线程的编程模型与工作例程工作机制关系图。
在面向构件的编程环境中,在本发明构件化操作系统中,利用代理构件在远程进行安全地创建/执行/退出线程的编程模型,及其与工作例程工作机制分析。图2(a)为应用程序流程图部分,图2(b)表示实现具体功能的代理构件部分,图2(c)表示远程操作系统的内核支持部分。图2从整体上示意了本发明的工作例程工作机制与“客户”、“代理”、“系统”三者之间的关系。本实施例的主要从“面向构件”这一编程模型来分析,涉及的主要步骤有步骤1在操作系统内核中实现对工作例程机制的支持,对应图2(c)部分,其中已经实现了默认的工作例程对象;步骤2编写代理构件部分,在操作系统内核中实现对工作例程机制的支持,对应图2(b)部分。这部细分为以下几步1、编写代理构件,及其接口方法,其中必须包含或继承工作例程接口,工作例程接口及其方法在操作系统内核中已经有默认实现,用户在代理构件中可以不直接写出来,也可以写出来并重载。文件保存为Agent.cdl,需要指出的是扩展名为cdl的文件是本发明中使用的面向构件的编程环境所支持的一种构件自描述语言,也是与本发明相关的另一发明,利用编译工具编译此文件,即可自动产生相应的头文件(Agent.h)与源程序文件框架(Agent.cpp)。
2、编写服务端代理构件方法的功能实现,在自动产生的源程序文件框架中填写代理构件各方法需要实现的具体功能,在启动方法中可以设置密钥、是否进行服务、服务类别的签名验证,在完成方法中编写服务确认签名的存留功能代码。
3、在正确写好方法的实现代码,尤其涉及到数据安全问题时,并包含了头文件Agent.h之后,同时编译Agent.cdl与Agent.cpp,此时即可生成代理构件Agent.dll,可以把Agent.dll装载到本地/远程计算机上。
步骤3编写客户端程序,参见图2(a),主要有以下几步1、在客户端,首先要利用“和欣”系统的API函数来获取指定的远程服务机器/系统,并要指定在远程机器上的哪个具体进程来服务,函数ZeeGetRemoteProcess()可以返回指定机器、指定进程的接口智能指针。
2、定义一个代理构件CAgent的类智能指针CAgentRef,并用远程进程的接口智能指针进行实例化。
3、调用指定的远程进程的接口智能指针的CreateThread()方法创建一个远程线程对象,并返回其接口智能指针。
4、设置远程系统的密钥和/或代理构件服务的私钥以及线程执行参数,调用远程线程对象的启动方法开始执行。执行时首先进入远程系统对应进程的指定线程对象,开始执行该线程对象在当前系统、当前进程、当前环境之下的创建的默认的工作例程对象,在其启动方法中解开参数包,进行系统密钥的验证,此处可以设置密钥,进行是否服务、服务类别的签名验证,提高安全性。如果密钥不正确,则系统可以提示警告、终止执行,如果密钥正确,则根据代理构件是否对启动方法重载来决定是否直接调用DoWork()方法,如果没有重载,则直接调用DoWork()方法,否则,转而调用代理构件中的启动方法;在代理构件的启动方法中,也可以设置提供服务的私钥和/或参数。然后由代理构件决定是否提供进一步服务,和提供何种服务。例如本实施例中验证参数arg的前9个字节中的内容是否为“Pass Word”字符串,只有通过验证,才调用DoWork()函数,DoWork()函数用以提供打印该字符串的服务。
5、当要线程要执行完成之前,还要执行工作例程对象的结束方法,此处用以作服务确认的签名,以及一些系统环境清理工作。
本发明中的对线程运行的概念富于了新的含义,按照这种方式创建的线程不仅在创建时是直接取自于线程池(当池中还有已经创建、但还没有使用的线程对象时)中的线程对象,当引入并实现工作例程概念之后,线程的执行不再是执行公知操作系统中的称谓的“代码段”,而是一个工作例程对象,这个对象包括其工作例程类和工作例程接口,系统已经在面向构件编程的编程环境中对其进行了封装,屏蔽了调用COM构件对象过程的繁琐细节,简化了进行远程创建/执行线程的用户编程,同时具有构件升级的独立性、本地/远程透明性、编程语言无关性。
本发明中的工作例程的重要特征还在于,设计其启动方法时带有参数arg,这个参数在调用线程对象的启动方法时传入,其设计目的不仅在于传入一个普通的数据,更为重要的是它可以用于对用户,尤其是远程用户的执行线程请求作“签名验证”,只要在服务端的代理构件中设置密钥和一张签名注册表,则可以根据不同客户端的签名决定是否提供服务,或者提供何种服务,甚至对同一方法的功能实现也可以根据不同的签名来分别写其代码。服务端管理员需要时可以查阅、更改这张注册表,以保证系统运行的安全,如果真有不法分子访问了工作例程对象,也可以从表中查出其是在何时何地以何密钥来访问的,从而尽可能地提高网络数据的安全性。
具体实施例二参见图3,本发明利用进程构件在远程进行安全地创建/执行/退出进程的编程模型与主导例程工作机制关系图。
在面向构件的编程环境中,在本发明操作系统中,利用主导构件在远程进行安全地创建/执行/退出线程的编程模型,及其与主导例程工作机制分析。
图3(a)为应用程序流程图部分,图3(b)表示实现具体功能的进程构件部分,图3(c)表示远程操作系统的内核支持部分。图3从整体上示意了本发明的主导例程工作机制与“客户”、“代理”、“系统”三者之间的关系。本实施例主要从“面向构件”这一编程模型来分析,涉及的主要步骤有步骤1在操作系统内核中实现对主导例程机制的支持,对应图3(c)部分,其中已经实现了默认的主导例程对象;步骤2编写进程构件部分,对应图3(b)部分。具体为1、编写进程构件,及其接口方法,其中必须包含或继承主导例程接口,主导例程接口及其方法在操作系统内核中已经有默认实现,用户在进程构件中可以不直接写出来,也可以写出来并重载。文件保存为Process.cdl。利用编译工具编译此文件,即可自动产生相应的头文件(Process.h)与源程序文件框架(Process.cpp)。
2、编写服务端进程构件方法的功能实现,在自动产生的源程序文件中填写进程构件各方法需要实现的具体功能,在启动方法中可以设置密钥、是否进行服务、服务类别的签名验证。
3、在正确写好方法的实现代码,尤其涉及到数据安全问题时,并包含了头文件Process.h之后,同时编译Process.cdl与Process.cpp,此时即可生成主导构件Process.dll,可以把Process.dll装载到本地/远程计算机上;步骤3编写客户端程序,参见图3(a)1、在客户端,首先要利用本发明操作系统的API函数来获取指定的远程服务机器/系统,函数ZeeGetRemoteSystem()可以返回指定机器/系统的接口智能指针;2、定义一个进程构件CProcess的类智能指针CprocessRef,并用远程进程的接口智能指针进行实例化;
3、调用指定的远程系统的接口智能指针的CreateProcess()方法创建一个远程进程对象,并返回其接口智能指针;4、设置远程系统的密钥和/或进程构件服务的私钥以及进程执行参数,调用远程进程对象的启动方法开始执行。执行时首先进入远程系统的对应进程对象,开始执行该进程对象在当前系统、当前环境之下创建的默认的主导例程对象,在其启动方法中解开参数包,进行系统密钥的验证,如果密钥不正确,则系统可以提示警告、终止执行,如果密钥正确,则根据进程构件是否对启动方法重载来决定是否直接调用Function()方法,如果没有重载,则直接调用Function()方法,否则,转而调用进程构件中的启动方法;在进程构件的启动方法中,也可以设置提供服务的私钥和/或参数。然后由进程构件决定是否提供进一步服务,和提供何种服务。例如本实施例中,可以验证参数arg的前9个字节中的内容是否为“Pass Word”字符串,只有通过验证,才调用Function()函数来完成具体功能。
5、当在进程要执行完成之前,还要执行主导例程对象的结束方法,此处用以作服务确认的签名,以及一些系统环境清理工作。本实施例中的客户端程序如下从具体实施例二可以看出本发明中的对进程运行的概念富于了新的含义,按照这种方式创建的进程不仅在创建时是直接取自于进程池(当进程池中还有已经创建,但还没有使用的进程对象时)中的进程对象,当引入并实现主导例程概念之后,进程的执行不再是加载/执行一个程序模块,而是一个主导例程对象,这个对象包括其主导例程类和主导例程接口,系统已经在面向构件编程的编程环境中对其进行了封装,屏蔽了调用COM构件对象过程的繁琐细节,简化了进行远程创建/执行线程的用户编程,同时具有构件升级的独立性、本地/远程透明性、编程语言无关性。
本发明中的主导例程的重要特征还在于,设计其启动方法时带有参数arg,这个参数在调用线程对象的启动方法时传入,其设计目的不仅在于传入一个普通的数据,更为重要的是它可以用于对用户,尤其是远程用户的运行进程请求作“签名验证”,只要在服务端的进程构件中设置密钥和一张签名注册表,则可以根据不同客户端的签名决定是否提供服务,或者提供何种服务,甚至对同一方法的功能实现也可以根据不同的签名来分别写其代码。服务端管理员需要时可以查阅、更改这张注册表,以保证系统运行的安全,如果真有不法分子访问了主导例程对象,也可以从表中查出其是在何时何地以何密钥来访问的,从而尽可能地提高网络数据的安全性。
本发明在创造性地提出“工作例程”概念的基础上,设计了一套可行的技术方案,并在本发明操作系统中得到实现与应用。把工作例程概念应用于面向构件的编程环境中,为在本地,尤其是在远程进行创建/运行/退出线程提供了一条新的技术途径,可以用于在本地、尤其在远程进行创建/运行/退出线程的安全性管理。基于同样的原理,利用“主导例程”的概念,设计了一套对远程进程的创建/执行/退出进行安全控制的可行机制。这些工作从安全性方面及计算模型方面完善了远程线程/进程创建/执行的模型。
权利要求
1.一种基于工作例程/主导例程与代理构件在本地/远程运行线程/进程的方法,其特征在于它包括在客户端和服务端操作系统内核中预先实现工作例程/主导例程对象,工作例程/主导例程对象至少有启动与结束两个方法;根据客户端需求在服务端创建线程/进程时,调用线程/进程对象接口智能指针的启动方法启动服务端线程/进程对象执行,将线程运行转化为运行工作例程对象;将进程加载/运行应用程序的可执行模块转化为运行一主导例程对象;运行结束时,再调用线程/进程对象接口智能指针的结束方法,结束线程/进程。
2.根据权利要求1所述的方法,其特征在于根据客户端需求在服务端创建/运行/结束线程时,客户端操作系统调用系统API,获取指定接口智能指针,定义一个线程/进程对象接口智能指针,并在服务端创建其实例,到服务端系统;再利用服务端系统接口方法创建服务端线程/进程对象,访问服务端系统线程/进程对象,服务端线程/进程对象通过工作例程/主导例程的启动方法启动,同时将接口智能指针返回客户端;运行结束时,客户端调用服务端线程/进程对象接口智能指针的结束方法,访问服务端工作例程/主导例程的结束方法,结束线程/进程。
3.根据权利要求1所述的方法,其特征在于客户端或服务端为本地或远程。
4.根据权利要求1所述的基于工作例程/主导例程与代理构件在本地/远程运行线程/进程的方法,其特征在于在客户端和服务端之间设置代理构件功能模块,代理构件功能模块中包括对应于应用的功能方法以及工作例程/主导例程接口;工作例程/主导例程启动方法参数至少包括工作例程/主导例程对象的引用或包含工作例程/主导例程接口代理构件功能模块的类智能指针;在服务端创建/运行结束线程/进程时,服务端利用工作例程/主导例程接口的方法,由代理构件功能模块中所提供应用功能,调用功能函数完成某具体功能的执行,客户端工作例程/主导例程结束方法通知服务端结束,服务端工作例程/主导例程结束方法通知代理构件结束,代理构件功能模块利用工作例程/主导例程结束方法结束执行,并将信息返回服务端系统。
5.根据权利要求4所述的方法,其特征在于服务端工作例程/主导例程启动方法执行后,首先判断是否有重载,如果有,则直接进入代理构件功能模块工作例程/主导例程启动执行某功能;如果没有,则开始调用功能构件方法,再进行工作例程/主导例程启动。
6.根据权利要求3、4、5所述的方法,其特征在于代理构件独立于服务端或与服务端设置为一体,或者于客户端为一体。
7.根据权利要求3、4、5所述的方法,其特征在于代理构件内除了可以选择是否重载工作例程/主导例程的启动方法与结束方法外,其它是用户或者代理构件服务开发商所提供的具体的功能函数模块的方法。
8.根据权利要求7所述的方法,其特征在于代理构件功能模块仅包括工作例程/主导例程的启动与结束方法,代理构件功能模块成为工作例程/主导例程对象,采用代理构件功能模块继承/包含一个工作例程接口直接执行一个工作例程对象。
9.根据权利要求3、4、5所述的方法,其特征在于代理构件功能模块的工作例程/主导例程接口为包含或继承的接口。
10.根据权利要求1所述的方法,其特征在于用户指定工作例程/主导例程对象运行时执行程序的入口函数,工作例程/主导例程对象的启动方法采用回调函数的方式来执行用户定义的入口函数。
11.根据权利要求1所述的方法,其特征在于服务端系统的工作例程/主导例程的启动方法参数还包括带有密钥和/或运行参数的参数,用以对用户创建线程/进程时的系统安全许可验证。
12.根据权利要求11所述的方法,其特征在于参数为字符串类型或数字类型或数据包格式。
13.根据权利要求11所述的方法,其特征在于工作例程启动方法中还包括有对当前系统、当前进程、相关线程对象的运行环境的参数设置,用以对客户端远程创建线程时的系统安全许可验证。
14.根据权利要求1、11-13之一所述的方法,其特征在于在服务端系统上运行线程/进程时,系统首先解开参数包,在内核的工作例程/主导例程对象的启动方法中进行系统密钥验证,以确认该远程用户是否拥有访问本机器/系统的权利,如果有,则可运行;否则系统拒绝运行。
15.根据权利要求14所述的方法,其特征在于密钥验证还包括确认该客户端用户是否拥有访问本服务端机器/系统指定进程的权利,如果有,则可运行;否则系统拒绝运行。
16.根据权利要求15所述的方法,其特征在于离开服务端系统前,在结束方法中进行服务确认的签名工作,包括存留客户名称、服务时间、服务内容、使用资源信息。
17.根据权利要求1-5之一所述的方法,其特征在于在代理构件中设置服务权限控制密钥,客户端要求提供服务时,创建/运行线程/进程,进入代理构件获取构件方法实际功能时,首先解包,通过启动方法进行密钥验证,通过者,可获取构件方法实际功能,否则退出,拒绝创建/运行线程/进程。
18.根据权利要求17所述的方法,其特征在于密钥验证包括实际功能服务要求和/或服务类型的私钥验证。
19.根据权利要求4所述的方法,其特征在于在代理构件功能模块某功能服务结束时,在结束方法中进行服务确认的签名工作,包括存留客户名称、服务时间、服务程序,占用的系统资源。
20.根据权利要求1所述的方法,其特征在于在客户端,接口智能指针返回客户端后,包括设置安全密钥和/或参数,用于配合服务端系统和/或代理构件端创建/运行线程/进程前安全机制的密钥验证。
全文摘要
一种基于工作例程/主导例程与代理构件在本地/远程运行线程/进程的方法,它包括在客户端和服务端操作系统内核中预先实现工作例程/主导例程对象,该对象至少有启动与结束两个方法;在服务端创建线程/进程时,调用线程/进程对象接口智能指针的启动方法启动服务端线程/进程对象执行,将线程运行转化为运行工作例程对象;将进程加载/运行应用程序的可执行模块转化为运行一主导例程对象;运行结束时,再调用结束方法,结束线程/进程。本发明在面向构件的编程环境中,客户程序访问系统,经过工作例程/主导例程运行,执行代理构件功能,启动线程/进程,满足本地/远程应用服务,可实现服务功能的远程运行、本地应用,更适于下一代网络服务。
文档编号G06F9/46GK1519712SQ03100828
公开日2004年8月11日 申请日期2003年1月22日 优先权日2003年1月22日
发明者陈榕, 林清洪, 陈志成, 陈 榕 申请人:北京科泰世纪科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1