달력

2

« 2025/2 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

'OS이야기'에 해당되는 글 86

  1. 2011.10.14 태스크릿
2011. 10. 14. 14:46

태스크릿 OS이야기2011. 10. 14. 14:46

태스크릿은 softirq와 매우 비슷하지만 덜 엄격한 락 규칙을 갖는 등 보다 간단한 인터페이스로 돼있다.

그렇다면 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;             /*태스크릿 함수에 전달될 매개변수 */
}

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
:
Posted by НooпeУ


Code Start Code End