블럭 모드 질문입니다. (interruptible_sleep_on)

lovejin0309의 이미지

안녕하세요. 디바이스 드라이버를 작성중입니다.

문제가 조금 있네요.

응응 프로그램에서는 무한 루프를 돌면서 read()함수를 호출합니다.

응용 프로그램에서 read()를 호출하면 디바이스 드라이버에서 일련의 동작을 수행하는데, 그 수행이 모두 완료되기 전에 응용프로그램에서 다시 read()를 호출하는 것으로 보입니다.

그래서

디바이스 드라이버의 read()가 시작되면 프로세스의 동작을 일시 중지 시키고 모든 수행이 끝나면(return 할때) 프로세스의 동작을 다시 시작시키도록 해야 할 듯 합니다.

책을 뒤져 보다 보니까

interruptible_sleep_on 이라는 함수를 이용하여 할 수 있다고 하더군요.

디바이스 드라이버의 read()가 시작될 때 프로세스를 일시 중지시키고
처리가 모두 끝나면 프로세스의 동작을 다시 시작해야 하는데

어떤 함수를 이용해야 하나요?

interruptible_sleep_on -> 일시 중지 함수
xxxxxxxxxxxxxxxxxxxxx -> 재시작함 수

부탁 드려요.

(혹시 interruptible_sleep_on을 사용한 다음 return을 사용해서 동작을 끝내면 자동으로 프로세스(app)가 재 동작하는 건지요?

pastime의 이미지

wake_up_interruptible() 함수를 사용하면 됩니다.

interruptible_sleep_on() 함수가 호출된 시점에서
현재 프로세스는 제어권을 반납하고 sleep 하기 때문에
(wake_up_interruptible() 과 같은 함수에서 프로세스를 깨워줄 때 까지)
이후의 부분들은 실행되지 않습니다.