pthread_create로 생성한 thread로 kernel에서 신호 또는 데이터를 보내는 방법은 없나요?
글쓴이: SoftOn / 작성시간: 월, 2015/01/19 - 8:01오후
현재 다음과 같은 pseudo 코드로 signal을 kernel에서 application으로 보내고 있습니다.
kernel module
int send_signal_to_pid(int si_int) { struct siginfo info; struct task_struct *t; int ret; memset(&info, 0, sizeof(struct siginfo)); info.si_signo = SIGRTMAX; info.si_code = SI_QUEUE; info.si_int = si_int; rcu_read_lock(); t = pid_task(find_pid_ns(g_pid, &init_pid_ns),PIDTYPE_PID); if(t == NULL){ printk("no such pid\n"); rcu_read_unlock(); return -ENODEV; } rcu_read_unlock(); ret = send_sig_info(SIGRTMAX, &info, t); if(ret < 0) { printk("error sending signal\n"); return ret; } }
application에서 ioctl()을 이용하여 g_pid 값을 설정하면 kernel에서 해당 g_pid로 signal을 보내주는 방식입니다.
application에서 sigaction()을 이용하여 isr을 등록하여 사용하고 있었습니다.
하지만 테스트 해 보니 이외의 signal(timer)을 처리하기 위한 sigaction() 들로 인해 위 신호에 대한 실행 시점이 지연되는 것을 확인하였습니다. 요구사항은 해당 signal을 최우선 처리하는 것입니다.
모든 sigaction()을 sigwait()로 변경하고 pthread는 우선 순위를 조절하여 처리 하고자 합니다. (선점형 커널 사용하고 있습니다.)
현재 코드로는 main thread에서는 신호가 받아지는데 pthread_create()로 생성한 thread에서는 해당 signal이 받아지지 않습니다.
위 kernel module를 어떻게 수정해야 되는건가요?
Forums:
댓글 달기