集群系统MOSIX分析(5)
2008-12-01 11:04:43 来源:WEB开发网MOSIX进程迁移的一般过程
1 选择要迁移进程和目标节点:
MOSIX中选择迁移进程有两种方式。一种是用户明确控制,通过MOSIX附带的系统命令migrate Pid Node,将进程标识符为Pid的进程迁移到节点Node上。命令mosrun 则允许在指定的节点上初始运行进程。另一种方式则是由负载平衡模块进行自动调度,根据集群的负载情况和历史信息,按照特定的平衡算法,选择某个进程迁移到比较空闲的节点上,以达到整个集群的最佳性能。每个进程都有一个MOSIX控制块(mosix_task),它的成员whereto如果不为0,则为该进程需要迁往的目的节点。
Mosix是采用接收者启动的方式。在Linux中,所有进程部分时间运行于用户模式,部分时间运行于系统模式。进程不能被抢占,只要能够运行它们就不能被停止( 除非时间片被用完)。当进程必须等待某个系统事件时,它才决定释放出CPU。因此,如果负载平衡模块在核心态中,决定了要迁移走本地进程a。它只是通过mosix_do_add_to_whereto( )设置进程a的whereto,标识它将要被迁移,而无法立即将进程迁移走。如果a能被Mosix事件唤醒的话,还会将其放入运行队列中。由于计算进程优先级时(goodness( )),具有Mosix内容的进程的优先级会被提升。这样,在下一次进程调度(schedule( ))中, 具有Mosix事件的进程将更容易获得CPU。当进程a被调度选中执行时,在返回用户态之前,将会首先处理完所有能够处理的Mosix事件,并且判断是否被选中迁移。如果被选中,则向目的节点的迁移守护进程发出迁移请求。如果该进程A需要被迁移,将会在此时被迁移走。因此,从概念上来说,进程可以说是"主动"迁移,即迁移进程的动作实际发生在当前进程的上下文中,迁移的也是当前进程的内容,然后,该进程实际变为远程进程的代理(deputy)。
更多精彩
赞助商链接