SW 개발

[Linux Device Driver] Device Driver 에서의 지연함수 (sleep / delay) 개념정리

. . . 2013. 4. 4. 14:49
반응형

다음의 내용은 오렐리 리눅스 디바이스 드라이버(개정3판) 의 내용을 정리한다.

단기지연

함수종류 Type1

void ndelay(unsigned log nsec);
void udelay(unsigned log usec);
void mdelay(unsigned log msec);
  • 일단 위의 함수들은 아키텍쳐에 의존적이다. 아키텍쳐에서 제공하지 않을때는 에서 기본버젼을 제공한다.
    • 위의 함수들은 SW loop 를 사용한다.
    • 위의 함수로 최대로 delay 시킬수있는 값은 제한되어있다. (__bad_udelay )
    • 실행대기 함수들로, 위의 함수들을 실행하는 동안에는 다른 TASK 를 실행하지 않는다. (contex switching 이 안일어나는듯;;)
    • delay 할수있는 시간의 단위만 다를뿐 동작내용 상으로는 jitbusy 와 동일하다.

함수종류 Type2

요청한 시간보다 지연이 길어져도 괜찮다면 아래의 함수를 사용해도 좋다.

void msleep(unsigned int millisecs);
unsigned long msleep_interruptible(unsigned int millsecs);
void ssleep(unsigned int seconds);
  • msleep / ssleep : 호출한 프로세스가 잠든다. 잠든동안에는 인터럽트가 불가능 하다.
  • msleep_interruptible : msleep 과 동일하나 인터럽트가 가능함.
반응형