2013-06-13 3 views
2

사용자 공간에 구현 된 장치 드라이버 (HDMI, HDCP)에서 작업하고 있습니다.사용자 공간 (또는 사용자 공간 장치 드라이버)의 작업 대기열

이제 사용자 공간에서 비슷한 -to-linux-workqueue 기능을 찾고 있습니다.

내가 원하는 것 :
.) 작업 큐의 다른 작업/기능을 묶어서 실행하십시오.
b.) 드라이버를 종료하거나 드라이버 상태 시스템을 재설정 할 때 작업 큐를 플러시 할 수 있습니다.
c) 작업 항목의 지연된 실행을 추가하십시오.
d) 현재 작업 항목 취소 등

저는 리눅스 커널 작업 대기열 및 작업 구조 (전문가는 아니지만)에 익숙하므로 사용자 공간에서 유사한 메커니즘을 어떻게 에뮬레이트 할 수 있는지에 대한 호기심이 있습니다. 수준?

아마도 필자는 Pthread API를 일부 글로벌 큐와 함께 사용하여 이러한 종류의 라이브러리를 작성할 수 있습니다.

의견이 있으십니까?

+0

하나의 스레드 만 생성하여 작업을 직렬화해야하는 이유가 있습니까? 커널 자원 내부는 제한되어 있으며 많은 커널 스레드를 작성하는 데 비용이 많이 듭니다. 그러나 사용자 공간 자원은 더 풍부합니다. 새 작업이 필요할 때 새 스레드를 만드는 것이 좋습니다. 스레드 처리기 –

+0

No..there 안에 sleep 함수 (즉, usleep(), nano_sleep() 등) 중 하나를 사용하는 것을 지연해야하는 경우 "하나의 스레드"만 만들 특별한 이유는 없습니다. 많은 사용자 스레드를 생성 할 수는 있지만, 처리해야 할 사소한 (또는 단순하지 않은) 인터럽트/이벤트가 발생할 때마다 매번 pthread_create_ * 및 pthread_exit_ API를 통과하면 과도하지 않을까요? 필자는 단일 스레드 (또는 스레드 풀)를 미리 작성하고이 스레드에 작업을 묶는 것이 쉽고 빠를 것이라고 생각합니다. – dkumar

+0

나는이 연구를 수행하지 않았기 때문에 거기에 얼마나 많은 오버 헤드가 pthread를 만드는 것과 관련되어 있는지 정확히 알지 못합니다. 또한 오버 헤드가 실제로 여러분의 어플리케이션에 부담이되는지 확실하지 않습니다. 나는 궁금하지만 커널 공간에서만 할 수있는 인터럽트에 대해서 이야기한다. 그렇다면 커널 모듈을 가지고 있습니까? –

답변

0

예를 들어 libev 또는 libevent과 같은 이벤트 루프 라이브러리를 사용하면 작업이 완료됩니다.

+0

감사합니다. @wkz. 이러한 라이브러리는 흥미 롭습니다. – dkumar

관련 문제