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

集群系统MOSIX分析(7)

 2008-12-01 11:04:48 来源:WEB开发网   
核心提示:LINUX信号机制信号是异步的进程间通讯机制,是在软件层次上对中断机制的一种模拟,LINUX内核的信号机制符合POSIX.4的规定,集群系统MOSIX分析(7),这是POSIX.1标准的一个超集,每个进程的task_struct结构中都有个指针sig,,,指向一个singal_struct结构,结构中的数组action

LINUX信号机制

信号是异步的进程间通讯机制,是在软件层次上对中断机制的一种模拟。LINUX内核的信号机制符合POSIX.4的规定,这是POSIX.1标准的一个超集。

每个进程的task_struct结构中都有个指针sig,指向一个singal_struct结构,结构中的数组action[]相当于一个信号向量表,每个元素确定了进程接收到一个具体的信号时应该采取的行动。

struct signal_struct {
  atomic_t    count;
  struct k_sigaction  action[_NSIG];
  spinlock_t    siglock;
};

那么系统如何判断一个进程是否有信号在等待处理呢?这是通过task_struct结构中的sigpending成员。task_struct结构中的blocked成员则为屏蔽信号的集合,pending成员则为信号队列,每产生一个信号则把它挂入这个队列,信号位图signal也保存在其中。

用户常常要自己定义对信号的处理程序,并且用户的处理函数是位于用户空间的。LINUX提供了系统调用signal(sys_signal)和sigaction(sys_sigaction 或sys_rt_sigaction)为信号设置处理向量。用户设置信号处理的时机我们是不能确定的,可以在进程迁移前,也可以在进程迁移之后,进程可以在不同的节点间多次迁移,因此,如何保证信号不被丢失并且都能被正确处理就很重要。并且我们注意到,进程在迁移时,并不将信号向量表迁移到目标进程,而只是将进程的异步信号和强制信号信息传送到目标进程【参见mig_send_misc()和mig_do_receive_misc()】。

struct asig_h
{
  unsigned int sigs;/*信号*/
  int nforced;/*内核发送的强制信号的个数*/
};
struct mosix_task
{。。。。。。。
uint32_t asig;    /*到达REMOTE的信号 */
siginfo_t *forced_sigs;  /* REMOTE强制信号信息*/
int nforced_sigs;  /* REMOTE强制信号的个数 */
short sigmig;    /* 迁移时接收的信号 */
}
  
int mig_send_misc(int credit)
{ struct mig_misc_h m;
register struct task_struct *p = current;
………………..
m.asig.sigs = p->mosix.asig;
m.asig.nforced = p->mosix.nforced_sigs;
forced_sigs = p->mosix.forced_sigs;
sti();
if(comm_send(MIG_MISC, &m, sizeof(m), forced_sigs,
          m.asig.nforced * sizeof(siginfo_t), 0))
    ………………
}

1 2 3 4 5  下一页

Tags:集群 MOSIX

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