集群系统MOSIX分析(5)
2008-12-01 11:04:43 来源:WEB开发网迁移守护进程
在内核成功装入内存以及一些关键硬件(如已经在低层设置过内存管理器MMU)后,内核将跳转到start_kernel完成其余的系统初始化工作。start_kernel在完成初始化内核自身的部分组件-内存、硬件中断、调度程序,分析内核各种选项,测试CPU的缺陷后,将转而执行init函数,在其中通过init_mosix()函数进行MOSIX系统的初始化。
MOSIX系统初始化时,将会首先产生三个守护进程mosix_mig_daemon和mosix_info_daemon,mosix_mem_daemon。它们都是作为一个内核态线程运行的,没有虚拟存储空间,直接使用物理地址空间。这三个守护进程必须驻留在宿主节点(UHN)中而不能被迁移走。
迁移守护进程mosix_mig_daemon的主要功能则是处理迁移请求。它在固定的迁移端口(COMM_MIGD)监听迁移请求,每收到一个迁移请求,则fork一个相应的子进程去处理该请求。整个过程就如同C/S结构网络编程中socket( )、bind( ),listen( )、accept( )、fork( ) 一致。当一个进程A需要迁移到另一个节点时,它将首先向该节点上的迁移守护进程建立一条连接。迁移守护进程将accept该请求,建立一条连接, 并fork一个子进程B执行mig_remote_receive_proc函数,处理该进程的迁移工作。子进程利用从父进程继承下来的刚刚建立的那条连接,接收进程A的状态,并据此修改自身的进程状态。子进程B是迁移守护进程mosix_mig_daemon通过user_thread创建的,它最终退出时会进入用户态,而此时它的进程状态已经被要迁移的进程A的状态所修改,因此,它会从A被迁移前暂停的地方继续恢复运行。此时,进程A将会一直运行在核心态,成为deputy部分,而进程B则成为remote部分,通过它们之间建立的那条网络连接互相通讯。关于user_thread的细节以后将会解释。
更多精彩
赞助商链接