본문 바로가기

예전글 목록

Top-Half vs Bottom-Half in Linux Interrupt Processing

오랫만에 블로그에 글을 쓰는 듯 하네요. 쩝
요즘 이리 저리 신숭생숭한 마음을 어쩔 수 없어서리. ㅋ

요 몇일전. 모업체에 면접을 갔다가 면접관으로부터 NIC 드라이버에 관한 애기를 나누다가
Top-Half와 Bottom-Half에 관해서 질문을 받았고 당당히 잘 모르겠습니다. 했던 안 좋은 기억이..

아무래도 헛 공부하고 개발했던 듯 하다.. 나는.. 그래서 집에 돌아와서 한번 관련 내용을 찾아보고
정리해 볼려구 한다.

LDD에서 발췌..
~~~
Interrupt Handlers need to finish up quickly and not keep interrupts blocked for long.
~~~
Linux resolves this problems by splitting the interrupt handler into two halves.
The so-called top half is the routine that actually responds to the interrupt - ~~~
The bottom half is a routine that is scheduled by the top half to be excuted later, at a
safer time.

여기서 this problems은 만약 Interrupt Handler 에서 오랜 시간을 요하는 작업을 수행해야 할경우?
는 어떻게 해야 하는가로부터 시작한다. LDD에서도 언급하였듯이 전체 시스템의 성능을 위해서라도
Interrupt Handler의 수행 시간은 적어야 한다. 이른 Linux에서는 두개의 Interrupt 루틴으로 나누고
처리를 한다. 즉 긴급을 요하는 작업은 Top-Half 그리고 이후는 Bottom-Half.....

NIC를 예로 들자면 패킷이 도착시, 커널은 최소한의 작업(패킷의 메모리 복사, 패킷 도착 알림, 재 초기화)
등을 한후 나머지 네트워크 프로토콜 레이어 작업은 이후 Bottom Half에서 처리한다.

Top-Half와 Bottom-Half의 차이점은 Bottom-Half시에 모든 Interrupt는 Enable 상태라는 것...

아.. 대충 이런 내용이었구나.. 하지만 이는 Kernel 2.5 이전이고 이후는 좀 바뀐듯 하기도 하고..
좀더 찾아보고 좀더 공부 해야겠다.. 아 아쉽다.. 왠지