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

集群系统MOSIX分析(7)

 2008-12-01 11:04:48 来源:WEB开发网   
核心提示: 因此,我们可以说进程信号处理的状态是保留在DEPUTY方的,集群系统MOSIX分析(7)(2),这样做也是很自然的,首先在MOSIX中,,ret_check_reschedule:cli # need_resched and signals atomic testcmpl $0,need_

因此,我们可以说进程信号处理的状态是保留在DEPUTY方的。这样做也是很自然的。首先在MOSIX中,对于REMOTE进程,几乎所有的系统调用都是请求DEPUTY来处理,和信号相关的一些系统调用也不了例外。例如,sigprocmask()改变本进程得信号屏蔽位图,sigpending()检查有哪些信号已到达而未被处理,signal()和sigaction()安装信号处理程序。其次,在不少内核操作中,进程进入睡眠以后刚被唤醒时,都会检测信号的存在从而提前返回到用户空间。而DEPUTTY和REMOTE可以分别看作对系统上下文和用户上下文的抽象,所以DEPUTY保留着信号处理的状态。

信号响应

对信号的检测和响应总是发生在系统空间,通常发生在两种情况下:第一,当前进程由于系统调用、中断或异常而进入系统空间以后,从系统空间返回到用户空间的前夕。第二,当前进程在内核中进入睡眠以后刚被唤醒时,由于信号的存在而提前返回到用户空间。

当进程由于中断进入系统空间以后,中断处理程序服务完后,将会转到入口ret_from_intr 。当进程由于异常而进入系统空间后,将会跳到error_code从而最终转到ret_from_exception处理【参见entry.S】。如果中断或异常发生于用户空间,则转移到ret_check_reschedule,否则发生于内核空间,则到达restore_all。当进程由于系统调用进入系统空间,将最终走到ret_from_sys_call。

ENTRY(ret_from_sys_call)
。。。。。
ret_check_reschedule:
    cli            # need_resched and signals atomic test
    cmpl $0,need_resched(%ebx)/*判断是否需要调度*/
    jne reschedule
    cmpl $0,sigpending(%ebx) /*判断是否有悬挂的信号/
    jne signal_return    /*如果有信号待处理,则跳到signal_return */
 straight_to_mosix:
    call SYMBOL_NAME(mosix_pre_usermode_actions)
    testl %eax,%eax
    jne ret_from_sys_call
restore_all:
    RESTORE_ALL
 ALIGN
signal_return:
    sti               # 开中断
handler
    testl $(VM_MASK),EFLAGS(%esp)/*是否处于VM86模式*/
    movl %esp,%eax
    jne v86_signal_return /*是VM86模式的话,则转到v86_signal_return */
call SYMBOL_NAME(do_signal) /* do_signal 对信号进行处理*/
    jmp straight_to_mosix

上一页  1 2 3 4 5  下一页

Tags:集群 MOSIX

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