시그널을 통하여 주기 태스트를 하는데 주기가 깨집니다. 고수님들 많은 조언 부탁 드립니다.
사용자 태스크에서 디바이스 드라이버 모듈로 시그널을 보내게 되고 디바이스 드라이버 모듈에서 시그널을 받게되면 다시 사용자 태스크로 시그널을 보내 사용자 태스크의 시그널 핸들러에서 주기를 찍어 주기 태스트를 하고 있습니다. 하지만 1ms로 동작하도록 주기를 설정해놨는데 1.5... ~ 1.7...으로 찍히며 주기가 깨집니다. 고수님들 많은 조언 부탁드립니다.
디바이스 드라이버 모듈에서 ioctl을 통하여 사용자 태스크로 시그널을 보내고,
사용자 태스크 structure의 접근하여 우선순위를 변경 시켰습니다. 그리고 시그널을 받게되면
다시 사용자 태스크로 시그널을 보내게 했습니다. 사용자 태스크에서 다시 시그널을 받게되면 시그널 핸들러에서 주기를 찍도록 하여 주기 태스트를 하였습니다. 아래는 소스입니다.
------------- 디바이스 드라이버 모듈 -------------
int ioctltest_ioctl()
{
switch(cmd) {
case IOCTLTEST_WRITE :
pid = find_get_pid(user_pid);
user_struct = get_pid_task(pid, PIDTYPE_PID);
user_struct->rt_priority = 0;
user_struct->policy = 1; //1 : fifo 2 : RR
user_struct->prio = 0;
user_struct->normal_prio = 0;
user_struct->static_prio = 0;
}
}
static int handler_pre()
{
force_sig_info(SIGUSR1, (struct siginfo_t *)1, user_struct);
}
------------------사용자 태스크------------------
void test_handler()
{
//주기를 찍습니다.
}
int main()
{
struct sigaction sa;
sa.sa_handler = test_handler;
sigaction(SIGUSR1, &sa, NULL);
}
고수님들 많은 조언 부탁드립니다.
그리고 염치가 없지만 하나 더 물어보겠습니다.
SIGRTMIN을 사용하고 싶은데 저 시그널을 어떻게 사용해야 할지 감이 안잡힙니다ㅠ.ㅠ
저의 글을 봐주셔서 감사합니다.
댓글 달기