集群系统中进程相互协作的方法技术方案

技术编号:12735964 阅读:87 留言:0更新日期:2016-01-20 19:49
本发明专利技术公开了一种集群系统中进程相互协作的方法,该方法首先生成两个相同的子进程分别作为主子进程和副子进程,主子进程迁移到集群中去,副子进程保留在服务器节点,然后为主子进程设置运行时间,若在设定的时间内主子进程未完成,则向副子进程发送未完成信号,并且丢弃该主子进程,副子进程复制生成新的子进程作为主子进程迁移至集群中。本发明专利技术通过设置集群中子进程的运行时间,使服务器节点进程知道子进程将在何时完成,并限制子进程在一定的时间内完成。

【技术实现步骤摘要】

本专利技术涉及基于Linux的集群系统技术,特别是一种集群系统中进程相互协作的方法
技术介绍
目前有很多基于Linux的集群系统,Openmosix便是其一。Openmosix选用单一系统映像模式,支持所有UNIX的接口、机制,具有以下特点:透明性,易用性,动态负载平衡,分布式控制,高度的可伸缩性,抢占式进程迁移,能实现最大的全面的性能,并且支持DFSA(DirectFileSystemAccess)。Openmosix集群系统的核心功能是集群内的进程迁移,Openmosix以打补丁的方式修改Linux内核,实现了该功能。进程迁移系统有两个部分,一是信息收集算法和资源共享算法,二是进程迁移机制。集群可以依据系统内的负载情况,将进程从负载较高的节点自动迁移到负载较轻的节点上,从而实现系统内负载的动态平衡。不仅可以由集群自主迁移进程,也可以由集群的管理者手动迁移。手动迁移一个进程时,需要往进程控制块的mosix域whereto字段填写地址,如果不知道目的地址,可随便填写一个地址,则当进程被调度时,集群系统就将根据负载均衡机制迁移该进程到合适的节点。目前的集群存在一个问题,即服务器进程不知道其生成的子服务器进程何时能完成,只能被动的等待子服务器进程完成之后,将结果传递给自己,然后将结果返回给本次请求的客户端。
技术实现思路
本专利技术的目的在于提供一种集群系统中进程相互协作的方法,通过设置集群中子进>程的运行时间,使宿主节点进程知道子进程将在何时完成,并限制子进程在一定的时间内完成。实现本专利技术目的的技术解决方案为:一种集群系统中进程相互协作的方法,包括如下步骤:步骤1、集群中服务器进程接收到客户端的请求,生成两个相同的子进程,分别作为主子进程和副子进程,根据负载均衡原理将主子进程迁移到集群中去,副子进程保留在服务器节点不被迁移;步骤2、设置定时器,为主子进程设置运行时间;步骤3、若在设定时间内,主子进程未完成,则向服务器节点的副子进程发送未完成的信号,并结束主子进程的运行,执行步骤4,否则将结果返回给客户端;步骤4、副子进程接收到信号,复制生成一个子进程作为新的主子进程,新的主子进程被迁移至集群中,重复步骤2~步骤4,直至主子进程在设定时间内完成任务。本专利技术与现有技术相比,其显著优点为:本专利技术通过设置集群中子进程的运行时间,使服务器节点进程知道子进程将在何时完成,并限制子进程在一定的时间内完成。附图说明图1为本专利技术的集群系统中进程相互协作的方法流程图。图2为本专利技术实施例中集群系统示意图。图3为本专利技术实施例中设置主子进程定时器示意图。具体实施方式下面结合附图及具体实施例对本专利技术作进一步详细说明。结合图1,一种集群系统中进程相互协作的方法,包括如下步骤:步骤1、当集群中服务器进程接收到客户端的请求之后,生成两个相同的子进程,分别为主子进程和副子进程,集群根据负载均衡原理将主子进程迁移到集群中去,副子进程保留在服务器节点不被迁移;服务器进程生成两个相同子进程的具体过程为:进程控制块增加一个mosix域,命名为mosix.id,id的取值设置为0或1;当服务器进程接收到客户端的请求之后,将会调用两次fork(),生成两个子进程,这两个子进程功能一样,其中一个进程的mosix.id为0,表示该子进程为主子进程,另一进程的mosix.id为1,表示该子进程为副子进程;步骤2、设置定时器,为主子进程设置运行时间,具体为:在主子进程中,通过settimer()系统调用,设置一个定时器,当定时时间到达时,内核会给主子进程发送一个SIGALRM,主子进程中绑定的signal()函数接收SIGALRM,并做出相应的处理;所述的signal()函数在服务器生成子进程时绑定在主子进程中,用于接收操作系统内核发送的信号,同时向副子进程发送未完成信号;步骤3、若在设定时间内,主子进程未完成,则向服务器节点的副子进程发送未完成的信号,并结束主子进程的运行,执行步骤4;否则将结果返回给客户端;步骤4、副子进程接收到信号,复制生成一个子进程作为新的主子进程,新的主子进程被迁移到集群中去,重复步骤2-步骤4,直至主子进程在设定时间内完成任务;上述新生成的主子进程不会被迁移到上一个主子进程被迁移到的节点。下面结合具体实施例对本专利技术做进一步说明。实施例如图2所示,在一个简化的集群系统中,节点1作为服务器,接收并处理外界的计算请求,并生成子进程去完成任务,根据负载均衡原理,子进程会被迁移到集群中负载较轻的节点。修改进程控制块(task_struct)增加一个mosix域,命名为mosix.id,id的取值设置为0或1;当服务器进程接收到客户端的请求之后,将会调用两次创建进程函数fork(),生成两个子进程,这两个子进程功能一样,其中一个进程的mosix.id为0,表示该子进程为主子进程,另一进程的mosix.id为1,表示该子进程为副子进程,并且其mosix.whereto域为0;新生成的副子进程不会被迁移,并且不参与进程调度,其进程状态处于可中断等待状态。根据集群内负载均衡原理,如果需要迁移新生成的子服务进程,则将主子服务进程迁移到其他的节点,副子进程不参与该迁移。动态负载平衡机制会每隔一段时间收集集群中各个节点的负载信息,包括该节点上处理器的数量,处理器速度,处理器使用率,以及内存使用率等;根据这些信息,在主子进程中,通过设置定时器函数settimer(),设置一个计时器,当定时时间到达时,内核会给主子进程发送一个SIGALRM,如图3所示;主子进程中绑定的signal()函数接收SIGALRM,并做出相应的处理。若设定时间截止时主子进程还未完成计算,则子进程出现超时,出现超时后,signal()函数向宿主节点发送未完成的标志信号,停止自身运行,等待父进程回收。修改集群系统内的系统调用表,增加一个系统调用,参数包括信号signal,主子进程的pid,以及主子进程所在的节点位置,map_id;该新增系统调用的功能,就是向服务器节点的副子进程发送请求,告诉副子进程,在规定的时间内主子进程未完成,已丢弃。服务器节点的副子进程处于可中断等待状态,当其信号处理函数sig_usr()接收到主子进程的请求后,副子进程状态变为就绪态,参与服务器节点上的进程调度;所述的信号处理函数sig_usr()为服务器生成副子进程时绑定的函数,用于接收主子进程发送的未完成信号;服务本文档来自技高网...

