기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

저의 질문은 다음과 같구요 ...

INIT_DELAYED_WORK_DEFERRABLE(&di->monitor_work, battery_work);
 schedule_delayed_work(&di->monitor_work, 0);

 

디바이스드라이버내에서 워크큐 관련 내용인데요

 

위의 구문이 디바이스드라이버내에서 어떤 작업이 진행되게 하는지  이해가 안 가는데 자세히 설명 좀 부탁드립니다 ...

 

 

고도리님의 답변은 다음과 같읍니다 ...

workqueue를 공부하려면 interrupt의 bottom half를 공부하셔야 합니다.

 

workqueue는 bottom half mechanism으로 탄생되기는 했지만, 특성상 여러 용도로 사용을 하고 근래에는 timer

대신에 많이 사용을 합니다.

 

어떤 event 발생시 잠시 기다렸다 worker thread가 관련된 함수를 실행시켜준다라고 생각하시면 됩니다.

 

schedule_work관련 함수들이 관련된 함수를 실행시키는 함수입니다.

 

 

 

그럼 여기서 한가지 질문 입니다 ...

위에서 battery_work 함수는 타이머의 일정주기 마다 계속 실행된다는 의미 인지요 ?

타이머의 주기는 위의 질문에서 어디쯤에서 타이머 세팅을 하는지 알수 있을까요 ?

 

어떤 event 발생시 잠시 기다렸다 worker thread가 관련된 함수를 실행시켜준다라고 생각하시면 됩니다.

이 부분이 잘 이해가 안가는데요 ...      실제 구현 예를 들어주시면서 좀 더 알기쉽고 자세한 설명 부탁드립니다 ...

 

 

 


최종환

2010.12.27 21:36:29
*.94.41.89

http://www.ibm.com/developerworks/kr/l-tasklets/index.html

 

이 문서를 읽어 보시면 빠를듯합니다.

장정인

2010.12.28 02:21:39
*.110.196.107

코드를 보지 않아서 확실치는 않지만 혹시 battery_work 안에서 또 schedule_delayed_work() 가 호출되지 않나요? 아마도 그 주기를 말씀하시는 것 같은데요.


그리고 workqueue 에 대해서 이해가 가지 않으면, 한 번 거꾸로 생각해 보세요. 어떤 기능을 구현할 때(그것이 무엇이든) 어떤 함수를 '지금' 호출하지만 그 함수가 호출하는 시점이 아닌 잠시 후에 실행되면 좋을 때가 가끔씩 있지 않나요? 그런 요구를 일반화시켜서 구현해 놓은 것이 workqueue 라고 생각하시면 좋을 것 같습니다.


보통 인터럽트를 처리할 때 바로 그런 지연된 동작이 필요한 상황이 발생합니다.(좀 더 구체적으로 말하면 지연보다는 Interrupt context 가 아닌 thread context 에서 실행되기를 바라는 것이지만...) 그래서 Top half 니 Button half 니 하는 개념들이 등장하게 됩니다. 이런 배경에 대해서는 최종환님의 글에 잘 설명되어 있는것 같습니다. 그럼.. ('c')void


최종환

2010.12.28 03:05:53
*.94.41.89

workqeue를 실행하는 함수를 한번이라도 커널 소스에서 찾아 보셨나요?

흠..kernel/workqueue.c 에서 queue_delayed_work_on() 함수를 보시기 바랍니다. (2.6.35기준)

workqueue는 책에 너무나 자세하게 나와 있습니다.

아니면 간단하게 드라이버에 메시지를 넣고 찍어 보시기 바랍니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
4148 Odroid-7 기반의 다른 제품을 만드려고 합니다. [1] 김경호 2010-12-31 1096
4147 S3C2410 SDRMA 8MB*2 사용시 문제사항 file 김형영 2010-12-30 493
4146 No private recovery resources for TARGET_DEVICE passion choboja 2010-12-30 2579
4145 front, back camera control 관련 문의 [1] 진돌이 2010-12-30 533
4144 리눅스사용에서 질문 있습니다. patro 2010-12-30 524
4143 nand 에서 yaffs로 부팅실패 박용순 2010-12-30 490
4142 리눅스 커널 scheduler가 언제 불리는지요 김주남 2010-12-30 501
4141 [완료]C110 소량 (약 10ea) 구입할 수 있는 곳이 있을까요? [1] 김경호 2010-12-29 1688
4140 Froyo에서 SD Card 마운트 문제? [1] 새희망 2010-12-29 1282
4139 [오디오]Odroid-7에서 음성 녹음 및 재생 동시에 하는 방법 뭔가요... [1] 멀미통 2010-12-29 1168
4138 Headset 추출시 동영상 pause에서 대해서 [1] 데카 2010-12-29 626
4137 안드로이드 플렛폼 디버깅 환경 어떤걸 사용 하시나요? [3] rapel 2010-12-28 932
4136 리눅스에서 sd/mmc 자동 마운트 질문입니다. patro 2010-12-28 1129
4135 com.android.internal.app.IBatteryStats import 방법 choboja 2010-12-28 797
4134 s3c2440 serial(UART) 활성화 ? [1] Apostasy 2010-12-27 786
4133 NAND MLC, SLC 은 칩에서 지원 해져야 되는 것인가요 ? [1] 시안 2010-12-27 847
» Kernel D/D 워크큐 관련 질문 입니다 ... [3] 장석원 2010-12-27 996
4131 V210 디스플레이 resolution 어떻게 되나요? [2] 뒷길 2010-12-27 619
4130 ccache 관련 의문점이 있습니다. [1] sonbong 2010-12-27 530
4129 SD card 쓰기 동작중 문제점. [2] woni 2010-12-26 1258

사용자 로그인