wait queue 질문입니다.
글쓴이: 김동한 / 작성시간: 수, 2007/04/04 - 11:39오전
디바이스 드라이버에서 wait queue 를 사용하는 도중에 의심가는 부분이 있어서 질문 드립니다.
한쪽에서는 sleep_on 으로 대기하고 있고
다른 한쪽에서는 wake_up 으로 깨워주는 식으로 동작을 하는데
wake_up 했을때 해당 wait_queue 를 가지고 sleep_on 하는 모든 프로세스가 깨어나는지
아니면 그중 하나만 깨어 나는지요?
그리고 sleep_on -> wake_up -> sleep_on 으로..
예를들면
xxx_poll() 에서 sleep_on
xxx_isr() 에서 wake_up
xxx_read() 에서 sleep_on
하게되면 어떻게 되는지요?
예제를 만들어서 테스트 해보면 될것도 같은데
확실치 않아서 이렇게 질문 드립니다.
제가 사용하는 정확한 함수는
wake_up_interruptible, wait_event_interruptible_timeout 입니다.
커널 2.6 arm 계열이구요..
고수님들의 답변 기다리고 있겠습니다.
Forums:
wake_up_interruptible은 배타적인
wake_up_interruptible()은 배타적(exclusive)인 wakeup이라서
waitqueue에 쌓인 프로세스중 하나만(FIFO방식으로) 깨웁니다.
non-exclusive하게 waitqueue에 있는 모든 걸 다 깨우고 싶으면
wake_up_interruptible_all()을 쓰면 됩니다.
/***************************************
Being the one is just like being in love.
***************************************/
/***************************************
Being the one is just like being in love.
***************************************/
그러면..
여러 프로세스가 아니고 하나의 프로세스에서
wait -> wake_up -> wait -> wait -> wake_up -> wait ...
와 같이 wake_up 한번할때 wait 두번씩 하면 어떻게 될까요?
10번의 wait 을 호출했는데 wake_up 은 5번만 호출했다면
여전이 5개의 wait queue 가 남아있는 건가요?
아니면 한번 wake_up 을 할때마다 해당 프로세스의 해당 wait queue 는 모두
해제 되는 건가요?
여전이 5개의 wait queue 가 남아 있다면 나중에 가면 overflow 가 날까요?
지금 하고 있는 프로그램에서
도저히 알 수 없는 에러가 생겨서 의심가는 부분 뒤져보는 중입니다.
댓글 달기