달력

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.13 softirq 레이즈
2011. 10. 13. 20:26

softirq 레이즈 OS이야기2011. 10. 13. 20:26

핸들러를 enum 목록에 추가하고 open_softirq()를 통해 등록했다면 이제 실행할 준비가 되었따. 
softirq를 지연되었다고 표시하여 다음 do_softirq() 호출 때 실행되게 하기 위하여 raise_softirq()를 호출한다. 예를 들어 네트워크 서브시스템은 다음과 같이 호출한다.

raise_softirq(NET_TX_SOFTIRQ)

이것은 NET_TX_SOFTIRQ란 softirq를 레이즈한다. 핸들러인 net_tx_action()은 커널이 softirq를 다음번에 수행할 때 실행한다.
이 함수는 softirq()를 레이즈하기 전에 인터럽트를 비활성화시키고 레이즈후 이전 상태로 복구한다. 만약 인터럽트가 이미 비활성화 상태라면 raise_softirq_irqoff() 함수를 사용하여 좀더 최적화할 수 있다.

/* 인터럽트는 반드시 비활성화 상태여야 한다 */
raise_softirq_irqoff(NET_TX_SOFTIRQ) //비활성화 상태임을 보장

/*************
일반적으로 softirq는 인터럽트 핸들러 안에서 레이즈된다. 인터럽트 핸들러(top half)는 기본적인 하드웨어 작업을 수행하고 softirq를 레이즈하며 종료됨. 인터럽트 처리를 종료하면서 커널은 do_softirq()를 호출한다. 그러면 softirq가 실행되어 지연된 인터럽트 핸들러를 찾게된다.
**********************/ 

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

태스크릿의 스케줄링  (0) 2011.10.14
태스크릿  (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