2011. 10. 13. 19:03
Bottom Half OS이야기2011. 10. 13. 19:03
bottomHalf의 역할은 인터럽트 핸들러에 의해 처리되지 않는 인터럽트 관련 작업을 처리하는 것이다.
인터럽트 핸들러에서는 최대한 일을 적게 할수록 좋으므로 사실 거의 모든 작업이 bottom Half에게로 돌아온다고 봐도 무방하다.
인터럽트 핸들러는 빠를 수록 좋기 때문이다.
하지만 인터럽트 핸들러도 약간의 작업을 해야한다. 예를 들어 하드웨어에게 인터럽트의 수신을 알리는 동시에 하드웨어로부터 혹은 하드웨어에게 데이터를 복사해야하는 경우를 생각해보자. 이것은 타임크리티컬할 가능성이 높으므로 이 작업들은 인터럽트 핸들러의 내부에서 처리하는 것이 적절하다.
예를들어 TopHalf에서 하드웨어로부터 데이터를 복사했다면 이 데이터를 처리하는 많은 부분은 BottomHalf에 떠넘겨지게 될 것이다.
TopHalf는 최대한 빨리 정말 필요한 작업만 하고, 나머지는 BottomHalf에게 위임한다.
약간의 규칙?
작업의 실행 시간이 중요하다면 인터럽트 핸들러에서 수행한다.
작업이 하드웨어 자체와 관련되어 있다면 인터럽트 핸들러에서 수행한다.
작업을 다른 인터럽트가 방해해서는 안된다면 인터럽트 핸들러에서 수행한다.
그 이외의 경우에는 Bottom Half에서 수행한다.
왜 Bottom Half인가????
작업의 일부를 '뒤'로 미루는 일이다.
그러나? 언제가 뒤인가?? 정답은 바로 '지금이 아닌 때'이다.
즉, Bottom Half가 실행되는 시각은 미래의 어느 특정 ㅣ점이 아니라 단순히 시스템이 덜 바쁘고 인터럽트가 다시 활성화되는 미래의 불특정한 시점이란 것이다.
인터럽트 핸들러에서는 최대한 일을 적게 할수록 좋으므로 사실 거의 모든 작업이 bottom Half에게로 돌아온다고 봐도 무방하다.
인터럽트 핸들러는 빠를 수록 좋기 때문이다.
하지만 인터럽트 핸들러도 약간의 작업을 해야한다. 예를 들어 하드웨어에게 인터럽트의 수신을 알리는 동시에 하드웨어로부터 혹은 하드웨어에게 데이터를 복사해야하는 경우를 생각해보자. 이것은 타임크리티컬할 가능성이 높으므로 이 작업들은 인터럽트 핸들러의 내부에서 처리하는 것이 적절하다.
예를들어 TopHalf에서 하드웨어로부터 데이터를 복사했다면 이 데이터를 처리하는 많은 부분은 BottomHalf에 떠넘겨지게 될 것이다.
TopHalf는 최대한 빨리 정말 필요한 작업만 하고, 나머지는 BottomHalf에게 위임한다.
약간의 규칙?
작업의 실행 시간이 중요하다면 인터럽트 핸들러에서 수행한다.
작업이 하드웨어 자체와 관련되어 있다면 인터럽트 핸들러에서 수행한다.
작업을 다른 인터럽트가 방해해서는 안된다면 인터럽트 핸들러에서 수행한다.
그 이외의 경우에는 Bottom Half에서 수행한다.
왜 Bottom Half인가????
작업의 일부를 '뒤'로 미루는 일이다.
그러나? 언제가 뒤인가?? 정답은 바로 '지금이 아닌 때'이다.
즉, Bottom Half가 실행되는 시각은 미래의 어느 특정 ㅣ점이 아니라 단순히 시스템이 덜 바쁘고 인터럽트가 다시 활성화되는 미래의 불특정한 시점이란 것이다.
'OS이야기' 카테고리의 다른 글
softirq 사용 (0) | 2011.10.13 |
---|---|
softirq 구현, 핸들러, 실행 (0) | 2011.10.13 |
인터럽트 핸들링구현 (0) | 2011.10.13 |
인터럽트 컨텍스트 (0) | 2011.10.13 |
실제 인터럽트 핸들러 (0) | 2011.10.13 |