【技术保护点】
一种集群系统中进程相互协作的方法,其特征在于,包括如下步骤:步骤1、集群中服务器进程接收到客户端的请求,生成两个相同的子进程,分别作为主子进程和副子进程,根据负载均衡原理将主子进程迁移到集群中去,副子进程保留在服务器节点不被迁移;步骤2、设置定时器,为主子进程设置运行时间;步骤3、若在设定时间内,主子进程未完成,则向服务器节点的副子进程发送未完成的信号,并结束主子进程的运行,执行步骤4,否则将结果返回给客户端;步骤4、副子进程接收到信号,复制生成一个子进程作为新的主子进程,新的主子进程被迁移至集群中,重复步骤2~步骤4,直至主子进程在设定时间内完成任务。

【技术特征摘要】
1.一种集群系统中进程相互协作的方法,其特征在于,包括如下步骤:
步骤1、集群中服务器进程接收到客户端的请求,生成两个相同的子进程,分别作
为主子进程和副子进程,根据负载均衡原理将主子进程迁移到集群中去,副子进程保留
在服务器节点不被迁移;
步骤2、设置定时器,为主子进程设置运行时间;
步骤3、若在设定时间内,主子进程未完成,则向服务器节点的副子进程发送未完
成的信号,并结束主子进程的运行,执行步骤4,否则将结果返回给客户端;
步骤4、副子进程接收到信号,复制生成一个子进程作为新的主子进程,新的主子
进程被迁移至集群中,重复步骤2~步骤4,直至主子进程在设定时间内完成任务。
2.根据权利要求1所述的集群系统中进程相互协作的方法,其特征在于,步骤1
中对于同一个外界请求,服务器进程生成两个相同的子进程,分别作为主子进程和副子
进程,具体为:
进程控制块增加一个mosix域,命名为mosix.id,id的取值...

【专利技术属性】
技术研发人员:任良成陈清华
申请(专利权)人:南京理工大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1