2011. 10. 13. 20:19
softirq 새 핸들러 등록 OS이야기2011. 10. 13. 20:19
softirq 핸들러는 런탕미에 open_softirq()를 통해 등록되며 이 함수는 3개의 매개변수 즉 softirq의 인덱스, 핸들러 함수, data필드의 값을 갖는다. 예를 들어 네트워크 서브시스템은 다음과 같이 softirq를 등록한다.
open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);
open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
이 softirq 핸들럳르은 인터럽트가 활성화 상태로 실행되며 sleeping하지 않는다. 핸들러가 실행되는 동안 현재 프로세서의 osftirq는 비활성화된다. 하지만 다른 프로세서에서는 다른 softirq가 실행될 수 있다
(???? 뭐지? 핸들러가 실행되는 동안 다른 softirq를 받지 않는다는 뜻인가? 동기화를 유지하기 위해?)
사실 어떤 softirq가 한 프로세서에서 실행되고 있는 동안 다시 레이즈된다면, 해당 softirq는 다른 프로세서에서 동시에 실행될 수 있는 것이다. 이것은 공유 데이터 락에 의해 적절히 보호되어야함을 의미
이것은 매우 중요한 점으로써, 이 때문에 태스크릿이 더많이 사용되는 이유이다.
결과적으로 대부분의 softirq 핸들러는 각 프로세서별로 따로 처리가능한 데이터(각 프로세서에 고유하여 락을 사용활 필요가 없는 데이터)를 사용하거나 직접적인 락의 사용을 피하고 좋은 확장성을 제공할 수 있는 자신만의 독특한 기법을 사용
softirq의 존재이유는 확장성
만약 프로세서의 수에 전혀 제약 받지 않는 확장성이 필요한경우가 아니라면, 태스크릿을 사용하라. 태스크릿이란 결국 동일한 핸들러 여럿이 서로 다른 프로세서에서 동시에 실행되지 않는다는 제약을 가진 softirq이다.
open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);
open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
이 softirq 핸들럳르은 인터럽트가 활성화 상태로 실행되며 sleeping하지 않는다. 핸들러가 실행되는 동안 현재 프로세서의 osftirq는 비활성화된다. 하지만 다른 프로세서에서는 다른 softirq가 실행될 수 있다
(???? 뭐지? 핸들러가 실행되는 동안 다른 softirq를 받지 않는다는 뜻인가? 동기화를 유지하기 위해?)
사실 어떤 softirq가 한 프로세서에서 실행되고 있는 동안 다시 레이즈된다면, 해당 softirq는 다른 프로세서에서 동시에 실행될 수 있는 것이다. 이것은 공유 데이터 락에 의해 적절히 보호되어야함을 의미
이것은 매우 중요한 점으로써, 이 때문에 태스크릿이 더많이 사용되는 이유이다.
결과적으로 대부분의 softirq 핸들러는 각 프로세서별로 따로 처리가능한 데이터(각 프로세서에 고유하여 락을 사용활 필요가 없는 데이터)를 사용하거나 직접적인 락의 사용을 피하고 좋은 확장성을 제공할 수 있는 자신만의 독특한 기법을 사용
softirq의 존재이유는 확장성
만약 프로세서의 수에 전혀 제약 받지 않는 확장성이 필요한경우가 아니라면, 태스크릿을 사용하라. 태스크릿이란 결국 동일한 핸들러 여럿이 서로 다른 프로세서에서 동시에 실행되지 않는다는 제약을 가진 softirq이다.
'OS이야기' 카테고리의 다른 글
태스크릿 (0) | 2011.10.14 |
---|---|
softirq 레이즈 (0) | 2011.10.13 |
softirq 사용 (0) | 2011.10.13 |
softirq 구현, 핸들러, 실행 (0) | 2011.10.13 |
Bottom Half (0) | 2011.10.13 |