WEB开发网
开发学院服务器服务器方案 集群系统MOSIX分析(7) 阅读

集群系统MOSIX分析(7)

 2008-12-01 11:04:48 来源:WEB开发网   
核心提示: 从代码中我们可以看到,如果有信号待处理,集群系统MOSIX分析(7)(3),则在退出系统空间前,会跳到signal_return,信号处理程序必然是在REMOTE进程上运行的,那么,调用do_signal处理信号,我们看看do_signal

从代码中我们可以看到,如果有信号待处理,则在退出系统空间前,会跳到signal_return,调用do_signal处理信号。

我们看看do_signal ,它对信号作出具体的反应。如果当前进程是REMOTE,它只是简单的返回0。否则,该函数根据当前进程的signal域,确定进程收到了那些信号。对进程收到的每一个信号,从进程的信号等待队列中找到该信号对应的附加信息,从进程的sig域的action数组中找到信号的处理程序及其相关的信息。于是,如果用户设置了信号处理程序(在用户空间中),则最终会通过函数handle_signal()准备好对处理程序的执行 。

用户提供的信号处理程序是在用户空间执行的,而且执行完毕以后还还要回到系统空间。LINUX实现的机制如下:

用户空间堆栈中为信号处理程序的执行预先创建一个框架,框架中包括一个作为局部量的数据结构,并把系统空间的"原始框架"保存在这个数据结构中

在信号处理程序中插入对系统调用sigreturn()的调用

将系统空间堆栈中"原始框架"修改成为执行信号处理程序所需的框架

"返回"到用户空间,但是却执行信号处理程序

信号处理程序执行完毕后,通过系统调用sigreturn()重返系统空间

在系统调用sigreturn()中从用户空间恢复"原始框架"

最后再返回到用户空间,继续执行原先的用户程序

对于本地进程,这是在handle_signal()中由setup_rt_frame()或setup_frame()作出安排的。但是,对于DEPUTY进程,则是通过mosix_deputy_setup_frame()实现的。因为,我们已经知道,DEPUTY是永远运行在核心态中的;进程迁移后,代码段和数据段等都完全迁移到远程REMOTE进程。因此,信号处理程序必然是在REMOTE进程上运行的。那么,这又是如何实现的呢。

上一页  1 2 3 4 5  下一页

Tags:集群 MOSIX

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接