태스크릿은 softirq와 매우 비슷하지만 덜 엄격한 락 규칙을 갖는 등 보다 간단한 인터페이스로 돼있다.
그렇다면 softirq와 태스크릿중어느것을 사용해야 하는가?
대부분의 경우 태스크릿을 사용하면 된다.
softirq는 매우 자주 호출되거나 다수의 스레드에 의해 실행되는 경우에만 사용한다.
반면 태스크릿은 좀 더 넓은 경우에 적용된다.
태스크릿은 softirq를 통해 구현되므로 태스크릿 역시 softirq이다. 앞서도 언급했듯이 태스크릿은 두 가지 softirq, HI_SOFTIRQ와 TASKLET_SOFTIRQ의 형태를 가진다. 이 두 가지 형태의 단 한가지 차이점은 HI_SOFTIRQ에 기반한 태스크릿이 TASKLET_SOFTIRQ 태스크릿보다 우선 실행된다는 점이다.
태스크릿 구조체
<linux/interrupt.h>
struct tasklet_struct{
그렇다면 softirq와 태스크릿중어느것을 사용해야 하는가?
대부분의 경우 태스크릿을 사용하면 된다.
softirq는 매우 자주 호출되거나 다수의 스레드에 의해 실행되는 경우에만 사용한다.
반면 태스크릿은 좀 더 넓은 경우에 적용된다.
태스크릿은 softirq를 통해 구현되므로 태스크릿 역시 softirq이다. 앞서도 언급했듯이 태스크릿은 두 가지 softirq, HI_SOFTIRQ와 TASKLET_SOFTIRQ의 형태를 가진다. 이 두 가지 형태의 단 한가지 차이점은 HI_SOFTIRQ에 기반한 태스크릿이 TASKLET_SOFTIRQ 태스크릿보다 우선 실행된다는 점이다.
태스크릿 구조체
<linux/interrupt.h>
struct tasklet_struct{
struct tasklet_struct *next; /*리스트의 다음 태스크릿으로의 포인터 */
unsigned long state; /* 태스크릿의 상태 */
atomic_t count; /* 레퍼런스 카운터 */
void (*func)(unsigned long); /*태스크릿 핸들러 함수 */
unsigned long data; /*태스크릿 함수에 전달될 매개변수 */
atomic_t count; /* 레퍼런스 카운터 */
void (*func)(unsigned long); /*태스크릿 핸들러 함수 */
unsigned long data; /*태스크릿 함수에 전달될 매개변수 */
}
func 멤버는 태스크릿 핸들러(softirq의 action에 해당)이고 오직 하나의 매개변수인 data를 받아들인다.
state 멤버는 0, TASKLET_STATE_SCHED, TASKLET_STATE_RUN 중의 하나의 값을 가진다.
TASKLET_STATE_SCHED
- 태스크릿이 실행을 위해 스케줄링되었음
TASKLET_STATE_RUN
- 태스크릿이 실행중임을 나타낸다.
- 최적화를 위해 TASKLET_STATE_RUN은 멀티프로세서 시스템에서만 사용되는데 왜냐하면 싱글프로세서 시스템에서는 항상 태스크릿의 실행 여부를 알 수 있기 때문이다.
count 필드
- 레퍼런스 카운터로 사용된다. 만약 이 값이 0아 아니면 태스크릿은 비활성화되며 실행되지 않는다.
- 즉 0이어야 실행된다.
func 멤버는 태스크릿 핸들러(softirq의 action에 해당)이고 오직 하나의 매개변수인 data를 받아들인다.
state 멤버는 0, TASKLET_STATE_SCHED, TASKLET_STATE_RUN 중의 하나의 값을 가진다.
TASKLET_STATE_SCHED
- 태스크릿이 실행을 위해 스케줄링되었음
TASKLET_STATE_RUN
- 태스크릿이 실행중임을 나타낸다.
- 최적화를 위해 TASKLET_STATE_RUN은 멀티프로세서 시스템에서만 사용되는데 왜냐하면 싱글프로세서 시스템에서는 항상 태스크릿의 실행 여부를 알 수 있기 때문이다.
count 필드
- 레퍼런스 카운터로 사용된다. 만약 이 값이 0아 아니면 태스크릿은 비활성화되며 실행되지 않는다.
- 즉 0이어야 실행된다.
'OS이야기' 카테고리의 다른 글
태스크릿의 사용 (0) | 2011.10.15 |
---|---|
태스크릿의 스케줄링 (0) | 2011.10.14 |
softirq 레이즈 (0) | 2011.10.13 |
softirq 새 핸들러 등록 (0) | 2011.10.13 |
softirq 사용 (0) | 2011.10.13 |