본문 바로가기
실습/리눅스 커널

드라이버 코드의 실행 지연

by 써드아이 2021. 2. 8.

[블로그 통합으로 이전해 온 자료] - 2008. 4. 25. 04:07

 

* 긴 지연
// 실행 대기
while ( time_before( jiffies, j1 ) )
    cpu_relax();

// 스케쥴링
while ( time_before( jiffies, j1 ) )
    schedule();

이벤트를 기다리는 지연일 경우는 대기큐를 사용한 timeout 방법도 있다.
wait_event_timeout();
wait_event_interruptible_timeout();

하지만 이벤트를 사용하지 않는다면 schedule_timeout()을 사용한다.

set_current_state( TASK_INTERRUPTIBLE );
schedule_timeout( j1 );

timeout 시간은 jiffies 수가 된다.


* 짧은 지연
<linux/delay.h>
// 실행 대기 (프로세스가 잠들지 않음)
void ndelay( unsigned long nsec );
void udelay( unsigned long usec );
void mdelay( unsigned long msec );

// 실행 대기를 하지 않고 프로세스가 잠들게 된다.
void msleep( unsigned int msec );
unsigned long msleep_interruptible( unsigned int msec );
void ssleep( unsigned int sec );