커널쓰레드 CPU 사용율, 제거방법.....
글쓴이: 지나가는새 / 작성시간: 금, 2005/11/18 - 11:37오전
module에 kernel_thread 루틴을 첨가 하려 합니다.
커널 스레드는 init_module에 다음과 같이 추가되어 있구요
kernel_thread( kte_thread_func, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND );
커널 스레드가 처음 인지라 테스트 겸 해서 스레드 코드는 다음과 같이 했습니다.
static void kte_thread_func( void* data ) { daemonize(); while(1){ schedule(); } }
insmod 하면 잘 돌기는 하는거 같은데요, CPU 점유율이 너무 높습니다. root 89 99.9 0.0 0 0 ? RW 00:00 0:02 [insmod]
일반 app 에서는 sleep(1) 하면 되긴 하는데, 커널에서는 어떤식으로 해야 하는지 궁금하네요. udelay(xxx) 를 해 봤지만 별 소용 없었습니다.
그리고 exit_module 에서 자꾸 패닉이 나는데요.
exit_module 에는 다음과 같이 구현 했는데 어디가 틀린지 모르겠네요.
static void __exit kte_module_exit(void) { wait_asleep( 100 ); .... } static void wait_asleep( unsigned int die ) { current->state = TASK_INTERRUPTIBLE; schedule_timeout(HZ/die); }
어디가 잘못 되었으니까 패닉이 나겠죠..
커널쓰레드를 처음 해 보는것이라서 어려움이 많네요. 도움 부탁 합니다.
Forums:
http://ar.linux.it/docs/khttpd/ktftpd.ta
http://ar.linux.it/docs/khttpd/ktftpd.tar.gz
이 예제를 참고해 보시지요.
댓글 달기