달력

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.15 태스크릿의 사용
2011. 10. 15. 14:58

태스크릿의 사용 OS이야기2011. 10. 15. 14:58

대부분의 경우 일반 하드웨어 디바이스의 bottom half를 구현하기 위해 태스크릿 매커니즘을 사용한다.

태스크릿 선언
태스크릿은 정적으로도 동적으로도 만들 수 있다.

태스크릿을 정적으로 사용한다면
<linux/interrupt.h>에 정의된 다음 두 매크로 중 하나를 사용하면 된다.

DECLARE_TASKLET(name, func, data);
DECLARE_TASKLET_DISALBED(name, func, data); 

두 메소드의 차이점은 count에 있다. 첫번째 매크로는 count = 0, 두번째 매크로는 count =1

DECLARE_TASKLET(my_tasklet, my_tasklet_handler, dev);

이것은 다음코드와 동일하다.
struct tasklet_struct my_task = {NULL,0, ATOMICE_INIT(0), my_tasklet_handler, dev};

동적으로 새성된 struct tasklet_struct에 대한 포인터 t가 주어질 경우 태스크릿을 초기화하기 위한 코드는 다음과 같다.
tasklist_init(t, tasklet_handler, dev) // 동적으로 생성된 태스크릿

태스크릿 핸들러의 작성
void tasklet_hanlder(unsigned long data)
softirq와 마찬가지로 태스크릿은 휴면되지 않는다.(nonblocking)
이것은 곧 태스크릿 안에서 세마포어나 그이외의 블로킹 함수를 사용할 수 없음을 나타냄 
또한 태스크릿은 모든 인터럽트를 활성화한채 실행되므로, 만약 태스크릿이 다른 인터럽트 핸들러와 데이터를 공유한다면 반드시 미리 필요한 작업을 해두어야 한다.
태스크릿은 인터럽트를 활성화한채 실행되므로, 만약 태스크릿이 다른 인터럽트 핸들러와 데이터를 공유한다면 반드시 미리 필요한 작업을 해두어야 한다.(예를 들어 락을 얻기전에 비활성화 시킴)
하지만 softirq와는 달리 같은 태스크릿은 동시에 실행되지 않는다. 그러므로 다른 태스크릿은 서로 다른 프로세서에서 동시에 실행가능하다

태스크릿 스케줄링















 

'OS이야기' 카테고리의 다른 글

지피 - jiffy  (0) 2011.10.17
어떤 Bottom Half를 사용해야 하는가?  (0) 2011.10.16
태스크릿의 스케줄링  (0) 2011.10.14
태스크릿  (0) 2011.10.14
softirq 레이즈  (0) 2011.10.13
:
Posted by НooпeУ


Code Start Code End